Reversing Native Libraries
Для отримання додаткової інформації перегляньте: https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html
Android-додатки можуть використовувати нативні бібліотеки, які зазвичай написані на C або C++, для завдань, що вимагають високої продуктивності. Також зловмисники використовують ці бібліотеки, оскільки вони важче піддаються реверс-інжинірингу, ніж байткод DEX. Розділ підкреслює навички реверс-інжинірингу, специфічні для Android, замість навчання мов асемблера. Для сумісності надаються версії бібліотек ARM та x86.
Ключові моменти:
Нативні бібліотеки в Android-додатках:
Використовуються для завдань, що вимагають високої продуктивності.
Написані на C або C++, що ускладнює реверс-інжиніринг.
Знаходяться у форматі
.so
(спільний об'єкт), схожому на бінарні файли Linux.Зловмисники використовують нативний код, щоб ускладнити аналіз.
Інтерфейс Java Native (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:
Налагодження нативних бібліотек:
Last updated