У той час як зворотне проектування додатків Android відносно поширене виконання динамічного аналізу в поєднанні зі статичним аналізом, щоб отримати інформацію про час виконання програми.
Є багато способів отримати цю інформацію зі сторонніх програм
- Використовуйте хуки Frida для друку аргументів функції
- Виправте програму, щоб її можна було налагоджувати
- Виправлення програми для реєстрації конфіденційної інформації
Наведені вище методи мають кілька недоліків, Frida може підключити лише певну функцію до або після функції, а браконьєрські програми є відносно складними та майже завжди спричиняють помилки в програмі.
Також багато пакувальників/зловмисних програм виявляють модифіковані файли APK і аварійно завершують роботу, щоб навмисно ускладнити аналіз.
Кращі рішення для налагодження сторонніх додатків Android
Я великий шанувальник Android Studio Debugger (JDWP під капотом), оскільки ви можете легко встановити точки зупину, змінити код і навіть додати до нього логіку, все під час виконання, з вашої улюбленої IDE.
На жаль, для цього потрібно перекомпілювати програми, і це має високу ймовірність невдачі.
Оскільки мій пристрій рутований і дуже налаштований, я вирішив знайти спосіб зробити всі програми налагоджуваними.
Дослідження AOSP
Щоб налагодити програму, Android Studio зв’язується з програмою за допомогою зв’язку JDWP через ADB, як показано на діаграмі дуже високого рівня:
Якщо ви зацікавлені в більш детальному поясненні реалізації, то вам пощастило, тому що з якоїсь причини хтось із хлопців з AOSP написав досить пристойну довідку на
/система/ядро/АБР/jdwp_service.cpp
Подальші дослідження AOSP виявили
Це, якщо встановити як позначку для zygote під час ініціалізації нової програми, зробить програму доступною для налагодження.
Більш цікавою є функція "applyDebuggerSystemProperty"
Мабуть, уже є підтримка для моїх потреб у налагодженні, і все, що мені потрібно зробити, це встановити системну властивість 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, інакше не вийде)!
Якщо ви хочете налагоджувати файли smali, а не Java, використовуйте цей плагін:
https://github.com/JesusFreke/smalidea
Хочете почути більше?
Включено безкоштовну консультаційну зустріч.