Reversing Native Libraries
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
For further information check: https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html
Aplikacje Android mogą korzystać z bibliotek natywnych, zazwyczaj napisanych w C lub C++, do zadań wymagających dużej wydajności. Twórcy złośliwego oprogramowania również używają tych bibliotek, ponieważ są trudniejsze do inżynierii odwrotnej niż kod bajtowy DEX. Sekcja ta podkreśla umiejętności inżynierii odwrotnej dostosowane do Androida, zamiast uczyć języków asemblera. Wersje bibliotek dla ARM i x86 są dostarczane dla zapewnienia kompatybilności.
Native Libraries in Android Apps:
Używane do zadań wymagających dużej wydajności.
Napisane w C lub C++, co utrudnia inżynierię odwrotną.
Znajdują się w formacie .so
(shared object), podobnym do binariów Linuxa.
Twórcy złośliwego oprogramowania preferują kod natywny, aby utrudnić analizę.
Java Native Interface (JNI) & Android NDK:
JNI pozwala na implementację metod Java w kodzie natywnym.
NDK to zestaw narzędzi specyficznych dla Androida do pisania kodu natywnego.
JNI i NDK łączą kod Java (lub Kotlin) z bibliotekami natywnymi.
Library Loading & Execution:
Biblioteki są ładowane do pamięci za pomocą System.loadLibrary
lub System.load
.
JNI_OnLoad jest wykonywane po załadowaniu biblioteki.
Metody natywne zadeklarowane w Javie łączą się z funkcjami natywnymi, umożliwiając wykonanie.
Linking Java Methods to Native Functions:
Dynamic Linking: Nazwy funkcji w bibliotekach natywnych pasują do określonego wzoru, co umożliwia automatyczne łączenie.
Static Linking: Używa RegisterNatives
do łączenia, co zapewnia elastyczność w nazewnictwie funkcji i strukturze.
Reverse Engineering Tools and Techniques:
Narzędzia takie jak Ghidra i IDA Pro pomagają w analizie bibliotek natywnych.
JNIEnv
jest kluczowe dla zrozumienia funkcji JNI i interakcji.
Zapewnione są ćwiczenia do praktyki ładowania bibliotek, łączenia metod i identyfikowania funkcji natywnych.
Learning ARM Assembly:
Sugerowane dla głębszego zrozumienia podstawowej architektury.
ARM Assembly Basics z Azeria Labs jest zalecane.
JNI & NDK Documentation:
Debugging Native Libraries:
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)