
Автоматизированный обход SSL-пиннинга для любой версии Flutter и Shorebird — статический анализ PyGhidra автоматически обнаруживает BoringSSL и генерирует готовые к запуску скрипты Frida и Renef
Reverse-инжинирит libflutter.so с помощью PyGhidra для поиска функции проверки SSL-сертификата, после чего генерирует готовые к использованию скрипты обхода для Frida и Renef.
libflutter.so без графического интерфейса и сканирует все определённые строки на предмет ssl_clientssl_crypto_x509_session_verify_cert_chainflutter_ssl_pinning.js), который патчит возвращаемое значение на ptr(1) (SSL_VERIFY_OK) во время выполненияflutter_ssl_pinning.luaMemory.patchMOV X0, #1 ; RETУстановите переменную окружения
GHIDRA_INSTALL_DIRили передайте флаг--ghidra-install-dir.
# Анализ libflutter.so и генерация обоих скриптов
python3 flutter_ssl_pinning.py libflutter.so
# Запуск через Frida
frida -U -f com.example.app -l flutter_ssl_pinning.js
# Запуск через Renef
renef -s com.example.app -l flutter_ssl_pinning.lua
| Аргумент | По умолчанию | Описание |
|---|---|---|
binary | (обязательный) | Путь к libflutter.so |
output | flutter_ssl_pinning | Базовое имя выходного файла (создаёт <name>.js и <name>.lua) |
--module | libflutter.so | Имя модуля в целевом процессе |
--ghidra-install-dir | auto | Каталог установки Ghidra |
| Файл | Инструмент | Механизм |
|---|---|---|
flutter_ssl_pinning.js | Frida | Interceptor.attach + retval.replace(ptr(1)) |
flutter_ssl_pinning.lua | Renef | Memory.patch (MOV X0, #1 ; RET) |
Смотрите каталог example/ для примеров сгенерированного вывода.
| Цель | Статус |
|---|---|
Google Flutter libflutter.so (arm64-v8a) | ✅ Работает |
| Shorebird-модифицированные сборки Flutter | ✅ Работает |
| Ghidra 12.x + pyghidra | ✅ Работает |
| Frida 17.x и 16.x | ✅ Работает |
| Renef (последняя версия) | ✅ Работает |
Как Google Flutter, так и Shorebird используют один и тот же движок SSL в
libflutter.so. Автообнаруженный RVA идентичен для разных типов сборок одной версии движка Flutter.
Помимо обхода пининга для MITM через прокси, вы можете перехватывать расшифрованный HTTP-трафик напрямую в Frida с помощью самодостаточного скрипта flutter_http_monitor.py. Он автоматически находит BoringSSL SSL_write/SSL_read в libflutter.so (любая версия Flutter, arm64) и генерирует скрипт Frida, выводящий открытые запросы и ответы — восстановленные, без chunked-кодирования, распакованные и в красивом JSON.
pip install capstone pyelftools
# сканирование бинарного файла и генерация монитора (или передайте .apk)
python3 flutter_http_monitor.py path/to/libflutter.so -o monitor.js
# запуск против приложения
frida -U -f com.target.app -l monitor.js
Опционально, в живом режиме Frida REPL: addScope('api.example.com') для наблюдения только за определёнными хостами (scope в стиле Burp). Один файл — ничего лишнего.
Этот инструмент предназначен только для авторизованных исследований в области безопасности и пентестов.
Не используйте его против приложений, которыми вы не владеете или на тестирование которых у вас нет явного письменного разрешения.