hacktricks/src/mobile-pentesting/android-app-pentesting/reversing-native-libraries.md

6.0 KiB
Raw Blame History

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

  1. 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/
  1. 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)
  1. 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
  1. 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.
  2. 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. citeturn5search2turn5search0


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

Reference

  • Frida 16.x promena (Android hooking, relokacija malih funkcija) frida.re/news citeturn5search0
  • NVD obaveštenje za libwebp prelivanje CVE-2023-4863 nvd.nist.gov citeturn2search0

{{#include ../../banners/hacktricks-training.md}}