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

blackbyte

Client
Регистрация
05.09.2022
Сообщения
186
Благодарностей
104
Баллы
43


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


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

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

115400

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

115402

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

115401


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

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

Кликай на
далее на
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


* После завершения загрузки - распакуй содержимое архива в папку где у тебя установлен

* Переименуй 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
 
Тема статьи
Нестандартные хаки

Вложения

Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

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

Последнее редактирование:

heks

Client
Регистрация
01.10.2013
Сообщения
1 079
Благодарностей
259
Баллы
83
+ голос
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 681
Благодарностей
1 864
Баллы
113
Спасибо за статью. не сравнивали фидлер с чарльзом? Через что удобнее работать?
 

southside

Client
Регистрация
20.04.2019
Сообщения
200
Благодарностей
251
Баллы
63
Спасибо за статью! Новичкам будет интересно, проголосую
Есть какие-нибудь интересные кейсы связанные с данным способом?
Спасибо за статью. не сравнивали фидлер с чарльзом? Через что удобнее работать?
Лично мне больше чарльз импонирует, но у него есть пара багов, которые до сих пор не пофиксили (один связан с интерфейсом, другом - с непрохождением запросов), но они не критические. А так, сильной разницы между ними не вижу, кому что, как говорится
 
  • Спасибо
Реакции: radv

blackbyte

Client
Регистрация
05.09.2022
Сообщения
186
Благодарностей
104
Баллы
43
Спасибо за статью. не сравнивали фидлер с чарльзом? Через что удобнее работать?
В плане юзабилити Fiddler получше. По функционалу Charles на шаг впереди.
Если нужно просто отловить запросы, то Fiddler однозначно )
 
  • Спасибо
Реакции: Roman* и radv

Chaz

Новичок
Регистрация
14.12.2023
Сообщения
3
Благодарностей
0
Баллы
1
Что по поводу вебсокетов?
В интернете нет ни одного шаблонного способа его словить. Да и не шаблонного тоже.
Учитывая что фриде уже лет 5.
Может есть кто действительно разбирается, а не высосал статью из пальца. За статью спасибо, написана очень читаема, новичкам сойдет. Но подменять запросы, вместо переделки на лету кода .apk приложений с помощью фриды это искаженный смысл сервера.

Пишу здесь так как многое в паблике не объяснено. Может кто-то более упорный и когда-то хорошо разобрался как всё устроено и может подсказать. В данный вопрос про вебсокеты. Могу подсказать в каких приложениях вебсокет снифится, а в каких нет. В 99% вебсокет вы не увидите, видимо в том одном гадком гусе трассировка другая.
 

blackbyte

Client
Регистрация
05.09.2022
Сообщения
186
Благодарностей
104
Баллы
43
Что по поводу вебсокетов?
В интернете нет ни одного шаблонного способа его словить. Да и не шаблонного тоже.
Учитывая что фриде уже лет 5.
Может есть кто действительно разбирается, а не высосал статью из пальца. За статью спасибо, написана очень читаема, новичкам сойдет. Но подменять запросы, вместо переделки на лету кода .apk приложений с помощью фриды это искаженный смысл сервера.

Пишу здесь так как многое в паблике не объяснено. Может кто-то более упорный и когда-то хорошо разобрался как всё устроено и может подсказать. В данный вопрос про вебсокеты. Могу подсказать в каких приложениях вебсокет снифится, а в каких нет. В 99% вебсокет вы не увидите, видимо в том одном гадком гусе трассировка другая.
Названия приложений ?
 

Chaz

Новичок
Регистрация
14.12.2023
Сообщения
3
Благодарностей
0
Баллы
1
wyak - здесь словишь вебсокет
Kumu, Mico, Likee, здесь нет. Начал бы с куму, с отправки привата попробовал бы выловить запрос.
 

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 184
Благодарностей
823
Баллы
113
Вообще по своему опыту могу сказать, что самый удобный и с максимальным функционалом это Burp. Так же в нём есть плагин Brida, который упрощает работу с Frida. Да и вообще куча других полезных плагинов. Плюс поддерживает работу с WebSocket.
 
Последнее редактирование:

Truelife

Client
Регистрация
25.09.2017
Сообщения
19
Благодарностей
16
Баллы
3
Спасибо за статью! Отличное оформление и подача. Прямо полноценный гайд, понятный и наглядный, по больше бы таких статей в конкурсе)
 
  • Спасибо
Реакции: blackbyte

Chaz

