5 KiB
Reversing Native Libraries
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
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.
Key Points:
- 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
lubSystem.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.
Resources:
- Learning ARM Assembly:
- Sugerowane dla głębszego zrozumienia podstawowej architektury.
- ARM Assembly Basics z Azeria Labs jest zalecane.
- JNI & NDK Documentation:
- Oracle's JNI Specification
- Android's JNI Tips
- Getting Started with the NDK
- Debugging Native Libraries:
- Debug Android Native Libraries Using JEB Decompiler
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.