Exploiting a debuggeable application
Використання додатку, що підлягає налагодженню
Обхід перевірок root та налагодження
Цей розділ посту є підсумком з посту https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
Кроки для того, щоб зробити Android додаток налагоджуваним та обійти перевірки
Зробити додаток налагоджуваним
Контент на основі https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
Декомпілювати APK:
Використовуйте інструмент APK-GUI для декомпіляції APK.
У файлі android-manifest вставте
android:debuggable=true
, щоб увімкнути режим налагодження.Знову скомпілюйте, підпишіть та zipalign модифікований додаток.
Встановити модифікований додаток:
Використовуйте команду:
adb install <application_name>
.
Отримати назву пакету:
Виконайте
adb shell pm list packages –3
, щоб перерахувати сторонні додатки та знайти назву пакету.
Налаштувати додаток на очікування підключення налагоджувача:
Команда:
adb shell am setup-debug-app –w <package_name>
.Примітка: Цю команду потрібно виконувати щоразу перед запуском додатка, щоб він чекав на налагоджувач.
Для збереження використовуйте
adb shell am setup-debug-app –w -–persistent <package_name>
.Щоб видалити всі прапорці, використовуйте
adb shell am clear-debug-app <package_name>
.
Підготуватися до налагодження в Android Studio:
Перейдіть в Android Studio до File -> Open Profile or APK.
Відкрийте скомпільований APK.
Встановити точки зупинки в ключових Java файлах:
Встановіть точки зупинки в
MainActivity.java
(зокрема в методіonCreate
),b.java
таContextWrapper.java
.
Обхід перевірок
Додаток у певні моменти перевіряє, чи він підлягає налагодженню, а також перевіряє наявність бінарних файлів, що вказують на рутований пристрій. Налагоджувач може бути використаний для зміни інформації про додаток, скидання біта налагодження та зміни назв шуканих бінарних файлів, щоб обійти ці перевірки.
Для перевірки налагодження:
Змінити налаштування прапорців:
У секції змінних консолі налагоджувача перейдіть до:
this mLoadedAPK -> mApplicationInfo -> flags = 814267974
.Примітка: Бінарне представлення
flags = 814267974
є11000011100111011110
, що вказує на те, що "Flag_debuggable" активний.
Ці кроки в сукупності забезпечують можливість налагодження додатка та обхід певних перевірок безпеки за допомогою налагоджувача, що полегшує більш глибокий аналіз або модифікацію поведінки додатка.
Крок 2 передбачає зміну значення прапорця на 814267972, яке в бінарному вигляді представлено як 110000101101000000100010100.
Використання вразливості
Демонстрація була надана за допомогою вразливого додатку, що містить кнопку та текстове поле. Спочатку додаток відображає "Crack Me". Мета полягає в тому, щоб змінити повідомлення з "Try Again" на "Hacked" під час виконання, не змінюючи вихідний код.
Перевірка на вразливість
Додаток був декомпільований за допомогою
apktool
, щоб отримати доступ до файлуAndroidManifest.xml
.Наявність
android_debuggable="true"
у AndroidManifest.xml вказує на те, що додаток підлягає налагодженню та може бути експлуатований.Варто зазначити, що
apktool
використовується лише для перевірки статусу налагодження без зміни коду.
Підготовка налаштування
Процес передбачав ініціювання емулятора, встановлення вразливого додатку та використання
adb jdwp
для виявлення портів Dalvik VM, які слухають.JDWP (Java Debug Wire Protocol) дозволяє налагоджувати додаток, що працює в VM, відкриваючи унікальний порт.
Портове перенаправлення було необхідним для віддаленого налагодження, після чого JDB було прикріплено до цільового додатку.
Впровадження коду під час виконання
Експлуатація проводилася шляхом встановлення точок зупинки та контролю за потоком виконання додатку.
Команди, такі як
classes
таmethods <class_name>
, використовувалися для виявлення структури додатку.Точка зупинки була встановлена в методі
onClick
, і її виконання контролювалося.Команди
locals
,next
таset
використовувалися для перевірки та зміни локальних змінних, зокрема зміни повідомлення "Try Again" на "Hacked".Модифікований код виконувався за допомогою команди
run
, успішно змінюючи вихід додатку в реальному часі.
Цей приклад продемонстрував, як можна маніпулювати поведінкою налагоджуваного додатку, підкреслюючи потенціал для більш складних експлуатацій, таких як отримання доступу до оболонки на пристрої в контексті додатку.
Посилання
Last updated