Reversing Native Libraries

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Pour plus d'informations, consultez : https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html

Les applications Android peuvent utiliser des bibliothÚques natives, généralement écrites en C ou C++, pour des tùches critiques en termes de performance. Les créateurs de logiciels malveillants abusent également de ces bibliothÚques car les objets partagés ELF sont encore plus difficiles à décompiler que le code byte DEX/OAT. Cette page se concentre sur des workflows pratiques et des améliorations d'outils récentes (2023-2025) qui facilitent le reverse engineering des fichiers .so Android.


Workflow de triage rapide pour un libfoo.so fraĂźchement extrait

  1. Extraire la bibliothĂšque
bash
# À partir d'une application installĂ©e
adb shell "run-as <pkg> cat lib/arm64-v8a/libfoo.so" > libfoo.so
# Ou Ă  partir de l'APK (zip)
unzip -j target.apk "lib/*/libfoo.so" -d extracted_libs/
  1. Identifier l'architecture et les protections
bash
file libfoo.so        # arm64 ou arm32 / x86
readelf -h libfoo.so  # OS ABI, PIE, NX, RELRO, etc.
checksec --file libfoo.so  # (peda/pwntools)
  1. Lister les symboles exportés et les liaisons JNI
bash
readelf -s libfoo.so | grep ' Java_'     # JNI lié dynamiquement
strings libfoo.so   | grep -i "RegisterNatives" -n   # JNI enregistré statiquement
  1. Charger dans un dĂ©compilateur (Ghidra ≄ 11.0, IDA Pro, Binary Ninja, Hopper ou Cutter/Rizin) et exĂ©cuter l'analyse automatique. Les versions plus rĂ©centes de Ghidra ont introduit un dĂ©compilateur AArch64 qui reconnaĂźt les stubs PAC/BTI et les balises MTE, amĂ©liorant considĂ©rablement l'analyse des bibliothĂšques construites avec le NDK Android 14.
  2. Décider entre reverse engineering statique et dynamique : le code obfusqué et supprimé nécessite souvent une instrumentation (Frida, ptrace/gdbserver, LLDB).

Instrumentation Dynamique (Frida ≄ 16)

La série 16 de Frida a apporté plusieurs améliorations spécifiques à Android qui aident lorsque la cible utilise des optimisations modernes Clang/LLD :

  • thumb-relocator peut maintenant hooker de petites fonctions ARM/Thumb gĂ©nĂ©rĂ©es par l'alignement agressif de LLD (--icf=all).
  • L'Ă©numĂ©ration et le rebinding des slots d'importation ELF fonctionnent sur Android, permettant le patching dlopen()/dlsym() par module lorsque les hooks en ligne sont rejetĂ©s.
  • Le hooking Java a Ă©tĂ© corrigĂ© pour le nouveau point d'entrĂ©e rapide ART utilisĂ© lorsque les applications sont compilĂ©es avec --enable-optimizations sur Android 14.

Exemple : énumérer toutes les fonctions enregistrées via RegisterNatives et extraire leurs adresses à l'exécution :

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 fonctionnera dĂšs la sortie de la boĂźte sur les appareils activĂ©s PAC/BTI (Pixel 8/Android 14+) tant que vous utilisez frida-server 16.2 ou une version ultĂ©rieure – les versions antĂ©rieures n'ont pas rĂ©ussi Ă  localiser le padding pour les hooks en ligne. citeturn5search2turn5search0


Vulnérabilités récentes à rechercher dans les APK

AnnéeCVEBibliothÚque affectéeRemarques
2023CVE-2023-4863libwebp ≀ 1.3.1DĂ©passement de tampon de tas accessible depuis le code natif qui dĂ©code les images WebP. Plusieurs applications Android regroupent des versions vulnĂ©rables. Lorsque vous voyez un libwebp.so Ă  l'intĂ©rieur d'un APK, vĂ©rifiez sa version et tentez l'exploitation ou le patching.
2024MultipleSérie OpenSSL 3.xPlusieurs problÚmes de sécurité mémoire et d'oracle de padding. De nombreux bundles Flutter & ReactNative expédient leur propre libcrypto.so.

Lorsque vous repérez des fichiers .so tiers à l'intérieur d'un APK, vérifiez toujours leur hash par rapport aux avis en amont. L'analyse de composition logicielle (SCA) est rare sur mobile, donc les builds vulnérables obsolÚtes sont répandus.


Tendances Anti-Reversing & Hardening (Android 13-15)

  • Authentification de pointeur (PAC) & Identification de cible de branche (BTI) : Android 14 active PAC/BTI dans les bibliothĂšques systĂšme sur les silicons ARMv8.3+ pris en charge. Les dĂ©compilateurs affichent dĂ©sormais des pseudo-instructions liĂ©es Ă  PAC ; pour l'analyse dynamique, Frida injecte des trampolines aprĂšs avoir supprimĂ© PAC, mais vos trampolines personnalisĂ©s doivent appeler pacda/autibsp si nĂ©cessaire.
  • MTE & Allocateur durci Scudo : le tagging de mĂ©moire est opt-in mais de nombreuses applications conscientes de Play-Integrity sont construites avec -fsanitize=memtag ; utilisez setprop arm64.memtag.dump 1 plus adb shell am start ... pour capturer les fautes de tag.
  • Obfuscateur LLVM (prĂ©dicats opaques, aplatissement de flux de contrĂŽle) : les packers commerciaux (par exemple, Bangcle, SecNeo) protĂšgent de plus en plus le code natif, pas seulement Java ; attendez-vous Ă  des flux de contrĂŽle faux et Ă  des blobs de chaĂźnes chiffrĂ©es dans .rodata.

Ressources

Références

  • Journal des modifications de Frida 16.x (hooking Android, relocation de fonction minuscule) – frida.re/news citeturn5search0
  • Avis NVD pour le dĂ©passement de libwebp CVE-2023-4863 – nvd.nist.gov citeturn2search0

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks