mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
96 lines
6.0 KiB
Markdown
96 lines
6.0 KiB
Markdown
# Reversing Native Libraries
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|
||
|
||
**Za više informacija pogledajte:** [**https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html**](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`
|
||
|
||
1. **Izvucite biblioteku**
|
||
```bash
|
||
# 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/
|
||
```
|
||
2. **Identifikujte arhitekturu i zaštite**
|
||
```bash
|
||
file libfoo.so # arm64 ili arm32 / x86
|
||
readelf -h libfoo.so # OS ABI, PIE, NX, RELRO, itd.
|
||
checksec --file libfoo.so # (peda/pwntools)
|
||
```
|
||
3. **Nabrojite eksportovane simbole i JNI veze**
|
||
```bash
|
||
readelf -s libfoo.so | grep ' Java_' # dinamički povezani JNI
|
||
strings libfoo.so | grep -i "RegisterNatives" -n # statički registrovani JNI
|
||
```
|
||
4. **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.
|
||
5. **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:
|
||
```javascript
|
||
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.| citeturn2search0|
|
||
|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`; koristite `setprop arm64.memtag.dump 1` plus `adb 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](https://azeria-labs.com/writing-arm-assembly-part-1/)
|
||
- **JNI & NDK Dokumentacija:** [Oracle JNI Spec](https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html) · [Android JNI Saveti](https://developer.android.com/training/articles/perf-jni) · [NDK Vodiči](https://developer.android.com/ndk/guides/)
|
||
- **Debagovanje Nativnih Biblioteka:** [Debagovanje Android Nativnih Biblioteka koristeći JEB Decompiler](https://medium.com/@shubhamsonani/how-to-debug-android-native-libraries-using-jeb-decompiler-eec681a22cf3)
|
||
|
||
### Reference
|
||
|
||
- Frida 16.x promena (Android hooking, relokacija malih funkcija) – [frida.re/news](https://frida.re/news/) citeturn5search0
|
||
- NVD obaveštenje za `libwebp` prelivanje CVE-2023-4863 – [nvd.nist.gov](https://nvd.nist.gov/vuln/detail/CVE-2023-4863) citeturn2search0
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|