[Поиск решения] Автоматический перехват HTTP(S) запросов из ZennoDroid (ADB) без использования Burp/Fiddler

Anastation

Client
Регистрация
22.04.2021
Сообщения
12
Реакции
1
Баллы
3
Приветствую! Столкнулся с задачей: нужно вытащить POST/GET запросы после выполненных действий в мобильном приложении ZennoDroid в файл, чтобы прочесть ответы запросов.
Есть кто умеет подобное настроить без сторонних программ (Burp/Fiddler)? Это я и сам умею, но нужно именно автоматизировать действие, так как у меня бэкапы приложений с разными аккаунтами.

Планирую использовать так: подгружаю бэкап, открываю через ADB нужный экран приложения, сохраняю запросы в файл, извлекаю нужную инфу.

Есть идеи, как это реализовать?
 
Использовать Frida для этой задачи.
ИИ хорошо справляются с написанием скриптов.
Я делал примерно так для получения токена аккаунта:
C#:
Развернуть Свернуть Копировать
var device = instance.DroidInstance.FridaDevice;
device.InstallAndRunServer();

var fridaLog = project.Lists["fridaLog"];

string source = @"
Java.perform(function () {
    var OkHttpClient = Java.use('okhttp3.OkHttpClient');
    var RequestBuilder = Java.use('okhttp3.Request$Builder');

    RequestBuilder.build.overload().implementation = function () {
        var request = this.build();
        var headers = request.headers();
        var url = request.url();
        var urlString = url.toString();

        if (urlString.includes('wb.ru') || urlString.includes('wildberries.ru')) {
            for (var i = 0; i < headers.size(); i++) {
                var name = headers.name(i);
                var value = headers.value(i);

                if (name.toLowerCase() === 'authorization') {
                    var token = value.replace('Bearer ', '');
                    send('Bearer ' + token);
                    return request;
                }
            }
        }

        return request;
    };
})";

// Запускаем приложение
var pid = device.Spawn("com.wildberries.ru");

// Сохраняем PID в переменную
project.Variables["fridaPID"].Value = pid.ToString();
project.SendInfoToLog("Запускаем Frida Script. PID - " + project.Variables["fridaPID"].Value, true);

// Подождите некоторое время, чтобы убедиться, что процесс запущен
System.Threading.Thread.Sleep(2000); // Подождите 2 секунды (при необходимости увеличьте время)

try {
    // Подключаемся к процессу с полученным PID
    var session = device.Attach(pid);
    var script = session.CreateScript(source, "myScript");
    script.Message += (o, e) => {
        project.SendInfoToLog(e.Message);
        fridaLog.Add(e.Message);

        if (e.Message.StartsWith("Bearer ")) {
            project.Variables["AuthorizationBrearer"].Value = e.Message;
        }
    };

    script.Load();
    device.Resume(pid);
    project.SendInfoToLog("УСПЕШНО ЗАПУСТИЛИ Frida Script! PID - " + project.Variables["fridaPID"].Value, true);

} catch (Exception ex) {
    project.SendInfoToLog("Frida Ошибка при подключении: " + ex.Message, true);
}

Потом читаем из списка fridaLog, после чего стопаем фриду "adb shell su -c kill {-Variable.fridaPID-}".
 

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