- PVSM.RU - https://www.pvsm.ru -

Реверс API по его android приложению

Зачем

У меня есть pet-project, приложение для учета финансов.

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

Но

  • Банков несколько и они ничего не знают друг про друга. В итоге
    • Нет единой аналитики
    • Перевод денег из одного банка в другой будет считаться как списание с одной стороны и зачисление с другой. Эта особенность портит аналитику.
  • Возможность работать с данными позволяет строить любую аналитику и прогнозы в отличие от ui банка

Для доступа к данным можно использовать разные каналы: сайты и приложения. Сайты выглядят проще: взял дебагер chrome и вперед. Но данные на сайте чаще меняют свою структуру, так как кроме данных они содержат еще элементы UI. Приложения, в отличие от сайтов, запрашивают данные с сервера и только в своих кишках делают из него UI. На сайте нужно оперировать html, который построен на малопонятных, мутабельных div, изменямых javascriptом. В приложения обычно приходят уже удобные для машинной обработки json/xml.

Дисклеймер

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

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

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

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

Как

Краткая инструкция для реверса приложения

  • Качаем charles [1], apktool [2], "штука для подписи приложений" [3]
  • Подготавливаем приложение к MITM [4]
    • С помощью apktool анбоксим приложение apktool d -f -r app.apk
    • Меняем политику безопасности приложения, на доверие сертификатам телефона
      • Меняем/Добавляем файл network_security_config.xml с содержанием
        <network-security-config>
        <base-config>
          <trust-anchors>
              <certificates src="user" />
          </trust-anchors>
        </base-config>
        </network-security-config>
      • Убеждаемся/Добавляем декларацию network_security_config.xml в манифесте AndroidManifest.xml атрибутом networkSecurityConfig
        <application android:networkSecurityConfig="@xml/network_security_config"></application>
    • Некоторые приложения не будут вестись на такой способ валидации сертификатов
      и имеют собственное хранилище сертификатов. Для них

      • Выгружаем из charles корневой сертификат Help > SSL Proxying > Save Charles Root Certificate
      • Заменяем доверенный сертификат на сертификат charles cp <your.cer> your_app/res/somePath/somecert.cer
      • Теперь приложение будет доверять charles вместо настоящего.
  • Собираем приложение обратно apktool b yourapp -o ${apkName}
  • И подписываем его java -jar sign.jar ${apkName}
  • Подписанное приложение устанавливается вместо настоящего на телефон
  • Конфигурируем телефон на проксирование трафика через Charles (в настройках wifi выбирается Proxy. IP - машины с charles, PORT-8888)
  • Устанавливаем сертификат charles на телефон.
    • Заходим на https://chls.pro/ssl [5]
    • Скачивам сертификат
    • Устанавливаем его
  • Запускаем приложение и снифим трафик.

Итог

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

  • Посмотреть на процесс регистрации устройства. В результате нужно получить специальный id вашего девайса, который знает сервер
  • Разобраться в процессе аутификации. Обычно происходит передачей id девайса и пароля на сервер. В ответ обычно выдают токен, который потом используется в header или cookie. Типичный пример jsessionid [6]
  • Совершать действия в приложении, приводящие вас к интересной вам информации, смотреть на запросы.
  • Запросы воспроизводим в коде, далее обрабатывая информацию по своему усмотрению.

Автор: MEJIOMAH

Источник [7]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/data-mining/351780

Ссылки в тексте:

[1] charles: https://www.charlesproxy.com/

[2] apktool: https://ibotpeaches.github.io/Apktool/install/

[3] "штука для подписи приложений": https://github.com/MEJIOMAH17/sberbank-api/blob/master/reverse/sign.jar

[4] MITM: https://ru.wikipedia.org/wiki/%D0%90%D1%82%D0%B0%D0%BA%D0%B0_%D0%BF%D0%BE%D1%81%D1%80%D0%B5%D0%B4%D0%BD%D0%B8%D0%BA%D0%B0

[5] https://chls.pro/ssl: https://chls.pro/ssl

[6] jsessionid: https://javarevisited.blogspot.com/2012/08/what-is-jsessionid-in-j2ee-web.html

[7] Источник: https://habr.com/ru/post/495682/?utm_source=habrahabr&utm_medium=rss&utm_campaign=495682