5.3 KiB
Odwracanie bibliotek natywnych
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLAN SUBSKRYPCJI!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.
Aby uzyskać dalsze informacje, sprawdź: https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html
Aplikacje Android mogą korzystać z bibliotek natywnych, zwykle napisanych w języku C lub C++, do wykonywania zadań o dużej wydajności. Twórcy złośliwego oprogramowania również korzystają z tych bibliotek, ponieważ są trudniejsze do odwrócenia niż kod bajtowy DEX. Sekcja ta skupia się na umiejętnościach odwracania inżynieryjnego dostosowanych do systemu Android, a nie na nauczaniu języków asemblera. Wersje bibliotek dla architektur ARM i x86 są dostępne dla zapewnienia kompatybilności.
Kluczowe punkty:
-
Biblioteki natywne w aplikacjach Android:
-
Używane do zadań o dużej wydajności.
-
Napisane w języku C lub C++, co utrudnia odwracanie inżynieryjne.
-
Znajdują się w formacie
.so
(shared object), podobnym do binarnych plików Linux. -
Twórcy złośliwego oprogramowania preferują kod natywny, aby utrudnić analizę.
-
Java Native Interface (JNI) i Android NDK:
-
JNI umożliwia implementację metod Javy w kodzie natywnym.
-
NDK to zestaw narzędzi specyficznych dla systemu Android do pisania kodu natywnego.
-
JNI i NDK łączą kod Javy (lub Kotlin) z bibliotekami natywnymi.
-
Ładowanie i wykonywanie bibliotek:
-
Biblioteki są ładowane do pamięci za pomocą
System.loadLibrary
lubSystem.load
. -
Wykonuje się JNI_OnLoad podczas ładowania biblioteki.
-
Deklarowane w Javie metody natywne łączą się z funkcjami natywnymi, umożliwiając ich wykonanie.
-
Łączenie metod Javy z funkcjami natywnymi:
-
Łączenie dynamiczne: Nazwy funkcji w bibliotekach natywnych pasują do określonego wzorca, co umożliwia automatyczne łączenie.
-
Łączenie statyczne: Wykorzystuje
RegisterNatives
do łączenia, zapewniając elastyczność w nazewnictwie i strukturze funkcji. -
Narzędzia i techniki odwracania inżynieryjnego:
-
Narzędzia takie jak Ghidra i IDA Pro pomagają analizować biblioteki natywne.
-
JNIEnv
jest kluczowy do zrozumienia funkcji i interakcji JNI. -
Ćwiczenia są dostarczane w celu praktyki ładowania bibliotek, łączenia metod i identyfikacji funkcji natywnych.
Zasoby:
-
Nauka języka asemblera ARM:
-
Zalecane dla lepszego zrozumienia podstawowej architektury.
-
Podstawy języka asemblera ARM od Azeria Labs są polecane.
-
Dokumentacja JNI i NDK:
-
Debugowanie bibliotek natywnych:
-
Debugowanie bibliotek natywnych Androida za pomocą dekompilatora JEB
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLAN SUBSKRYPCJI!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.