Приложение CLI, которое автоматически подготавливает APK-файлы Android для проверки HTTPS.
Проверка HTTPS-трафика мобильного приложения с помощью прокси-сервера, вероятно, самый простой способ понять, как он работает. Однако с появлением конфигурации сетевой безопасности в Android 7 и попыток разработчиков приложений предотвратить MITM-атаки с помощью закрепления сертификата заставить приложение работать с HTTPS-прокси стало довольно утомительно.
apk-mitm
автоматизирует весь процесс. Все, что вам нужно сделать, это передать ему APK-файл, и apk-mitm
:
Вы также можете использовать apk-mitm
для исправления приложений с помощью Android App Bundle, при этом рутирование телефона не требуется.
Изменение обычного поведения приложения для обхода функций безопасности, таких как закрепление сертификата, требует либо изменения исходного кода приложения перед его запуском, либо «подключения» приложения во время его работы для перехвата вызовов функций.
apk-mitm
в настоящее время использует прежний подход: сначала «дизассемблирует» приложение с помощью Apktool, вносит изменения в несколько файлов, а затем собирает его обратно (опять же с помощью Apktool).
Преимущество этого подхода заключается в том, что он не требует рутированного устройства, но у него также есть несколько недостатков. Самая большая проблема заключается в том, что приложения на самом деле не предназначены для дизассемблирования. Apktool в любом случае пытается добиться этого, но, особенно с большими и сложными приложениями, он часто сталкивается с проблемами.
Другая проблема с этим подходом заключается в том, что некоторые методы закрепления сертификатов, такие как проверки, выполняемые в собственных двоичных файлах (как в случае с такими платформами, как Flutter), либо очень сложно, либо невозможно обойти. По этой причине может быть полезно попробовать другие подходы для более сложных приложений.
В частности, я хотел бы выделить проект android-unpinner
mitmproxy и лежащие в его основе сценарии frida-interception-and-unpinning
с помощью HTTP Toolkit. Их подход применяет исправления во время выполнения с использованием Frida, которая намного мощнее, но также означает, что ее либо невозможно использовать, либо ее сложнее использовать без рутированного устройства.
Если у вас актуальная версия Node.js (14+) и Java (8+), вы можете установить apk-mitm
, выполнив:
npm install -g apk-mitm
После установки вы можете запустить эту команду, чтобы исправить приложение:
apk-mitm < path-to-apk >
Исправление APK-файла с именем example.apk
может выглядеть следующим образом:
$ apk-mitm example.apk
✔ Decoding APK file
✔ Modifying app manifest
✔ Replacing network security config
✔ Disabling certificate pinning
✔ Encoding patched APK file
✔ Signing patched APK file
Done ! Patched APK: ./example-patched.apk
Теперь вы можете установить файл example-patched.apk
на свое устройство Android и использовать прокси-сервер, например Charles или mitmproxy, для просмотра трафика приложения.
Вы также можете исправлять приложения, используя Android App Bundle, с помощью apk-mitm
, предоставив ему файл *.xapk
(например, из APKPure) или файл *.apks
(который вы можете экспортировать самостоятельно с помощью SAI). Если вы делаете это в Linux, убедитесь, что установлены и zip
, и unzip
.
Иногда вам нужно внести изменения в приложение вручную, чтобы оно заработало. В этих случаях опция --wait
— это то, что вам нужно. Включение этого параметра заставит apk-mitm
ждать перед повторным кодированием приложения, что позволит вам вносить изменения в файлы во временном каталоге.
Если вы хотите поэкспериментировать с различными изменениями в APK, то использование --wait
, вероятно, не самый удобный вариант, поскольку вам придется начинать с нуля каждый раз, когда вы его используете. В этом случае вы можете взглянуть на APKLab. Это среда обратного проектирования Android, созданная на основе VS Code, которая поставляется с поддержкой apk-mitm
и должна позволить вам выполнять итерации гораздо быстрее.
На некоторых устройствах (например, телевизорах Android) вы не сможете добавить новый сертификат к корневым сертификатам системы. В этих случаях вы все равно можете добавить сертификат своего прокси-сервера непосредственно в конфигурацию сетевой безопасности приложения, поскольку он будет работать на любом устройстве. Это можно сделать, запустив apk-mitm
с флагом --certificate
установленным на путь к сертификату (файл .pem
или .der
), используемый вашим прокси.
Если приложение использует Карты Google и карта не работает после исправления, то ключ API приложения, вероятно, ограничен сертификатом разработчика. Вам придется создать свой собственный ключ API без ограничений и запустить apk-mitm
с параметром --wait
, чтобы иметь возможность заменить значение com.google.android.geo.API_KEY
в файле AndroidManifest.xml
приложения.
Если apk-mitm
выходит из строя во время декодирования или кодирования, возможно, проблема связана с Apktool. Проверьте их проблемы на GitHub, чтобы найти возможные обходные пути. Если вам удастся найти версию Apktool, на которую не влияет эта проблема, вы можете поручить apk-mitm
использовать ее, указав путь к ее JAR-файлу с помощью опции --apktool
.
MIT © Никлас Хиги