Pull to refresh

Comments 79

Что за ересь про обфускацию и ретрофит? "Стандартный обфускатор" — это Proguard? Вы в курсе, что он не обфусцирует код, а минифицирует? Торчат наружу методы — и чего? Это возможность для кибератаки? о_О'


Что за ересь про тестирование геттеров и сеттеров? Вы что, руками писали их до дата-классов?

Я не могу отвечать за Владимира (возможно, он позже ответит сам), но, насколько знаю, ProGuard и минифицирует, и обфусцирует. Первая же строчка Википедии: «ProGuard is an open source command-line tool that shrinks, optimizes and obfuscates Java code».

Нет, Proguard ничего не обфусцирует. Он не запутывает код программы, а только минифицирует его.
В любом случае, даже если не спорить о терминах, если приложение имеет внутри себя урлы, и умеет по ним обращаться, то получить эти урлы для хакера не составит труда. О какой кибератаке говорят "спецы" по безопасности, непонятно.

Ну, видимо, вам виднее, обфусцирует ли что-то ProGuard, чем всему остальному миру:



Насколько я понимаю, без обфускации ProGuard приложения оказываются несколько более подверженными реверс-инжинирингу. Но тут предпочёл бы услышать мнение эксперта, могу сам что-то неправильно понимать.

Моё мнение основано на том, что я знаю, что делает Proguard, а так же о том, что такое обфускация. Ребята, например, из Licel говорят на конфах то же самое.
Ваши картинки вообще неубедительны, на заборе тоже написано.
И, в любом случае, вопрос был не о терминологии(том, как назвать то, что делает Proguard), а о том, что собрались прятать с его помощью "спецы" из Сбера.

По вашей ссылке чёрным по белому крупно написано «Обфускация с помощью ProGuard», и ни разу не сказано «это не является обфускацией». Она не подтверждает ваши слова, а противоречит им.

Вопросов в вашем исходном комментарии было несколько разных, мой комментарий был к одному из них («Вы в курсе, что он не обфусцирует код, а минифицирует?»), а вы по ходу треда подменяете его другим.

Это спор о терминологии. Я буду продолжать называть минификацию минификацией. Обфускация подразумевает значительное усложнение отладки и изучения кода. Proguard этого не даёт. В статье подразумевалось, что им нужно это усложнение.

Ну, тогда у вас довольно нестандартный подход к терминологии: скажем, в вики-статье про обфускацию даже конкретным примером приводят «naming variables in a meaningless way», то есть человечество считает это достаточно значительным усложнением. Но хорошо, понял вас, дальше не спорю.
«Всё люди как люди, а я дартаньян». Может прекратите глупости говорить? Под глупостями я имею ввиду именно ваше представление о том, что такое обфускация, и что она должна быть обязательно значительной, и что мера этой значительности известна только вам.
Ещё рекомендую воспользоваться переводчиком.

Можно называть это как угодно. Заканчивайте флейм уже и сосредоточьтесь на главной мысли: они с помощью этого хотели скрыть API. Для предотвращения риска кибератак.

Что за ересь про обфускацию и ретрофит? «Стандартный обфускатор» — это Proguard?

Да, это ProGuard.
Документация от Google
Вы в курсе, что он не обфусцирует код, а минифицирует?

Он и обфусцирует и минифицирует. В данном случае, запутывание происходит за счёт переименовывания классов, методов и полей, чтобы их было сложнее читать, но не даёт гарантии от того, что нельзя будет разобраться в «мусорных» названиях методов.
А тут есть примеры работы ProGuard
Торчат наружу методы — и чего? Это возможность для кибератаки? о_О'

Проще восстановить API для работы с сервером, точнее, будет лежать уже готовый API, который можно копировать и вставлять к себе в проект.
Что за ересь про тестирование геттеров и сеттеров?

