Reversing Native Libraries
Reading time: 5 minutes
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Vir verdere inligting, kyk: https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html
Android-toepassings kan inheemse biblioteke gebruik, wat tipies in C of C++ geskryf is, vir prestasiekritieke take. Malware-skeppers misbruik ook hierdie biblioteke omdat ELF gedeelde voorwerpe steeds moeiliker is om te dekompileer as DEX/OAT byte-kode. Hierdie bladsy fokus op praktiese werksvloeie en onlangse hulpmiddelverbeterings (2023-2025) wat die omkering van Android .so
lĂȘers makliker maak.
Vinnige triage-werksvloei vir 'n vars getrokke libfoo.so
- Onthaal die biblioteek
# Van 'n geĂŻnstalleerde toepassing
adb shell "run-as <pkg> cat lib/arm64-v8a/libfoo.so" > libfoo.so
# Of van die APK (zip)
unzip -j target.apk "lib/*/libfoo.so" -d extracted_libs/
- Identifiseer argitektuur & beskermings
file libfoo.so # arm64 of arm32 / x86
readelf -h libfoo.so # OS ABI, PIE, NX, RELRO, ens.
checksec --file libfoo.so # (peda/pwntools)
- Lys geëksporteerde simbole & JNI bindings
readelf -s libfoo.so | grep ' Java_' # dinamies-gekoppelde JNI
strings libfoo.so | grep -i "RegisterNatives" -n # staties-geregistreerde JNI
- Laai in 'n dekompiler (Ghidra â„ 11.0, IDA Pro, Binary Ninja, Hopper of Cutter/Rizin) en voer outomatiese analise uit. Nuwe Ghidra weergawes het 'n AArch64 dekompiler bekendgestel wat PAC/BTI stubs en MTE-tags herken, wat die analise van biblioteke wat met die Android 14 NDK gebou is, aansienlik verbeter.
- Bepaal op statiese vs dinamiese omkering: gestript, obfuskeer kode benodig dikwels instrumentasie (Frida, ptrace/gdbserver, LLDB).
Dinamiese Instrumentasie (Frida â„ 16)
Frida se 16-reeks het verskeie Android-spesifieke verbeterings gebring wat help wanneer die teiken moderne Clang/LLD optimaliseringe gebruik:
thumb-relocator
kan nou klein ARM/Thumb funksies wat deur LLD se aggressiewe uitlijning (--icf=all
) gegenereer is, hook.- Die opnoem en herbinding van ELF invoer slots werk op Android, wat per-module
dlopen()
/dlsym()
patching moontlik maak wanneer inline hooks verwerp word. - Java hooking is reggestel vir die nuwe ART vinnige toegangspunt wat gebruik word wanneer toepassings gecompileer word met
--enable-optimizations
op Android 14.
Voorbeeld: opnoem van alle funksies wat deur RegisterNatives
geregistreer is en hul adresse tydens uitvoering dump:
Java.perform(function () {
var Runtime = Java.use('java.lang.Runtime');
var register = Module.findExportByName(null, 'RegisterNatives');
Interceptor.attach(register, {
onEnter(args) {
var envPtr = args[0];
var clazz = Java.cast(args[1], Java.use('java.lang.Class'));
var methods = args[2];
var count = args[3].toInt32();
console.log('[+] RegisterNatives on ' + clazz.getName() + ' -> ' + count + ' methods');
// iterate & dump (JNI nativeMethod struct: name, sig, fnPtr)
}
});
});
Frida sal uit die boks werk op PAC/BTI-geaktiveerde toestelle (Pixel 8/Android 14+) solank jy frida-server 16.2 of later gebruik â vroeĂ«re weergawes het gefaal om padding vir inline hooks te vind. îciteîturn5search2îturn5search0î
Onlangse kwesbaarhede wat die moeite werd is om in APK's te jag
Jaar | CVE | Aangetaste biblioteek | Aantekeninge |
---|---|---|---|
2023 | CVE-2023-4863 | libwebp †1.3.1 | Heap buffer overflow bereikbaar vanaf native kode wat WebP-prente decodeer. Verskeie Android-apps bundel kwesbare weergawes. Wanneer jy 'n libwebp.so binne 'n APK sien, kontroleer sy weergawe en probeer om te exploiteer of te patch. |
2024 | Meervoudig | OpenSSL 3.x reeks | Verskeie geheue-veilige en padding-orakel probleme. Baie Flutter & ReactNative bundels verskaf hul eie libcrypto.so . |
Wanneer jy derdeparty .so
lĂȘers binne 'n APK opmerk, kontroleer altyd hul hash teen opwaartse advies. SCA (Software Composition Analysis) is ongewoon op mobiele toestelle, so verouderde kwesbare boue is volop.
Anti-Reversing & Hardening neigings (Android 13-15)
- Pointer Authentication (PAC) & Branch Target Identification (BTI): Android 14 stel PAC/BTI in stelselbiblioteke op ondersteunde ARMv8.3+ silikoon in. Decompilers vertoon nou PAC-verwante pseudo-instruksies; vir dinamiese analise injecteer Frida trampolines nadat PAC verwyder is, maar jou eie trampolines moet
pacda
/autibsp
aanroep waar nodig. - MTE & Scudo geharde allokator: geheue-tagging is opt-in maar baie Play-Integrity bewuste apps bou met
-fsanitize=memtag
; gebruiksetprop arm64.memtag.dump 1
plusadb shell am start ...
om tag foute te vang. - LLVM Obfuscator (opake predikate, kontrole-stroom afvlakking): kommersiële packers (bv. Bangcle, SecNeo) beskerm toenemend native kode, nie net Java nie; verwag valse kontrole-stroom en versleutelde string blobs in
.rodata
.
Hulpbronne
- Leer ARM Assembly: Azeria Labs â ARM Assembly Basics
- JNI & NDK Dokumentasie: Oracle JNI Spec · Android JNI Wenke · NDK Gidse
- Debugging Native Libraries: Debug Android Native Libraries Using JEB Decompiler
Verwysings
- Frida 16.x verandering-log (Android hooking, tiny-function herlokasie) â frida.re/news îciteîturn5search0î
- NVD advies vir
libwebp
overflow CVE-2023-4863 â nvd.nist.gov îciteîturn2search0î
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.