Objection Посібник
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Вступ
objection - Дослідження мобільних додатків у режимі виконання
Objection — це набір інструментів для дослідження мобільних додатків у режимі виконання, побудований на базі Frida. Він створений з метою допомогти оцінювати мобільні додатки та їхній рівень безпеки без потреби в jailbroken або rooted мобільному пристрої.
Примітка: Це не якась форма jailbreak / root bypass. Використовуючи objection, ви все ще обмежені всіма обмеженнями, накладеними відповідним sandbox, з яким ви маєте справу.
Резюме
Мета objection — дозволити користувачеві викликати основні дії, які пропонує Frida. Інакше, користувачеві доведеться створювати окремий скрипт для кожного застосунку, який він хоче тестувати.
Посібник
Для цього посібника я використаю APK, який ви можете завантажити тут:
Або з його оригінального репозиторію (завантажте app-release.apk)
Встановлення
pip3 install objection
Підключення
Зробіть звичайне ADB-з’єднання та запустіть сервер frida на пристрої (і перевірте, що frida працює як на клієнті, так і на сервері).
Якщо ви використовуєте rooted device, потрібно вибрати додаток, який ви хочете тестувати, через опцію –gadget. У цьому випадку:
frida-ps -Uai
objection --gadget asvid.github.io.fridaapp explore
Основні дії
Не всі можливі команди objections будуть перераховані в цьому підручнику, лише ті, які я вважав найкориснішими.
Середовище
У середовищі можна знайти цікаву інформацію (наприклад, паролі або шляхи).
env
.png)
Інформація про Frida
frida
.png)
Завантаження/Скачування
file download <remote path> [<local path>]
file upload <local path> [<remote path>]
Імпорт скрипта frida
import <local path frida-script>
SSLPinning
android sslpinning disable #Attempts to disable SSL Pinning on Android devices.
Виявлення root
android root disable #Attempts to disable root detection on Android devices.
android root simulate #Attempts to simulate a rooted Android environment.
Команда Exec
android shell_exec whoami
Скриншоти
android ui screenshot /tmp/screenshot
android ui FLAG_SECURE false #This may enable you to take screenshots using the hardware keys
Static analysis зроблено динамічним
У реальному застосунку ми повинні знати всю інформацію, виявлену в цій частині, перед використанням objection завдяки static analysis. У будь‑якому разі таким чином ви можете побачити щось нове, оскільки тут ви матимете лише повний список класів, методів та експортованих об’єктів.
Це також корисно, якщо з якоїсь причини ви не можете отримати читабельний вихідний код додатка.
Перелік активностей, ресіверів і сервісів
android hooking list activities
.png)
android hooking list services
android hooking list receivers
Frida згенерує помилку, якщо нічого не знайдено
Отримання поточної Activity
android hooking get current_activity
.png)
Пошук класів
Почнемо шукати класи всередині нашого додатка
android hooking search classes asvid.github.io.fridaapp
.png)
Пошук методів класу
Тепер витягнемо методи всередині класу MainActivity:
android hooking search methods asvid.github.io.fridaapp MainActivity
.png)
Перелік оголошених методів класу з їхніми параметрами
Давайте з’ясуємо, які параметри потрібні методам цього класу:
android hooking list class_methods asvid.github.io.fridaapp.MainActivity
.png)
Перелік класів
Ви також можете перелічити всі класи, які були завантажені в поточний додаток:
android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.
Це дуже корисно, якщо ви хочете hook the method of a class and you only know the name of the class. Ви можете використати цю функцію, щоб search which module owns the class і потім hook його method.
Hooking дуже просто
Hooking (watching) a method
Зі source code додатку ми знаємо, що function sum() from MainActivity виконується every second. Давайте спробуємо dump all possible information щоразу, коли функція викликається (arguments, return value and backtrace):
android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return
.png)
Hooking (спостерігання) цілого класу
Насправді мені здаються всі методи класу MainActivity дуже цікавими, давайте hook them all. Будьте обережні, це може спричинити збій додатка.
android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return
Якщо ви взаємодієте з додатком, поки клас підключено (hooked), ви побачите, коли викликається кожна функція, її аргументи та значення повернення.
.png)
Зміна булевого значення, що повертається функцією
Зі коду видно, що функція checkPin отримує String як аргумент і повертає boolean. Давайте зробимо так, щоб функція завжди повертала true:
.png)
Тепер, якщо ви введете будь-що в полі для PIN-коду, ви побачите, що будь-що є дійсним:
.png)
Екземпляри класів
Шукайте та виводьте live instances of a specific Java class, вказані повним кваліфікованим ім’ям класу. Out — це результат спроби отримати рядкове значення для виявленого objection, яке зазвичай міститиме значення властивостей об’єкта.
android heap print_instances <class>
.png)
Keystore/Intents
Ви можете взаємодіяти з keystore та intents за допомогою:
android keystore list
android intents launch_activity
android intent launch_service
Пам’ять
Dump
memory dump all <local destination> #Dump all memory
memory dump from_base <base_address> <size_to_dump> <local_destination> #Dump a part
Список
memory list modules
.png)
Внизу списку ви можете побачити frida:
.png)
Давайте перевіримо, що експортує frida:
.png)
Search/Write
Ви також можете шукати та записувати в пам’ять за допомогою objection:
memory search "<pattern eg: 41 41 41 ?? 41>" (--string) (--offsets-only)
memory write "<address>" "<pattern eg: 41 41 41 41>" (--string)
SQLite
Ви також можете використовувати команду sqlite для взаємодії з sqlite databases.
Вихід
exit
Чого мені бракує в Objection
- Методи hooking іноді призводять до аварійного завершення додатка (це також через Frida).
- Ви не можете використовувати екземпляри класів, щоб викликати функції екземпляра. І ви не можете створювати нові екземпляри класів і використовувати їх для виклику функцій.
- Немає шорткату (як-от для sslpinnin), який дозволив би hook-нути всі поширені crypto методи, що використовуються додатком, щоб бачити cyphered text, plain text, keys, IVs та використовувані алгоритми.
Посилання
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
HackTricks

