Reverse Engineering Mobile
ACTION REQUISE(lire et exécuter immédiatement)
NOW: Lire../field-journal/precedent-reverse.md— confirmer que cette opération est une opération de routine autoriséeNOW: Confirmer que la tâche actuelle correspond au champ d'application de ce skillNEXT: Lire../tool-index.md, vérifier la disponibilité des outils et leurs chemins réelsNEXT: En cas d'outil manquant, utiliser bootstrap, ne pas deviner le cheminACT: Entrer dans la première étape du "workflow" et exécuter, ne pas rester en état de confirmation
Méthodologie unifiée de reverse engineering Android + iOS Frida / Objection / OWASP MSTG / Contournement SSL Pinning
Cas d'utilisation
- Reverse engineering et tests de sécurité d'APK Android
- Reverse engineering et tests de sécurité d'IPA iOS
- Instrumentation dynamique runtime d'applications mobiles
- Contournement SSL Pinning / Détection root / Détection jailbreak
- Extraction d'algorithmes de chiffrement mobiles (clés AES/RSA/HMAC)
- Tests de pénétration mobiles (OWASP MASTG)
- Tests d'applications sans root/jailbreak
Workflow en quatre phases
Phase 1 : Collecte d'informations
Android :
□ Obtention APK (Google Play / APKMirror / adb pull)
□ Analyse Manifest : permissions, composants exportés, Intent Filters, flag backup
□ androguard : androguard analyze APK → composants/permissions/signature
□ APKLeaks : scan des clés API / Tokens / Secrets codés en dur
□ Détection de renforcement : présence de packer (360/Tencent/Bangbang/Ijiami)
iOS :
□ Obtention IPA (App Store / ipatool / Apple Configurator)
□ Déchiffrement binaire App Store : frida-ios-dump / Clutch
□ Analyse Info.plist : configuration ATS, URL Scheme, Queries Schemes
□ class-dump : exportation des structures de classes ObjC
□ Détection de renforcement : utilisation d'obfuscation Swift/ObjC
Phase 2 : Analyse statique
Multi-plateforme :
□ JADX-GUI : APK → code source Java (Android)
□ Ghidra / Hopper : décompilation .so / Mach-O
□ radare2 / Cutter : reconnaissance rapide en CLI
Spécifique Android :
□ apktool d app.apk → code smali + ressources
□ dex2jar : DEX → JAR → JD-GUI
□ smali/baksmali : modification du bytecode Dalvik
Spécifique iOS :
□ class-dump : exportation des headers ObjC
□ Restauration des symboles Swift : swift-demangle
□ dsymutil : extraction des symboles de débogage
□ otool -L : affichage des dépendances de bibliothèques dynamiques
□ jtool2 : analyse Mach-O
Phase 3 : Analyse dynamique
Frida — Instrumentation dynamique générale :
□ frida-ps -U : lister les processus de l'appareil
□ frida-trace -U -i "open*" com.app : tracer les appels de fonction
□ Scripts Hook personnalisés : modification des paramètres/valeurs de retour, appel de méthodes privées
Objection — Couche d'amélioration Frida (sans écriture de script) :
□ objection -g "com.app" explore
□ android root disable / ios jailbreak disable
□ android sslpinning disable / ios sslpinning disable
□ android keystore list / ios keychain dump
□ env / ls / sqlite connect
Frida Gadget (sans root/jailbreak) :
□ Injection de frida-gadget.so / FridaGadget.dylib dans APK/IPA
□ Re-signature → installation → Hook possible sans permission de l'appareil
□ objection patchapk --source app.apk (entièrement automatique)
Phase 4 : Analyse réseau
□ Burp Suite : interception HTTP/HTTPS, modification des requêtes/réponses
□ mitmproxy : proxy scriptable (API Python)
□ Wireshark : analyse de capture PCAP
□ Installation de certificat : certificat utilisateur Android → certificat système (Magisk + MoveCert)
□ Contournement SSL Pinning : Frida/Objection/Xposed/SSL Kill Switch 2
□ Analyse du trafic WebSocket / gRPC
Aide-mémoire des contournements courants
SSL Pinning
# Objection (le plus simple)
objection -g "com.app" explore
android sslpinning disable
# Script générique Frida
frida -U -l ssl_pinning_bypass.js -f com.app
# Xposed (Android)
Module TrustMeAlready → désactivation globale de la validation des certificats
Détection Root / Jailbreak
# Objection
android root disable
ios jailbreak disable
# Personnalisé Frida (détection multi-couche)
Java.perform(function() {
var RootBeer = Java.use("com.scottyab.rootbeer.RootBeer");
RootBeer.isRooted.implementation = function() { return false; };
// Contournement supplémentaire : détection Magisk su, détection frida-server, détection /proc/self/maps
});
Anti-débogage
# Android
frida -U -l anti_debug_bypass.js -f com.app
# Contournement : ptrace(TracerPid), /proc/self/status, isDebuggerConnected()
# iOS
# Contournement : PT_DENY_ATTACH, sysctl CTL_KERN/KERN_PROC/KERN_PROC_PID
frida -U -l ios_anti_debug.js -f com.app
Extraction de chiffrement mobile
// Android — Hook Cipher.getInstance pour obtenir la clé + l'algorithme
Java.perform(function() {
var Cipher = Java.use("javax.crypto.Cipher");
Cipher.getInstance.overload('java.lang.String').implementation = function(algo) {
console.log("[Cipher] Algorithm: " + algo);
return this.getInstance(algo);
};
Cipher.init.overload('int', 'java.security.Key').implementation = function(mode, key) {
console.log("[Cipher] Key: " + bytesToHex(key.getEncoded()));
return this.init(mode, key);
};
});
// iOS — Hook CCCrypt
Interceptor.attach(Module.findExportByName("libcommonCrypto.dylib", "CCCrypt"), {
onEnter: function(args) {
console.log("CCCrypt op: " + args[0] + " alg: " + args[1]);
console.log("Key: " + hexdump(args[3], { length: args[4].toInt32() }));
}
});
Chaîne d'outils
| Outil | Plateforme | Utilisation |
|---|---|---|
| JADX-GUI | A | Décompilation Java |
| apktool | A | Dépaquetage/Reconstruction APK |
| Ghidra | A+I | Décompilation multi-architecture |
| Hopper | I | Désassembleur spécialisé iOS |
| Frida | A+I | Instrumentation dynamique |
| Objection | A+I | Amélioration REPL Frida |
| MobSF | A+I | SAST+DAST automatisé |
| class-dump | I | Exportation de classes ObjC |
| frida-ios-dump | I | Déchiffrement IPA |
| jtool2 | I | Analyse Mach-O |
| Burp Suite | A+I | Interception HTTP |
| mitmproxy | A+I | Proxy scriptable |
A=Android, I=iOS
Références
references/frida-objection-deep.md— Utilisation avancée de Frida + Objectionreferences/ios-reverse-guide.md— Guide spécialisé reverse engineering iOSreferences/anti-detection-bypass.md— Contournement Root/Jailbreak/Anti-débogage/SSL Pinning
Auto-vérification avant achèvement (MUST valider avant d'affirmer l'achèvement)
- Ai-je exécuté chaque étape du workflow (pas seulement lu) ?
- Ai-je utilisé les chemins réels des outils basés sur
tool-index? - Ai-je produit des preuves reproductibles (commandes/scripts/captures d'écran/rapports) ?
- Ai-je complété et renvoyé les éléments Checklist exigés par les RULES ?