Утки-разбойники

Отладка сторонних приложений для Android

При обратном проектировании приложений Android довольно часто выполняется динамический анализ в сочетании со статическим анализом, чтобы получить информацию о приложении во время выполнения.

Есть много способов получить эту информацию из сторонних приложений.

  • Используйте хуки Frida для вывода аргументов функции
  • Исправьте приложение, чтобы его можно было отлаживать
  • Исправьте приложение, чтобы регистрировать конфиденциальную информацию

Вышеупомянутые методы имеют несколько недостатков, Frida может перехватывать определенную функцию только до или после функции, а перехват приложений относительно сложен и почти всегда вызывает ошибки в приложении.
Также многие упаковщики/вредоносные программы обнаруживают модифицированные APK и аварийно завершают работу, чтобы намеренно усложнить анализ.

Лучшие решения для отладки сторонних приложений для Android

Я большой поклонник Android Studio Debugger (под капотом JDWP), так как вы можете легко устанавливать точки останова, изменять код и даже добавлять к нему логику во время выполнения из вашей любимой IDE.
К сожалению, для этого вы должны перекомпилировать приложения, а это имеет высокую вероятность сбоя.
Поскольку мое устройство имеет root-права и сильно настроено, я решил найти способ сделать все приложения отлаживаемыми.

АОСП Исследования

Для отладки приложения Android Studio взаимодействует с приложением, используя JDWP поверх связи ADB, как показано на диаграмме очень высокого уровня:

Диаграмма AOSP JDWP и отладки сторонних приложений для Android

Если вас интересует более подробное объяснение реализации, то это ваш счастливый день, потому что по какой-то причине кто-то из ребят из AOSP написал довольно приличный domcatuion на 

/система/ядро/АБР/jdwp_service.cpp 

Дальнейшее исследование AOSP выявило

DEBUG_ENABLE_JDWP

Это, если установить его в качестве флага для zygote при инициализации нового приложения, сделает приложение отлаживаемым.
Более интересна функция «применитьDebuggerSystemProperty

AOSP исследует JDWP и как отлаживать сторонние приложения для Android

По-видимому, уже есть поддержка моих потребностей в отладке, и все, что мне нужно сделать, это установить для системного свойства 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, иначе он не работает)!

AOSP JDWP и отладка сторонних приложений для Android — отладка

Если вы хотите отлаживать файлы smali, а не Java — используйте этот плагин:
https://github.com/JesusFreke/smalidea

перейти к содержанию