Реверсування нативних бібліотек
Reading time: 3 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Для отримання додаткової інформації перегляньте: https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html
Android додатки можуть використовувати нативні бібліотеки, зазвичай написані на C або C++, для завдань, критичних до продуктивності. Творці шкідливого ПЗ також використовують ці бібліотеки, оскільки їх важче реверсувати, ніж DEX байт-код. У розділі підкреслюються навички реверс-інжинірингу, адаптовані до Android, а не навчання мовам асемблера. Для сумісності надаються версії бібліотек для ARM та x86.
Ключові моменти:
- Нативні бібліотеки в Android додатках:
- Використовуються для завдань, що вимагають високої продуктивності.
- Написані на C або C++, що ускладнює реверс-інжиніринг.
- Знаходяться у форматі
.so
(спільний об'єкт), подібно до бінарних файлів Linux. - Творці шкідливого ПЗ віддають перевагу нативному коду, щоб ускладнити аналіз.
- Java Native Interface (JNI) та Android NDK:
- JNI дозволяє реалізовувати методи Java в нативному коді.
- NDK - це набір інструментів, специфічних для Android, для написання нативного коду.
- JNI та NDK з'єднують код Java (або Kotlin) з нативними бібліотеками.
- Завантаження та виконання бібліотек:
- Бібліотеки завантажуються в пам'ять за допомогою
System.loadLibrary
абоSystem.load
. - JNI_OnLoad виконується під час завантаження бібліотеки.
- Нативні методи, оголошені в Java, пов'язуються з нативними функціями, що дозволяє виконання.
- Зв'язування методів Java з нативними функціями:
- Динамічне зв'язування: Імена функцій у нативних бібліотеках відповідають певному шаблону, що дозволяє автоматичне зв'язування.
- Статичне зв'язування: Використовує
RegisterNatives
для зв'язування, забезпечуючи гнучкість у найменуванні функцій та структурі. - Інструменти та техніки реверс-інжинірингу:
- Інструменти, такі як Ghidra та IDA Pro, допомагають аналізувати нативні бібліотеки.
JNIEnv
є важливим для розуміння функцій та взаємодій JNI.- Надані вправи для практики завантаження бібліотек, зв'язування методів та ідентифікації нативних функцій.
Ресурси:
- Вивчення ARM Assembly:
- Рекомендується для глибшого розуміння основної архітектури.
- Основи ARM Assembly від Azeria Labs рекомендовано.
- Документація JNI та NDK:
- Специфікація JNI від Oracle
- Поради JNI для Android
- Початок роботи з NDK
- Налагодження нативних бібліотек:
- Налагодження нативних бібліотек Android за допомогою JEB Decompiler
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.