Reversing Native Libraries
Für weitere Informationen siehe: https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html
Android-Apps können native Bibliotheken verwenden, die typischerweise in C oder C++ geschrieben sind, für leistungsintensive Aufgaben. Malware-Ersteller nutzen ebenfalls diese Bibliotheken, da sie schwieriger umzukehren sind als DEX-Bytecode. Der Abschnitt betont Reverse-Engineering-Fähigkeiten, die auf Android zugeschnitten sind, anstatt Assemblersprachen zu lehren. ARM- und x86-Versionen von Bibliotheken werden zur Kompatibilität bereitgestellt.
Wichtige Punkte:
Native Bibliotheken in Android-Apps:
Werden für leistungsintensive Aufgaben verwendet.
In C oder C++ geschrieben, was das Reverse Engineering herausfordernd macht.
Im
.so
(Shared Object)-Format gefunden, ähnlich wie Linux-Binärdateien.Malware-Ersteller bevorzugen nativen Code, um die Analyse zu erschweren.
Java Native Interface (JNI) & Android NDK:
JNI ermöglicht es, Java-Methoden in nativen Code zu implementieren.
NDK ist ein Android-spezifisches Set von Tools zum Schreiben von nativem Code.
JNI und NDK verbinden Java (oder Kotlin) Code mit nativen Bibliotheken.
Bibliotheksladung & Ausführung:
Bibliotheken werden mit
System.loadLibrary
oderSystem.load
in den Speicher geladen.JNI_OnLoad wird beim Laden der Bibliothek ausgeführt.
In Java deklarierte native Methoden verknüpfen sich mit nativen Funktionen, was die Ausführung ermöglicht.
Verknüpfung von Java-Methoden mit nativen Funktionen:
Dynamische Verknüpfung: Funktionsnamen in nativen Bibliotheken entsprechen einem bestimmten Muster, was eine automatische Verknüpfung ermöglicht.
Statische Verknüpfung: Verwendet
RegisterNatives
zur Verknüpfung und bietet Flexibilität bei der Benennung und Struktur von Funktionen.Reverse Engineering-Tools und -Techniken:
Tools wie Ghidra und IDA Pro helfen bei der Analyse nativer Bibliotheken.
JNIEnv
ist entscheidend für das Verständnis von JNI-Funktionen und -Interaktionen.Übungen werden bereitgestellt, um das Laden von Bibliotheken, die Verknüpfung von Methoden und die Identifizierung nativer Funktionen zu üben.
Ressourcen:
ARM-Assembly lernen:
Empfohlen für ein tieferes Verständnis der zugrunde liegenden Architektur.
ARM Assembly Basics von Azeria Labs wird empfohlen.
JNI & NDK-Dokumentation:
Debugging nativer Bibliotheken:
Last updated