Как стать автором
Обновить

Комментарии 32

Правильно ли я понимаю, что при таком подходе пользователю необходимо будет вводить логин и пароль от своего банковского приложения в левое приложение? Вряд ли таких пользователей будет много, банки на каждом углу твердят о том, что нельзя вводить учетные данные где попало, к тому же скорее всего придется ещё подтверждать вход через СМС (если не все банки такое требуют то большинство), а в нем ещё раз написано, что не стоит вводить этот код не в официальное приложение

Приложение вы собираете самостоятельно. В чем отличее такого приложения от официального описано в статье. В чем угроза для безопасности во время дебага я не очень понял.

Если мы говорим дальнейшее использование api внутри своего приклада, то это уже выбор пользователя доверять ли такому прикладу. Если бы я выкладывал бы такое приложение, я бы положил клиентскую часть в open source и всю работу с банками совершал на клиенте, отправляя на сервер уже полученные данные.

Данная статья не только про банки, таким же образом можно, например, найти способ автоматически отправлять показания счетчиков в вашу управляющую компанию. Способов применения сотни.

Я не говорю об опасности такого подхода, это просто способ работы. Я говорю о том, что такой подход вряд ли будет сильно популярен у пользователей, да и вообще будет отрицательно сказываться на впечатлении о приложении.
Если бы мне встретилось приложение, которое бы запрашивало мои учетные данные от банка, то я бы вряд ли их ввел. Даже если бы мне автор дал ссылку на репозиторий, т.к. во-первых я не могу быть уверен, что приложение собрано именно из этих исходников (можно конечно самому собрать), а во-вторых разбираться в этих исходниках мало удовольствия и много времени

приложение собирается для разработчика и только для него с целью дебага апи.

Сертификат то нужен не только для дебага, а и для использования. Север не даст использовать API без сертификата

прочтите ваш коммент. В нем на тему популярности у пользователей написано. Будет или не будет работать с сертификатом — тема другая.


такой подход вряд ли будет сильно популярен у пользователей, да и вообще будет отрицательно сказываться на впечатлении о приложении

У меня есть опыт написания финансового приложения, в котором болшое внимание уделялось безопасности. И в нем для подтверждения оригинальности приложения использовался свой сертификат, но просто так его нельзя было бы так просто использовать в другом приложении, т.к. он был запаролен, а пароль был зашифрован и расшифровывался в приложении во время работы (да, его можно было вытащить, но это было бы не просто).

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

Любой сертификат использовать не получится, т.к. сертификат приложения используется для подписи запросов и только этой подписи доверяет сервер. Вытащить логику можно (можно даже в дебаге отследить момент расшифровки сертификата паролем и получить пароль в числом виде), проблема в том, что сертификаты меняются часто и прридется заново вытаскивать сертификат и пароль и перевыпускать свое приложение

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

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

Но ведь если сертификат привязать к одному приложению — это не сработает?

Отличная инструкция, спасибо!

Если на телефоне имеется root доступ, для относительно простых случаев достаточно приложения HttpCanary.

А кто-нибудь сталкивался с ситуацией, когда запросы подписываются дополнительным параметром?

Примерно так: api.host?param1=..&param2=..&signature=abc123456
apktool позволяет смотреть код приложений, далее думаю понятно =)

Есть альтернатива для рутованных телефонов — frida.js. Удобная штука, что бы не связываться с редактированием apk

А если не секрет, какое приложение банка позволило вам запуститься на рутованном телефоне?
Обычно если телефон рутован то приложение банка говорит что оно не будет работать. Как минимум у Сбера точно знаю что при руте приложение не запустится. А без рута не будет трафик сниферится.
Рут не нужен.
Сбер, на руте работает.
Сейчас посмотрел, действительно работает. Видимо память подводит.
Раньше не работал.
Но после того, как сбер апихнул туда антивирус, разжиревшее нечто, перестало влезать на бюджетные смарты.
В общем, получилось ещё хуже, и сбер пошёл на некоторые послабления.
Magisk умело маскируется. там как бы и не совсем рут… несколько хитрее

Извините за нубский вопрос — правильно ли я понимаю, что если мое приложение ходит напрямую (без серверсайда) в гуглмапс, то Вы без труда сможете достать его ключик и, самое главное, использовать его для любых своих целей, несмотря на то, что в настройках гуглмапс он задан, как ограниченный к использованию только этим приложением?
Очень грустно, если так. Значит без серверсайда не обойтись даже в MVP

Если вы зашили его в код приложения, то да смогу. В этом ключевая проблема всей логики на клиенте, ее потенциально можно утащить.

При регистрации приложения в сервисах гугл необходимо указывать fingerprint сертификата. Т. о. приложение подписанное другим сертификатом не будет иметь доступ к вашему сервису.

Спасибо за разъяснение!
Как минимум для одного российского банка фокус не сработает (придется в приложении искать сертификат которым оно авторизуется и пароль к нему), ну а потом возится с тем что нужен токен авторизации который живет минут 15 (но можно обновить, но придется разбираться где берется токен для обновления).
Для сбора данных если уже дошло до пересборки apk — проще найти где там в этом приложении включается отладочная ручка (в сборке из PlayStore она отключена но в принципе возможно наличие продовой сборки с включенной ручкой и иногда так делают) и смотреть все нужно для сбора данных в logcat например. Про обфускацию разумеется тоже не забыли.

Только вот для целей учета персональных финансов — проще web.budgetbakers.com использовать (и этот банк и многие другие российские — поддерживают, правда на каждую синхронизацю СМС потребуется… и да — потребуется логин и пароль от ИБ, доверять ли этому не смотря на все заявления — на усмотрение клиента)
Ждём следующую статью по классификации банковских приложений по взлому и анализу, на сколько было легко сломать, вытащить сертификат и тп). Тоже считаю что у вас мало что получится.
Статьи не будет, ибо боюсь.

Все банки которые были мне интересны поддались. Проще всего было с «онлайн» банками.
Часть кода может быть написана на языке c++, и тогда уже нужно будет смотреть логику через IDA или Ghidra. Некоторые приложения могут ругаться на подпись приложения. Для тех у кого есть рут права и xposed для обхода сертефиката можно использовать SSLUnpinning или TrustMeAlready, если нет xposed то можно через frida. Вместо apktool и «штуки для подписи приложений» для пользователей Windowos можно использовать BatchApkTool.
Спасибо! Очень ценное дополнение!
Вы гений сенсей, как вы молчали столько времени.
По статье задача выглядеть легким, такой способ работает с любым приложением? например с увернем aliexpress?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории