Reversing Native Libraries

Support HackTricks

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 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.

Resources:

Support HackTricks

Last updated