3 место [ Android приложения ] - Подмена и редактирование запросов на лету с помощью Charles и FRIDA

  • Автор темы Автор темы blackbyte
  • Дата начала Дата начала

blackbyte

Client
Регистрация
05.09.2022
Сообщения
220
Реакции
131
Баллы
43
tl.png
Plus-Symbol-Silhouette-PNG-Image-HD.png
41327135-e4bf090c-6eca-11e8-9b76-032e8e2b0707.png


Разберём весь процесс от настройки до поиска запросов и их подмены.


------------------------------------------------------------
Инструменты которые тебе понадобятся:
  1. Эмулятор LDPlayer 9 .
  2. Сниффер Charles . ( * Пробная версия или же full с моего архива )
  3. FRIDA
  4. Сервис поиска apk
------------------------------------------------------------
>> Создание образа и предварительная настройка <<
1200px-Ldplayer-logo_and_wordmark.svg.png

После установки LDPlayer , открываем LDMultiPlayer и создаём новый образ Android 9:

115400

Заходим в настройки включаем Root и ADB ( Открыть локальное соединение ) :

115402

Так - же настраиваем разрешение:

115401


>> Настройка Эмулятора для перехвата запросов <<

Запускай ранее созданный образ Android 9 - свапай верхнюю шторку вниз, жми на иконку
115404
и попадешь в настройки
WI-FI.

Кликай на
tl.png
далее на
115406
и в выпадающем списке выбирай
Manual .


115403
115407
115408

Далее нужно прописать твой Local IP address и Port.
Для этого запускай Charles и переходи на вкладу HELP -> LOCAL IP ADDRESS ( Выбирай нужный сетевой адаптер ! )
* В моём случае это sing-tun Tunnel, так как я использую VPN.

115409
115410

Так-же Local IP address можно узнать через
CMD - используя команду ipconfig:
115411


Port по умолчанию 8888 ( * его можно поменять в настройках PROXY - Proxy Settings )
115412

Прописывай эти данные в настройки WI-FI и сэйвись:

115413

Выходим на финишную прямую и устанавливаем сертификат на устройство:
  • Открывай браузер

    115414
    115415


  • Скорей всего увидишь запрос на соединение, жми Allow иначе Charles не сможет принимать запросы.

    115464


  • В адресуню строку прописывай chls.pro/ssl

    115416


  • После загрузки сертификата - кликаем по нему и устанавливаем

    * ЕСЛИ Сертификат не скачивается, то сохрани его на пк и закинь на устройство
    115465
    115466
    * Имя сертификата любое.
    * Если попросит установить
    PIN на устройстов - устанавливаем.


    115417
    115418


Далее необходимо загрузить frida-server с GitHub или использовать frida-server из моей сборки.

115422


* После завершения загрузки - распакуй содержимое архива в папку где у тебя установлен
1200px-Ldplayer-logo_and_wordmark.svg.png

* Переименуй frida-server-16.1.8-android-x86_64 в frida-server
* Так-же найди там файл adb.exe
115423

Нашёл ?) , тогда в адресной строке пропиши cmd
115424

115425

Жми ENTER для открытия командной строки по этому пути.

-------------------------------------------------------------------------
Команды для загрузки frida-server на эмулятор:
--------------------------------------------------------------------

0: adb push frida-server /data/local/tmp/ // Переместит файл по пути /data/local/tmp/
1: adb shell chmod 777 /data/local/tmp/frida-server // Выдаём права доступа




>> Установка FRIDA & FRIDA-TOOLS <<
* У тебя должен быть установлен Python
-------------------------------------------------------------------------
Команды для установки frida & frida-tools:
--------------------------------------------------------------------
0: pip install frida // Установка FRIDA
1: pip install frida-tools // Установка frida-tools



>> Подготовка к перехвату <<
Разберем способ подмены запросов на примере приложения Wayfair .

* Скачивай версию от 2020 года [ 5.75.2 ] -> перетаскивай .apk файл на запущенный эмулятор.
* Запускай cmd из папки Ldplayer ( * там где у нас adb.exe )

-------------------------------------------------------------------------
Команды для запуска Frida Server:
--------------------------------------------------------------------
0: adb devices // Проверяем подключено ли устройство
1: [I]adb shell[/I] // Запускаем командную оболочку
2: su // Переключаемся на root
3: /data/local/tmp/frida-server & // Запускаем frida server ( * Консоль не закрываем ! )

