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
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
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
- Extraire la bibliothĂšque
# à 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/
- Identifier l'architecture et les protections
file libfoo.so # arm64 ou arm32 / x86
readelf -h libfoo.so # OS ABI, PIE, NX, RELRO, etc.
checksec --file libfoo.so # (peda/pwntools)
- Lister les symboles exportés et les liaisons JNI
readelf -s libfoo.so | grep ' Java_' # JNI lié dynamiquement
strings libfoo.so | grep -i "RegisterNatives" -n # JNI enregistré statiquement
- 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.
- 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 :
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ée | CVE | BibliothÚque affectée | Remarques |
---|---|---|---|
2023 | CVE-2023-4863 | libwebp †1.3.1 | Dé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. |
2024 | Multiple | Série OpenSSL 3.x | Plusieurs 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
; utilisezsetprop arm64.memtag.dump 1
plusadb 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
- Apprendre l'assemblage ARM : Azeria Labs â Notions de base sur l'assemblage ARM
- Documentation JNI & NDK : Spécification JNI d'Oracle · Conseils JNI Android · Guides NDK
- Débogage des bibliothÚques natives : Déboguer les bibliothÚques natives Android à l'aide de JEB Decompiler
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
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.