Если поведение геттера и сеттера производит какие то манипуляции с данными, например, конвертация в другой формат, то у нас обязательное требование на тестирование таких методов
Проще восстановить API для работы с сервером, точнее, будет лежать уже готовый API, который можно копировать и вставлять к себе в проект.

Мы точно говорим про кибератаки?


например, мы пишем на Kotlin тесты и используем data classes (так мы экономим время, чтобы не писать тесты на геттеры, сеттеры, equals(), hashCode() и прочее).

Ну, в общем, понятно.

Мы точно говорим про кибератаки?

Не совсем, это больше было требование отдела безопасности
В банке есть различные отделы, выставляющие свои ограничения и принимающие работу. Не всегда эти требования соответствуют здравому смыслу и еще зависят от человеческого фактора.
Продавливать свою позицию можно, но это когда на проекте идейные люди с рогом носорога :)
Если поведение геттера и сеттера производит какие то манипуляции с данными
Почему в геттерах и сеттерах есть манипуляции с данными?
Порой требуются некоторые манипуляции с данными. В идеале этого быть не должно. Но если же случилось, то тогда нужно покрытие тестами
С Котлином дата классы не обременяются логикой
Ну так если с Kotlin можно избежать этого, то почему в Java так не сделать?
Уже так не делаем, сказался опыт прошлых лет

Короче вы используете Котлин не так, как нужно. Вашу проблему легко решают как AutoValue, так и обычный студийный генератор кода. А Котлин просто приносит вам больше методов.

Вашу проблему легко решают как AutoValue

Мы брали в проработку изучение этой проблемы. Были рассмотрены Lombok, AutoValue и Kotlin data class. По итогу остановились на Котлине, не только из-за удобства дата классов, а еще для того, чтобы в дальнейшем полностью перейти на него и начать изучение с небольших шагов, так как команда очень большая и уровень разработчиков разный. Поэтому начали с тестов и дата классов, дальше будем проводить обучение и наращивание кода на котлине.
Видел кучу проектов, где в геттерах присутствует манипуляция с данными. И в сеттерах. И вообще где угодно.

Естли в них нет никакой кастомной логики, зачем они вообще нужны-то? Ну сделайте публичные поля, и пишите туда с чистой совестью. Заодним и перфоманс повысите :)
За все время использования андроид смартфонов Сбербанк Онлайн — единственное приложение которое у меня не получилось установить.
Обязательно попробуйте Spek для юнит тестов — он драматически улучшает качество написанных с его помощью Unit тестов. Как раз к тому моменту, как дозреете для Kotlin — доделают Spek 2.0, в котором порешали детские болезни первой версии. Хотя мы уже полтора года с первой версией отлично уживаемся
Спасибо большое! Добавлю в бэклог на проработку данного фреймворка
UFO just landed and posted this here

Потому что встроенный антивирус проверяет СМС на попытки социнжиниринга. Вынужденная мера, учитывая величину клиентской базы. Но, впрочем, в этом механизме грядут изменения к лучшему.

Запретил доступ к: звонкам, групповым звонкам, смс, ммс, геолокации, запуск прошел успешно. Андроид 5.1.
Но похожая на вашу была ситуация с яндекс почтой, ни в какую не запускалась без постоянного доступа к геолокации, правда после волны народного гнева быстро переделали.
UFO just landed and posted this here
Допустим, обнаружил он попытку социнжиниринга. И?

Тут точно не знаю. Полагаю, что попросит позвонить в call-центр