Новичок
Регистрация
14.12.2023
Сообщения
3
Благодарностей
0
Баллы
1
Вообще по своему опыту могу сказать, что самый удобный и с максимальным функционалом это Burp. Так же в нём есть плагин Brida, который упрощает работу с Frida. Да и вообще куча других полезных плагинов. Плюс поддерживает работу с WebSocket.
Всё описанное мной выше, по поводу того что вебсокет не работает, распространяется и на burp. Он отлично ловит вебсокет условно в виндовсе. Но не ловит их в приложениях. Поэтому вопрос актуальный, на счет настройки фриды. За плагин спасибо.
 

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 184
Благодарностей
823
Баллы
113
Всё описанное мной выше, по поводу того что вебсокет не работает, распространяется и на burp. Он отлично ловит вебсокет условно в виндовсе. Но не ловит их в приложениях. Поэтому вопрос актуальный, на счет настройки фриды. За плагин спасибо.
А откуда уверенность, что в тех приложениях используется именно WebSocket? Вот например пробовал разобрать приложение Bumble, там скорее всего какой-то другой тип не-HTTP трафика. Возможно тут так же. На досуге гляну эти прилолжения.
 

Kulya

Client
Регистрация
11.09.2016
Сообщения
177
Благодарностей
48
Баллы
28
Я когда пробовал сниффать Charles, у меня почему то краказябры в запросах, так и не понял как их победить
 

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 184
Благодарностей
823
Баллы
113
Я когда пробовал сниффать Charles, у меня почему то краказябры в запросах, так и не понял как их победить
Необходимо установить сертификат, в данном случае от Charles, чтобы можно было расшифровывать https трафик.
 
Последнее редактирование:
  • Спасибо
Реакции: Kulya

cooki

Client
Регистрация
05.10.2014
Сообщения
151
Благодарностей
30
Баллы
28
получается, если приложение перешло на новую версию например апи, а старые версии, которые работали по другому, сейчас просят обнову, то этим способом можно обойти эту проверку и посмотреть старую версию апи?
 

blackbyte

Client
Регистрация
05.09.2022
Сообщения
186
Благодарностей
104
Баллы
43
получается, если приложение перешло на новую версию например апи, а старые версии, которые работали по другому, сейчас просят обнову, то этим способом можно обойти эту проверку и посмотреть старую версию апи?
Всё верно!
Это самая малая часть, что можно сделать.
 
  • Спасибо
Реакции: Roman*

Roman*

Client
Регистрация
25.09.2013
Сообщения
1 651
Благодарностей
655
Баллы
113
Отличная статья, то что и искал, пока сложновато, но нужно будет попробовать на своем апк, как раз пытался обойти клауд, которого нет в старой версии, но на старую не войти без обновлеия, вот и решение прилетело. :do:
 
  • Спасибо
Реакции: blackbyte

blackbyte

Client
Регистрация
05.09.2022
Сообщения
186
Благодарностей
104
Баллы
43
Только заметил, что упустил важную часть при настройке Charles.

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


116144
116145
 

deiter_boost3

Новичок
Регистрация
17.12.2023
Сообщения
13
Благодарностей
8
Баллы
3
Спасибо за статью. В архиве Frida Server + Charles - нету Чарлеза.

116233
 

southside

Client
Регистрация
20.04.2019
Сообщения
200
Благодарностей
251
Баллы
63
  • Спасибо
Реакции: Boo и deiter_boost3

Kulya

Client
Регистрация
11.09.2016
Сообщения
177
Благодарностей
48
Баллы
28
116446

Сертификат поставил, все сделал по гайду, но все равно в запросах такой бред
 

southside

Client
Регистрация
20.04.2019
Сообщения
200
Благодарностей
251
Баллы
63

cr3c

Client
Регистрация
02.07.2018
Сообщения
46
Благодарностей
6
Баллы
8
Добрый вечер!Подскажите если нету в папке adb.exe,что делать?
 

southside

Client
Регистрация
20.04.2019
Сообщения
200
Благодарностей
251
Баллы
63
-
 
Последнее редактирование:

blackbyte

Client
Регистрация
05.09.2022
Сообщения
186
Благодарностей
104
Баллы
43

Kulya

Client
Регистрация
11.09.2016
Сообщения
177
Благодарностей
48
Баллы
28

southside

Client
Регистрация
20.04.2019
Сообщения
200
Благодарностей
251
Баллы
63
  • Спасибо
Реакции: Kulya

Kulya

Client
Регистрация
11.09.2016
Сообщения
177
Благодарностей
48
Баллы
28

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 184
Благодарностей
823
Баллы
113
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
 

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