Теперь открываей обычную cmd и используй команду frida-ps -Uai // Выводит список процессов
Ищи приложение по названию и копируй его идентификатор:
com.wayfair.wayfair
115433



<< Перехват и подмена запросов <<
Поздравляю! Наконец ты добрался до самой интересной части, перехват и подмена запросов.

Запускай Charles и выключай Windows Proxy [ Cntrl + Shift + P ] , что-бы не засорять лог запросами с пк.
Открывай ещё одну cmd из папки Ldplayer и вводи команду frida -U -l ssl_bps.js -f com.wayfair.wayfair // инжектим скрипт обхода ssl pining и запускаем наше приложение по идентификатору.

* ssl_bps.js - можешь скачать ТУТ

После запуска приложения увидишь, что оно требует обновление.

115435

В логе Charles у нас есть список запросов полученный после запуска приложения:

115434

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

* Анализируем лог и видим 2 обращения по адресу https://www.wayfair.com и https://t.wayfair.com

* Давай раскроем список запросов по адресу https://www.wayfair.com


115437

* В первом запросе log_app_libra_action.... отсутствует интересующая нас информация.

115438

* А вот во втором запросе уже есть интересные данные:

115441

Параметры в заголовках, отвечающие за версию приложения:
app_revision": "1806400", "app_short_version": "5.75.2", "system_version": "9"

Ты можешь в режиме реального времени отредактировать запрос и подменить эти значения:

НО! Где нам взять актуальную информацию об app_revision и app_short_version ?

+ Загружай последнюю версию приложения и следуй шагам с самого начала >> Перехват и подмена запросов <<
* не забудь удалить старую версию перед установкой новой.


+ В этом же запросе узнаем актуальные данные:
"app_revision": "2338500", "app_short_version": "5.231",

0: Удаляй приложение и устанавливай старую версию.
1: Запускай приложение через команду frida -U -l ssl_bps.js -f com.wayfair.wayfair

2: Кликай правой кнопкой мыши по нужному запросу и выбирай breakpoints ( * Точка останова - позволяет остановить выполнении программы в определенном месте )
115442

3: Перезапускай приложение и жди когда Charles сделает остановку в нужном месте.
4: Ты можешь изменить нужные параметры и отправить запрос нажав Execute .
115443

- НО!
В данном приложении есть ещё проверка на время загрузки и если ты не успеешь заменить параметры за это время, то будет ошибка в приложении.

115444


Поэтому мы будем использовать массовую подмену параметров.


Для подмены нескольких параметров используй функцию Rewrite -> Tools - > Rewrite ( Cntrl + Alt + R )

0: Жми на Enable Rewrite а затем Add

115446

1: Затем ещё раз на Add , но в появившемся окне!
115447

2: Заполняй данные из нашего запроса: https://www.wayfair.com/v/wayfair_app/startup?_show_summary=true&_format=json

Protocol: https Host: www.wayfair.com Port: 443 Path: /v/wayfair_app/startup ( * до ? знака ) Query: _show_summary=true&_format=json

** Либо просто вставь ссылку в HOST и она автоматически распарсится.

115449

3: Нажимай Add в третий раз ):

115450

Тут самое интересное! Ты можешь подменить, удалить или добавить Заголовки [ Header ] , тело запроса [ Body ]
Так-же можешь подменить URL , статус ответа и т.д.
Функционал действительно топовый.


В нашем случае используем подмену в теле запроса [ body ]:
Подмену можно выполнить как в заголовках так и в ответе ( переключение чекбоксами )

115451

Будем использовать Match для поиска значения и Replace для его замены:
Как помнишь у нас в старой версии значение было:
"app_short_version": "5.75.2"
А в новой: "app_short_version": "5.231"

+ Пиши в Match -> Value: 5.75.2 а в Replace -> Value: 5.231
Обязательно выбери Replace first (
* подменить один раз ) так-как в нашем запросе больше не встреяается такое значение.

115452

+ Повтори тоже самое для app_revision :
115453

+ Очисти лог Charles с помощью метлы )
115455