Думаю, заблокирует отсылку сенситивных данных, например CVV2 кода.
Это вряд ли: откуда у рядового приложения доступ к возможностям ограничивать возможность работы других приложений (на самом деле, «антивирус сбербанка», INHO, ну никак не может быть антивирусом почти в любом смысле)?
Да, подумал об этом позже, но уже было поздно. Одно дело просто читать СМС, другое дело не давать отправить СМС другой программе. Без рутовых прав этого не сделать, а приложение как раз против рутовых прав, по крайней мере было ранее.
Я бы (на месте программы) уведомил пользователя и отослал в банк «чёрную метку», накладывая на аккаунт временные ограничения, целью которых было бы снижение вреда утечки данных.
UFO just landed and posted this here
В последних версиях требование к правам вроде понизили, СМС доступ нужен только для диалогов.
Но все же. Если сбербанк ведет агрессивную политику продвижения мобильного приложения, то доступ к СМС за приложение нарушает не мало законов. Во первых конституцию РФ, тайна переписи там только по решению суда можно. Во вторых приложение для физических лиц и даже если оно условно бесплатно то работает закон о защите потребителей, в нем тоже ясно написано что обуславливать одну услугой другой запрещено.
UFO just landed and posted this here
UFO just landed and posted this here

Сейчас увидел, что уже выложили в Google Play версию 8.4. В ней доступ к СМС больше не требуется для запуска приложения.
Правда, при входе в Уведомления мы попросим доступ. Это нужно для того, чтобы в одном окне хронологически показать и СМС-, и пуш-уведомления. Там просто откажитесь давать права и поставьте галочку "Больше не спрашивать" и все. Приложение останется полнофункциональным.

UFO just landed and posted this here

Тоже антивирус требует. Какая-то его внутренняя кухня, к сожалению, у меня нет инфы, что он с этим делает.

UFO just landed and posted this here

Тут просто надо оценить размер нашей команды — более 100 человек работают над приложением. Не могут же все знать все. Ребята, которые занимаются интеграцией антивируса, разумеется, знают про него все.
Я попробую выяснить.

Детали алгоритмов антивируса оказалась под NDA, поэтому не получится дать больше информации. Прошу прощения.

UFO just landed and posted this here
Особенности реализации модели безопастности Android, доступ к информации о устройстве входит в группу разрешений звонков. Видимо спецом сделали что бы пугало пользователей и особо не юзал никто этот permission.

Вообщем звонить и смотреть историю звонков (скорее всего) никто не будет, а разрешение нужно тупо что бы идентифицировать ваше устройство и проверить что оно безопасно.
Ну в приложении еще есть кнопка: «позвонить в банк». Мож для неё?
UFO just landed and posted this here
UFO just landed and posted this here
Ну чиста формально оно ничего не нарушает. Вы ведь сами даёте доступ к переписке. Или не даёте.
во первых конституцию РФ, тайна переписи там только по решению суда можно.

Вы рыбу с мясом не путайте. Когда ещё не было Интернета и переписывались не в Телеграм, а телеграммами (бумажными), то телеграфисты и почтальоны спокойно читали текст, и никого за это не судили. Просто потому, что их работа была связана с этим. Соответственно, под нарушение закона о тайне переписки попадали лишь те, кто, имея доступ к частной информации, сообщали её третьим лицам либо получали доступ не в связи со своими служебными обязанностями.
Таким образом, программа, читающая ваши СМС, не нарушает вашу тайну переписки, пока содержимое переписки не покидает ваш девайс. Чтобы произошло нарушение вашего права на тайну переписки, ваши СМС должны читать посторонние люди.
Прежде чем отвечать нужно читайте лицензионное соглашение.
Вопрос из абстрактного мира:
Понятен переход на Kotlin.
Если бы сейчас выбирали технологии, был бы выбор в пользу МVP+Rx? Если писать с нуля?
Или какой-нибудь MVVM+Room+coroutines?
Если бы начинали проект с нуля, то базовый стек выглядел бы следующим образом: Общая архитектура Clean или Hexagonal, мета архитектурные паттерны по надобности, потому что для одной фичи может хорошо зайти MVVM, а для другой достаточно MVP, для БД выбрали бы Room, а для асинхронки скорее всего корутины, т.к. в октябре их уже должны зарелизить в версии 1.0, вероятно, там будут новые интересные возможности добавлены. И для нового проекта точно старался бы не использовать кодогенерацию, потому-что из-за неё страдает скорость сборки
Слегка накину про DSL и Automation testing. Попробуйте наше Какао!
Спасибо большое за совет. К сожалению, мы узнали о Kakao уже после того, как написали свой фреймворк для облегчения написания UI тестов и переходить на другой инструмент уже было нецелесообразно. А так Ваше решение нам очень понравилось

