При обратном проектировании приложений Android довольно часто выполняется динамический анализ в сочетании со статическим анализом, чтобы получить информацию о приложении во время выполнения.
Есть много способов получить эту информацию из сторонних приложений.
- Используйте хуки Frida для вывода аргументов функции
- Исправьте приложение, чтобы его можно было отлаживать
- Исправьте приложение, чтобы регистрировать конфиденциальную информацию
Вышеупомянутые методы имеют несколько недостатков, Frida может перехватывать определенную функцию только до или после функции, а перехват приложений относительно сложен и почти всегда вызывает ошибки в приложении.
Также многие упаковщики/вредоносные программы обнаруживают модифицированные APK и аварийно завершают работу, чтобы намеренно усложнить анализ.
Лучшие решения для отладки сторонних приложений для Android
Я большой поклонник Android Studio Debugger (под капотом JDWP), так как вы можете легко устанавливать точки останова, изменять код и даже добавлять к нему логику во время выполнения из вашей любимой IDE.
К сожалению, для этого вы должны перекомпилировать приложения, а это имеет высокую вероятность сбоя.
Поскольку мое устройство имеет root-права и сильно настроено, я решил найти способ сделать все приложения отлаживаемыми.
АОСП Исследования
Для отладки приложения Android Studio взаимодействует с приложением, используя JDWP поверх связи ADB, как показано на диаграмме очень высокого уровня:
Если вас интересует более подробное объяснение реализации, то это ваш счастливый день, потому что по какой-то причине кто-то из ребят из AOSP написал довольно приличный domcatuion на
/система/ядро/АБР/jdwp_service.cpp
Дальнейшее исследование AOSP выявило
Это, если установить его в качестве флага для zygote при инициализации нового приложения, сделает приложение отлаживаемым.
Более интересна функция «применитьDebuggerSystemProperty
По-видимому, уже есть поддержка моих потребностей в отладке, и все, что мне нужно сделать, это установить для системного свойства ro.debuggable значение 1.
Изменение загрузочного образа
По-видимому, все системные свойства ro.* находятся в загрузочном образе устройства и не могут быть установлены с помощью стандартной команды «adb shell setprop».
Кроме того, только перемонтирование не поможет.
Существуют специальные методы прошивки модифицированных загрузочных образов для конкретных устройств, но большинство из них непросты и требуют относительно большого количества знаний о процессе загрузки Android.
Я решил найти более простой подход, и, к счастью для меня, кто-то уже создал модуль magisk, который делает именно это.
Скрытые настройки
Установите его, и вы сможете изменить свойство из оболочки adb.
Также с Android 10 и выше система от имени root реализовано так, что вы можете просто изменить системные свойства на ro.* с помощью монтирования
монтировать -o rw, перемонтировать /
vi /default.prop
# заменить ro.debuggable=0 на ro.debuggable=1 в /default.prop
перезагружать
Отладка
Теперь все можно отладить — просто используйте «присоединить отладчик» (используйте только Java, иначе он не работает)!
Если вы хотите отлаживать файлы smali, а не Java — используйте этот плагин:
https://github.com/JesusFreke/smalidea
Хотите услышать больше?
Включена бесплатная консультационная встреча.