+ Перезапускай приложение командой: frida -U -l ssl_bps.js -f com.wayfair.wayfair
+ Чекай запрос:
115456

+ Чекай приложение:

115458

Теперь ты можешь пропустить обнову и перехватить запрос авторизации до изменений ( целые 3 года ) .

С Rewrite я думаю ты разобрался , давай теперь попробуем подменить ответ - полностью )




>> Подмена ответа в запросе <<
0: Сохраним ответ в файл ( Правой кнопкой по запросу - Save response )

115459

Смотри у нас в запросе есть информация про обновление и поддержки устройства.
Если
app_upgrade_required": true , то будет просить обновление.
Давай заменим все начения true на false

115460

115461

Теперь правой кнопкой мыши по запросу - Map Local и в Local patch выбирай измененный файл.
115462

Перезапускай приложение и проверяй изменения. ( *перед перезапуском нужно чистить кэш приложения ).

Если было интересно, то попробуй сделать так, что-бы после запуска приложения был такой результат:
115463
 
Номер конкурса статей
  1. Двадцатый конкурс статей
Тема статьи
  1. Нестандартные хаки

Вложения

  • 1702045356203.png
    1702045356203.png
    2 KB · Просмотры: 193
  • 1702045773705.png
    1702045773705.png
    567 байт · Просмотры: 203
  • 1702049168621.png
    1702049168621.png
    12,7 KB · Просмотры: 218
  • 1702059298021.png
    1702059298021.png
    12,9 KB · Просмотры: 220
  • 1702059479396.png
    1702059479396.png
    30,5 KB · Просмотры: 196
  • 1702059530238.png
    1702059530238.png
    33,8 KB · Просмотры: 201
  • 1702063202039.png
    1702063202039.png
    18,1 KB · Просмотры: 188
  • 1702065980673.png
    1702065980673.png
    752 байт · Просмотры: 193
  • Frida Server + Charles.zip
    Frida Server + Charles.zip
    41,7 MB · Просмотры: 724
Последнее редактирование:
Спасибо за статью. не сравнивали фидлер с чарльзом? Через что удобнее работать?
 
Спасибо за статью! Новичкам будет интересно, проголосую
Есть какие-нибудь интересные кейсы связанные с данным способом?
Спасибо за статью. не сравнивали фидлер с чарльзом? Через что удобнее работать?
Лично мне больше чарльз импонирует, но у него есть пара багов, которые до сих пор не пофиксили (один связан с интерфейсом, другом - с непрохождением запросов), но они не критические. А так, сильной разницы между ними не вижу, кому что, как говорится
 
  • Спасибо
Реакции: radv
Спасибо за статью. не сравнивали фидлер с чарльзом? Через что удобнее работать?
В плане юзабилити Fiddler получше. По функционалу Charles на шаг впереди.
Если нужно просто отловить запросы, то Fiddler однозначно )
 
  • Спасибо
Реакции: Roman* и radv
Что по поводу вебсокетов?
В интернете нет ни одного шаблонного способа его словить. Да и не шаблонного тоже.
Учитывая что фриде уже лет 5.
Может есть кто действительно разбирается, а не высосал статью из пальца. За статью спасибо, написана очень читаема, новичкам сойдет. Но подменять запросы, вместо переделки на лету кода .apk приложений с помощью фриды это искаженный смысл сервера.

Пишу здесь так как многое в паблике не объяснено. Может кто-то более упорный и когда-то хорошо разобрался как всё устроено и может подсказать. В данный вопрос про вебсокеты. Могу подсказать в каких приложениях вебсокет снифится, а в каких нет. В 99% вебсокет вы не увидите, видимо в том одном гадком гусе трассировка другая.
 
Что по поводу вебсокетов?
В интернете нет ни одного шаблонного способа его словить. Да и не шаблонного тоже.
Учитывая что фриде уже лет 5.
Может есть кто действительно разбирается, а не высосал статью из пальца. За статью спасибо, написана очень читаема, новичкам сойдет. Но подменять запросы, вместо переделки на лету кода .apk приложений с помощью фриды это искаженный смысл сервера.

Пишу здесь так как многое в паблике не объяснено. Может кто-то более упорный и когда-то хорошо разобрался как всё устроено и может подсказать. В данный вопрос про вебсокеты. Могу подсказать в каких приложениях вебсокет снифится, а в каких нет. В 99% вебсокет вы не увидите, видимо в том одном гадком гусе трассировка другая.
Названия приложений ?
 