"альфа-тестирование после того, как написали фичу"
То есть до этого разработчик что-то написал, заккомитил и сказал что все ок? Ни проверить, ни потестить?
А так убило новведение по использованию push'ей ВМЕСТО СМС. Это уже совсем никуда не годится. Я за СМС оповещения деньги плачу, почему меня принудительно (без каких-либо оповещений) переводят на push-only?
А про антивирус — отдельный разговор. На моем Xiaomi можно хотя бы закрыть запуск в заднем фоне. А то ведь проверка этим антивирусом съедала пол аккумулятора. Более того, у меня стояло приложение от UI-тестов к моему приложению. Сбербанк-клиент начал кричать что это вирус, все плохо и надо его удалить, иначе в отделение побежите. Бред полный

То есть до этого разработчик что-то написал, заккомитил и сказал что все ок? Ни проверить, ни потестить?

Альфа тестирование как раз предполагает, что сам разработчик должен протестировать написанную им фичу и только потом коммитить код и отдавать уже тестировщику тестить.
А так убило новведение по использованию push'ей ВМЕСТО СМС. Это уже совсем никуда не годится. Я за СМС оповещения деньги плачу, почему меня принудительно (без каких-либо оповещений) переводят на push-only?

К сожалению, я не могу Вам ответить по поводу таких нововведений, так как это решают совсем не разработчики
Более того, у меня стояло приложение от UI-тестов к моему приложению. Сбербанк-клиент начал кричать что это вирус, все плохо и надо его удалить, иначе в отделение побежите.

Антивирусные проверки с каждым разом становятся всё лучше, к сожалению, сейчас возникают некоторые проблемы, но с каждой версией проверки будут улучшаться

"Альфа тестирование как раз предполагает, что сам разработчик должен протестировать написанную им фичу и только потом коммитить код и отдавать уже тестировщику тестить. "
Имел ввиду: как до этого жили?
"К сожалению, я не могу Вам ответить по поводу таких нововведений, так как это решают совсем не разработчики"
То есть у вас разработчики никак не влияют на новые фичи? То есть обоснованность и возможность реализации не обсуждается?
"Антивирусные проверки с каждым разом становятся всё лучше, "
К сожалению, наблюдаю обратное.

Имел ввиду: как до этого жили?

Порой бывало, что разработчик отдавал сборку, предварительно не проверив, поэтому ввели такое жесткое правило
То есть у вас разработчики никак не влияют на новые фичи? То есть обоснованность и возможность реализации не обсуждается?

Разработчики могут влиять на фичи и могут предлагать добавить какой-то функционал, но этот переход выходит за рамки простой фичи, это скорее фундаментальное изменение, поэтому такое решение принимало руководство

Спасибо. Хочу вот узнать
"отдавал сборку" именно сборку, не исходники? То есть исходники есть только у конкретного разработчика?

Тестировщикам именно сборку. Отдавать тестировщику исходники — это лишний шаг, как мне кажется. А в общий репозиторий делался пул реквест

А как из сборки собирается приложение? А как подцепляются общие вещи? Хочу узнать, как вообще проект разделяется на сборки и модули. Возможно это какая-то технология?

Под сборкой я подразумеваю собранный APK файл с изменениями, которые внёс разработчик. Обычно, у нас 2 пути: первый — это сразу собрать на телефон приложение и отдать в тестирование, второй — это дождаться сборки пул реквеста и после этого он выкладывается на ресурс, с которого его могут скачать тестировщики и уже начать тестирование.
Разделения по модулям у нас происходит по принципам GRASP, тема довольно таки обширная. Если в двух словах, то мы разбиваем модули по продуктам, а в свою очередь общий функционал выносится в модули более низкого уровня и от него уже наследуются продуктовые модули. Про модульность хорошо было рассказано на Mobius 2018 Piter, у нас подобное разделение

