# 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**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
**Aby uzyskać dalsze informacje, sprawdź: [https://maddiestone.github.io/AndroidAppRE/reversing\_native\_libs.html](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` lub `System.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](https://azeria-labs.com/writing-arm-assembly-part-1/) od Azeria Labs są polecane.
- **Dokumentacja JNI i NDK:**
- [Specyfikacja JNI Oracle](https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html)
- [Wskazówki dotyczące JNI w Androidzie](https://developer.android.com/training/articles/perf-jni)
- [Rozpoczęcie pracy z NDK](https://developer.android.com/ndk/guides/)
- **Debugowanie bibliotek natywnych:**
- [Debugowanie bibliotek natywnych Androida za pomocą dekompilatora JEB](https://medium.com/@shubhamsonani/how-to-debug-android-native-libraries-using-jeb-decompiler-eec681a22cf3)
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**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.