wyak - здесь словишь вебсокет
Kumu, Mico, Likee, здесь нет. Начал бы с куму, с отправки привата попробовал бы выловить запрос.
 
Вообще по своему опыту могу сказать, что самый удобный и с максимальным функционалом это Burp. Так же в нём есть плагин Brida, который упрощает работу с Frida. Да и вообще куча других полезных плагинов. Плюс поддерживает работу с WebSocket.
 
Последнее редактирование:
Спасибо за статью! Отличное оформление и подача. Прямо полноценный гайд, понятный и наглядный, по больше бы таких статей в конкурсе)
 
  • Спасибо
Реакции: blackbyte
Вообще по своему опыту могу сказать, что самый удобный и с максимальным функционалом это Burp. Так же в нём есть плагин Brida, который упрощает работу с Frida. Да и вообще куча других полезных плагинов. Плюс поддерживает работу с WebSocket.
Всё описанное мной выше, по поводу того что вебсокет не работает, распространяется и на burp. Он отлично ловит вебсокет условно в виндовсе. Но не ловит их в приложениях. Поэтому вопрос актуальный, на счет настройки фриды. За плагин спасибо.
 
Всё описанное мной выше, по поводу того что вебсокет не работает, распространяется и на burp. Он отлично ловит вебсокет условно в виндовсе. Но не ловит их в приложениях. Поэтому вопрос актуальный, на счет настройки фриды. За плагин спасибо.
А откуда уверенность, что в тех приложениях используется именно WebSocket? Вот например пробовал разобрать приложение Bumble, там скорее всего какой-то другой тип не-HTTP трафика. Возможно тут так же. На досуге гляну эти прилолжения.
 
Я когда пробовал сниффать Charles, у меня почему то краказябры в запросах, так и не понял как их победить
 
Я когда пробовал сниффать Charles, у меня почему то краказябры в запросах, так и не понял как их победить
Необходимо установить сертификат, в данном случае от Charles, чтобы можно было расшифровывать https трафик.
 
Последнее редактирование:
  • Спасибо
Реакции: Kulya
получается, если приложение перешло на новую версию например апи, а старые версии, которые работали по другому, сейчас просят обнову, то этим способом можно обойти эту проверку и посмотреть старую версию апи?
 
получается, если приложение перешло на новую версию например апи, а старые версии, которые работали по другому, сейчас просят обнову, то этим способом можно обойти эту проверку и посмотреть старую версию апи?
Всё верно!
Это самая малая часть, что можно сделать.
 
  • Спасибо
Реакции: Petr_G и Roman*
Отличная статья, то что и искал, пока сложновато, но нужно будет попробовать на своем апк, как раз пытался обойти клауд, которого нет в старой версии, но на старую не войти без обновлеия, вот и решение прилетело. :do:
 
  • Спасибо
Реакции: blackbyte
Только заметил, что упустил важную часть при настройке Charles.

Обязательно заходим в настройки SSL PROXYING и в include нажимаем add - прописываем * в host и port.


116144
116145
 
Спасибо за статью. В архиве Frida Server + Charles - нету Чарлеза.

116233
 
116446

Сертификат поставил, все сделал по гайду, но все равно в запросах такой бред
 
Добрый вечер!Подскажите если нету в папке adb.exe,что делать?
 
-
 
Последнее редактирование:
wyak - здесь словишь вебсокет
Kumu, Mico, Likee, здесь нет. Начал бы с куму, с отправки привата попробовал бы выловить запрос.
Глянул Kumu, в логах всё есть кроме сообщений в чаты. Но тут используется какой-то другой тип трафика, не websocket, т.к. websocket инициируется по HTTP через рукопожатие, т.е. браузер передаёт на сервер http запрос с такими заголовками:
Код:
Развернуть Свернуть Копировать
Connection: Upgrade
Upgrade: websocket
Получает в ответ:
C#:
Развернуть Свернуть Копировать
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
И теперь можем отправлять сообщения по вёбсокету.

В первом приложении wyak эта инициализация есть, а вот в kumu нет
116581
 

Похожие темы

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)