Objection Tutorial

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Bug bounty tip: зареєструйтесь на Intigriti, преміум платформі для bug bounty, створеній хакерами для хакерів! Приєднуйтесь до нас на https://go.intigriti.com/hacktricks сьогодні та почніть заробляти винагороди до $100,000!

Introduction

objection - Runtime Mobile Exploration

Objection - це набір інструментів для дослідження мобільних додатків в режимі виконання, заснований на Frida. Він був створений з метою допомогти оцінити мобільні додатки та їхню безпеку без необхідності використання зламаного або рутованого мобільного пристрою.

Примітка: Це не є формою обходу jailbreak / root. Використовуючи objection, ви все ще обмежені всіма обмеженнями, накладеними відповідним пісочницею, з якою ви стикаєтеся.

Resume

Мета objection - дозволити користувачу викликати основні дії, які пропонує Frida. В іншому випадку, користувачеві потрібно буде створити один скрипт для кожного додатку, який він хоче протестувати.

Tutorial

Для цього уроку я буду використовувати APK, який ви можете завантажити тут:

2MB
app-release.zip
archive

Або з його оригінального репозиторію (завантажити app-release.apk)

Installation

pip3 install objection

Connection

Зробіть звичайне з'єднання ADB і запустіть сервер frida на пристрої (і перевірте, що frida працює як на клієнті, так і на сервері).

Якщо ви використовуєте рутований пристрій, потрібно вибрати додаток, який ви хочете протестувати, у параметрі --gadget. у цьому випадку:

frida-ps -Uai
objection --gadget asvid.github.io.fridaapp explore

Основні дії

Не всі можливі команди objections будуть перераховані в цьому посібнику, лише ті, які я вважаю більш корисними.

Середовище

Деяка цікава інформація (наприклад, паролі або шляхи) може бути знайдена всередині середовища.

env

Інформація про Frida

frida

Завантаження/Вивантаження

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.

Виконати команду

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

Статичний аналіз став динамічним

У реальному додатку ми повинні знати всю інформацію, виявлену в цій частині, перш ніж використовувати objection завдяки статичному аналізу. У будь-якому випадку, таким чином ви, можливо, зможете побачити щось нове, оскільки тут ви отримаєте лише повний список класів, методів та експортованих об'єктів.

Це також корисно, якщо якимось чином ви не можете отримати читабельний вихідний код додатку.

Список активностей, приймачів та сервісів

android hooking list activities
android hooking list services
android hooking list receivers

Frida видасть помилку, якщо нічого не знайдено

Отримання поточної активності

android hooking get current_activity

Пошук класів

Давайте почнемо шукати класи всередині нашого додатку.

android hooking search classes asvid.github.io.fridaapp

Методи пошуку класу

Тепер давайте витягнемо методи всередині класу MainActivity:

android hooking search methods asvid.github.io.fridaapp MainActivity

Список оголошених методів класу з їхніми параметрами

Давайте з'ясуємо, які параметри потрібні методам класу:

android hooking list class_methods asvid.github.io.fridaapp.MainActivity

Список класів

Ви також можете перерахувати всі класи, які були завантажені в поточному додатку:

android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.

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

Перехоплення є простим

Перехоплення (спостереження) методу

З джерельного коду програми ми знаємо, що функція sum() з MainActivity виконується кожну секунду. Спробуємо вивантажити всю можливу інформацію щоразу, коли викликається функція (аргументи, значення повернення та стек викликів):

android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return

Хукання (спостереження) за цілим класом

Насправді, всі методи класу MainActivity мені дуже цікаві, давайте захукаємо їх усі. Будьте обережні, це може викликати збій програми.

android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return

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

Зміна булевого значення повернення функції

З вихідного коду ви можете побачити, що функція checkPin отримує String як аргумент і повертає boolean. Давайте зробимо так, щоб функція завжди повертала true:

Тепер, якщо ви напишете щось у текстовому полі для PIN-коду, ви побачите, що все є дійсним:

Екземпляри класу

Шукайте та друкуйте живі екземпляри конкретного Java класу, вказаного повністю кваліфікованим ім'ям класу. Вихід - це результат спроби отримати значення рядка для виявленого objection, яке зазвичай містить значення властивостей для об'єкта.

android heap print_instances <class>

Keystore/Intents

Ви можете грати з keystore та intents, використовуючи:

android keystore list
android intents launch_activity
android intent launch_service

Пам'ять

Вивантаження

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

Внизу списку ви можете побачити frida:

Давайте перевіримо, що експортує frida:

Пошук/Запис

Ви також можете шукати та записувати в пам'яті за допомогою 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.

Exit

exit

Що мені не вистачає в Objection

  • Методи хуків іноді викликають аварійне завершення програми (це також пов'язано з Frida).

  • Ви не можете використовувати екземпляри класів для виклику функцій екземпляра. І ви не можете створювати нові екземпляри класів і використовувати їх для виклику функцій.

  • Немає ярлика (як для sslpinnin), щоб підключити всі загальні криптографічні методи, які використовуються програмою, щоб побачити зашифрований текст, відкритий текст, ключі, IV та алгоритми, що використовуються.

Порада для баг-баунті: зареєструйтесь на Intigriti, преміум платформі для баг-баунті, створеній хакерами для хакерів! Приєднуйтесь до нас на https://go.intigriti.com/hacktricks сьогодні та почніть заробляти винагороди до $100,000!

Вчіться та практикуйте Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Вчіться та практикуйте Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks

Last updated