6.0 KiB
Reversing Native Libraries
{{#include ../../banners/hacktricks-training.md}}
Za više informacija pogledajte: https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html
Android aplikacije mogu koristiti native biblioteke, obično napisane u C ili C++, za zadatke koji zahtevaju visoke performanse. Kreatori malvera takođe zloupotrebljavaju ove biblioteke jer su ELF deljeni objekti i dalje teži za dekompilaciju od DEX/OAT bajtkoda. Ova stranica se fokusira na praktične radne tokove i nedavne poboljšanja alata (2023-2025) koja olakšavaju obrnuto inženjerstvo Android .so
fajlova.
Brza procena za svež libfoo.so
- Izvucite biblioteku
# Iz instalirane aplikacije
adb shell "run-as <pkg> cat lib/arm64-v8a/libfoo.so" > libfoo.so
# Ili iz APK (zip)
unzip -j target.apk "lib/*/libfoo.so" -d extracted_libs/
- Identifikujte arhitekturu i zaštite
file libfoo.so # arm64 ili arm32 / x86
readelf -h libfoo.so # OS ABI, PIE, NX, RELRO, itd.
checksec --file libfoo.so # (peda/pwntools)
- Nabrojite eksportovane simbole i JNI veze
readelf -s libfoo.so | grep ' Java_' # dinamički povezani JNI
strings libfoo.so | grep -i "RegisterNatives" -n # statički registrovani JNI
- Učitajte u dekompajler (Ghidra ≥ 11.0, IDA Pro, Binary Ninja, Hopper ili Cutter/Rizin) i pokrenite automatsku analizu. Novije verzije Ghidre su uvele AArch64 dekompajler koji prepoznaje PAC/BTI stubove i MTE oznake, što značajno poboljšava analizu biblioteka napravljenih sa Android 14 NDK.
- Odlučite o statičkom naspram dinamičkom obrnuto inženjerstvu: skraćeni, obfuskovani kod često zahteva instrumentaciju (Frida, ptrace/gdbserver, LLDB).
Dinamička Instrumentacija (Frida ≥ 16)
Frida 16-serija je donela nekoliko poboljšanja specifičnih za Android koja pomažu kada cilj koristi moderne Clang/LLD optimizacije:
thumb-relocator
sada može hook-ovati male ARM/Thumb funkcije generisane LLD-ovim agresivnim poravnanjem (--icf=all
).- Nabrajanje i ponovno povezivanje ELF import slotova funkcioniše na Androidu, omogućavajući po-modulno
dlopen()
/dlsym()
patch-ovanje kada su inline hook-ovi odbijeni. - Java hooking je ispravljen za novi ART quick-entrypoint koji se koristi kada su aplikacije kompajlirane sa
--enable-optimizations
na Android 14.
Primer: nabrajanje svih funkcija registrovanih putem RegisterNatives
i ispis njihovih adresa u vreme izvođenja:
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 će raditi odmah na PAC/BTI omogućеним uređajima (Pixel 8/Android 14+) sve dok koristite frida-server 16.2 ili noviji – ranije verzije nisu uspele da lociraju padding za inline hooks. citeturn5search2turn5search0
Nedavne ranjivosti koje vredi istražiti u APK-ima
Godina | CVE | Pogođena biblioteka | Napomene |
---|---|---|---|
2023 | CVE-2023-4863 | libwebp ≤ 1.3.1 |
Prelivanje bafera na heap-u dostupno iz nativnog koda koji dekodira WebP slike. Nekoliko Android aplikacija sadrži ranjive verzije. Kada vidite libwebp.so unutar APK-a, proverite njegovu verziju i pokušajte sa eksploatacijom ili zakrpanjem. |
2024 | Više | OpenSSL 3.x serija | Nekoliko problema sa bezbednošću memorije i padding-oracle. Mnogi Flutter i ReactNative paketi isporučuju svoj libcrypto.so . |
Kada primetite treće strane .so
datoteke unutar APK-a, uvek proverite njihov hash protiv uzvodnih obaveštenja. SCA (Analiza softverskog sastava) je retka na mobilnim uređajima, pa su zastarele ranjive verzije rasprostranjene.
Anti-reversing & Hardening trendovi (Android 13-15)
- Pointer Authentication (PAC) & Branch Target Identification (BTI): Android 14 omogućava PAC/BTI u sistemskim bibliotekama na podržanom ARMv8.3+ silikonu. Decompilatori sada prikazuju PAC‐povezane pseudo-instrukcije; za dinamičku analizu Frida ubrizgava trampoline nakon uklanjanja PAC-a, ali vaše prilagođene trampoline treba da pozivaju
pacda
/autibsp
gde je to potrebno. - MTE & Scudo ojačani alokator: označavanje memorije je opcionalno, ali mnoge aplikacije svesne Play-Integrity se grade sa
-fsanitize=memtag
; koristitesetprop arm64.memtag.dump 1
plusadb shell am start ...
da zabeležite greške u oznakama. - LLVM Obfuscator (neprozirni predikati, izravnavanje toka kontrole): komercijalni pakeri (npr., Bangcle, SecNeo) sve više štite nativni kod, ne samo Java; očekujte lažne tokove kontrole i enkriptovane string blobove u
.rodata
.
Resursi
- Učenje ARM Assemblera: Azeria Labs – Osnovi ARM Assemblera
- JNI & NDK Dokumentacija: Oracle JNI Spec · Android JNI Saveti · NDK Vodiči
- Debagovanje Nativnih Biblioteka: Debagovanje Android Nativnih Biblioteka koristeći JEB Decompiler
Reference
- Frida 16.x promena (Android hooking, relokacija malih funkcija) – frida.re/news citeturn5search0
- NVD obaveštenje za
libwebp
prelivanje CVE-2023-4863 – nvd.nist.gov citeturn2search0
{{#include ../../banners/hacktricks-training.md}}