Большое спасибо за разъяснения

Мне эта фраза тоже резанула глаз, да настолько, что я промотал остаток статьи и стал искать комментарии на этот счет. И мой вопрос на самом деле чуть шире, потому что относится не только к Сберу: насколько широка практика отдавать в тестирование что-то, что просто «компилируется и вроде как должно работать»? Дело в том, что со мной сейчас в проекте трудятся еще три мобильных разработчика, два местных, австралийцы, а другой удаленно, из Турции, и каждый день я вижу релизы с настолько очевидными и вопиющими проблемами (начиная от крэшей на старте или в том, что они только что сделали, и заканчивая поехавшим лэйаутом), что у меня начинает складываться ощущение, что во все мире теперь так. Причем они так легко относятся к этим проблемам, как будто это нормально делать вкривь-вкось, чтобы чисто закрыть задачу, а потом еще неделю футболить ее туда-сюда с QA. Самое главное, что и QA в целом все устраивает. Неужели это новая норма?
Господа, как насчёт выпуска light-версии приложения? Чисто работа по шаблонам и, может быть, пополнение счёта контактного номера, показ баланса и т.п., что делается при наличии рута в телефоне, но БЕЗ долбанутой социалки (извините, но я не согласен давать свой список контактов банку без разрешения от всех контактов) и БЕЗ антивируса?
Когда на старом телефоне с полудохлой батареей за час поездки от работы до дома заряженная батарейка съедается более, чем наполовину, в то время, как без приложения телефон вполне доживал до приезда на работу на следующий день — это как-то перебор для приложения, которым будешь пользоваться точно не каждый день и даже не факт, что каждую неделю.
К сожалению, пока что данный вопрос у нас не обсуждается, но мы возьмём на заметку и донесём позицию наших пользователей до руководства
Я ещё попрошу рассмотреть вопрос о минимизации размера приложения и особого умения работать с картой памяти, а то с год назад ваша программа отказалась влезать на Эксплей Рио Плей. По причине нехваткисвободного места. В одно лицо, большена аппарате ничего не жило.
Над минимизацией как раз сейчас работаем. Планомерно вычищаем неиспользуемые ресурсы, код и прочее
Где-то в одиноком московском офисе, ребята защищаются от кибератак тем, что обфусцируют java код в Android приложениях…
Не понимаю эта имитация антивируса. Если у меня нет рута (а вы против рута), то как вы что-то вне своего приложения серьезно проверите?
И, да, я не хочу, чтобы какой-то софт (тем более банковский) шарился по моей ФС. Причем, без четкого объяснения, зачем это нужно, и как оно вообще может работать.
Вот вот. Устанавливал полную версию KIS. Толку ноль вирусы спокойно и самостоятельно устанавливаются на телефон и выводят рекламу в полный экран. Причем так что её не свернешь и не закроешь, только кликнуть по ней можно.
Установка неизв. приложений запрещена, гугл плей защита активна. Касперский через два раза на третий, реагировал. И то лишь предлагая удалить вирус.
Причем что интересно вирусы/реклама прилетали на телефон лишь тогда когда он был активен вне домашней wi-fi сети(т.е. через мобильного оператора, попутно сжирая довольно заметный объём трафика).
Где вы эти вирусы нашли-то?
Нигде. Прошивка чистая заводская, загрузчик заблокирован. На телефоне пяток приложений поштучно проверенных. И при этом проги самостоятельно как то устанавливаются. В гугл плее проверял, по названию не ищется. При этом названия вирусных приложений то разные, то одинаковые. Я х.з. Тело Tesla Prime 5.0 LTE ос 5.1.
Началось в последние полгода. Видимо нашли уязвимости в прошивке.
Only those users with full accounts are able to leave comments. Log in, please.