Качки-розбійники

Налагодження сторонніх програм Android

У той час як зворотне проектування додатків Android відносно поширене виконання динамічного аналізу в поєднанні зі статичним аналізом, щоб отримати інформацію про час виконання програми.

Є багато способів отримати цю інформацію зі сторонніх програм

  • Використовуйте хуки Frida для друку аргументів функції
  • Виправте програму, щоб її можна було налагоджувати
  • Виправлення програми для реєстрації конфіденційної інформації

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

Кращі рішення для налагодження сторонніх додатків Android

Я великий шанувальник Android Studio Debugger (JDWP під капотом), оскільки ви можете легко встановити точки зупину, змінити код і навіть додати до нього логіку, все під час виконання, з вашої улюбленої IDE.
На жаль, для цього потрібно перекомпілювати програми, і це має високу ймовірність невдачі.
Оскільки мій пристрій рутований і дуже налаштований, я вирішив знайти спосіб зробити всі програми налагоджуваними.

Дослідження AOSP

Щоб налагодити програму, Android Studio зв’язується з програмою за допомогою зв’язку JDWP через ADB, як показано на діаграмі дуже високого рівня:

Діаграма AOSP JDWP & How to Debug 3rd Party Android Apps

Якщо ви зацікавлені в більш детальному поясненні реалізації, то вам пощастило, тому що з якоїсь причини хтось із хлопців з AOSP написав досить пристойну довідку на 

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

Подальші дослідження AOSP виявили

DEBUG_ENABLE_JDWP

Це, якщо встановити як позначку для zygote під час ініціалізації нової програми, зробить програму доступною для налагодження.
Більш цікавою є функція "applyDebuggerSystemProperty"

AOSP досліджує JDWP і як налагодити сторонні програми Android

Мабуть, уже є підтримка для моїх потреб у налагодженні, і все, що мені потрібно зробити, це встановити системну властивість ro.debuggable на 1.

Змінення завантажувального образу

Очевидно, що всі системні властивості ro.* знаходяться під образом завантаження пристрою, і їх не можна встановити за допомогою стандартної команди «adb shell setprop».
Крім того, лише перемонтування не допоможе.
Існують спеціальні методи флешування модифікованих завантажувальних образів для пристроїв, але більшість із них непрості й вимагають відносно великих знань про процес завантаження Android.
Я вирішив знайти простіший підхід, і, на моє щастя, хтось уже створив модуль magisk, який робить саме це

Приховані налаштування

Встановіть його, і ви зможете змінити властивість з оболонки adb.

Також з Android 10 і вище система-як-корінь реалізовано, щоб ви могли просто змінити властивості системи на 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

Перейти до вмісту