Reversing Native Libraries
Reading time: 3 minutes
tip
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.
Aby uzyskać więcej informacji, sprawdź: https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html
Aplikacje na Androida 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 wstecznej niż kod bajtowy DEX. Sekcja ta podkreśla umiejętności inżynierii wstecznej dostosowane do Androida, zamiast uczyć języków asemblera. Wersje bibliotek dla ARM i x86 są dostarczane dla zapewnienia kompatybilności.
Kluczowe punkty:
- Biblioteki natywne w aplikacjach na Androida:
- Używane do zadań wymagających dużej wydajności.
- Napisane w C lub C++, co utrudnia inżynierię wsteczną.
- Znajdują się w formacie
.so
(obiekt współdzielony), podobnym do binarnych plików Linuxa. - Twórcy złośliwego oprogramowania preferują kod natywny, aby utrudnić analizę.
- Java Native Interface (JNI) i 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.
- Ładowanie i wykonywanie bibliotek:
- 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.
- Łączenie metod Java z funkcjami natywnymi:
- Linkowanie dynamiczne: Nazwy funkcji w bibliotekach natywnych odpowiadają określonemu wzorcowi, co umożliwia automatyczne linkowanie.
- Linkowanie statyczne: Używa
RegisterNatives
do linkowania, co zapewnia elastyczność w nazewnictwie funkcji i strukturze. - Narzędzia i techniki inżynierii wstecznej:
- Narzędzia takie jak Ghidra i IDA Pro pomagają w analizie bibliotek natywnych.
JNIEnv
jest kluczowe dla zrozumienia funkcji i interakcji JNI.- Zapewnione są ćwiczenia do praktyki ładowania bibliotek, łączenia metod i identyfikowania funkcji natywnych.
Zasoby:
- Nauka asemblera ARM:
- Sugerowane dla głębszego zrozumienia podstawowej architektury.
- Podstawy asemblera ARM z Azeria Labs jest zalecane.
- Dokumentacja JNI i NDK:
- Specyfikacja JNI Oracle
- Wskazówki JNI Androida
- Rozpoczęcie pracy z NDK
- Debugowanie bibliotek natywnych:
- Debugowanie bibliotek natywnych Androida za pomocą dekompilatora JEB
tip
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.