5.2 KiB
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Techniques de Dé-obfuscation Manuelle
Dans le domaine de la sécurité des logiciels, le processus de rendre le code obscur compréhensible, connu sous le nom de dé-obfuscation, est crucial. Ce guide explore diverses stratégies de dé-obfuscation, en se concentrant sur les techniques d'analyse statique et la reconnaissance des motifs d'obfuscation. De plus, il propose un exercice pour une application pratique et suggère d'autres ressources pour ceux qui souhaitent explorer des sujets plus avancés.
Stratégies de Dé-obfuscation Statique
Lorsqu'il s'agit de code obfusqué, plusieurs stratégies peuvent être employées en fonction de la nature de l'obfuscation :
- Bytecode DEX (Java) : Une approche efficace consiste à identifier les méthodes de dé-obfuscation de l'application, puis à reproduire ces méthodes dans un fichier Java. Ce fichier est exécuté pour inverser l'obfuscation sur les éléments ciblés.
- Code Java et Natif : Une autre méthode consiste à traduire l'algorithme de dé-obfuscation dans un langage de script comme Python. Cette stratégie souligne que l'objectif principal n'est pas de comprendre complètement l'algorithme, mais de l'exécuter efficacement.
Identification de l'Obfuscation
Reconnaître le code obfusqué est la première étape du processus de dé-obfuscation. Les indicateurs clés incluent :
- L'absence ou le brouillage de chaînes en Java et Android, ce qui peut suggérer une obfuscation de chaînes.
- La présence de fichiers binaires dans le répertoire des ressources ou des appels à
DexClassLoader
, indiquant un déballage de code et un chargement dynamique. - L'utilisation de bibliothèques natives accompagnées de fonctions JNI non identifiables, indiquant une obfuscation potentielle des méthodes natives.
Analyse Dynamique dans la Dé-obfuscation
En exécutant le code dans un environnement contrôlé, l'analyse dynamique permet d'observer comment le code obfusqué se comporte en temps réel. Cette méthode est particulièrement efficace pour découvrir le fonctionnement interne de motifs d'obfuscation complexes conçus pour cacher la véritable intention du code.
Applications de l'Analyse Dynamique
- Décryptage à l'Exécution : De nombreuses techniques d'obfuscation impliquent le chiffrement de chaînes ou de segments de code qui ne sont déchiffrés qu'à l'exécution. Grâce à l'analyse dynamique, ces éléments chiffrés peuvent être capturés au moment du déchiffrement, révélant leur véritable forme.
- Identification des Techniques d'Obfuscation : En surveillant le comportement de l'application, l'analyse dynamique peut aider à identifier des techniques d'obfuscation spécifiques utilisées, telles que la virtualisation de code, les packers ou la génération dynamique de code.
- Découverte de Fonctionnalités Cachées : Le code obfusqué peut contenir des fonctionnalités cachées qui ne sont pas apparentes par une analyse statique seule. L'analyse dynamique permet d'observer tous les chemins de code, y compris ceux exécutés conditionnellement, pour découvrir de telles fonctionnalités cachées.
Références et Lectures Complémentaires
- https://maddiestone.github.io/AndroidAppRE/obfuscation.html
- BlackHat USA 2018 : “Déballer le Déballage : Ingénierie Inverse d'une Bibliothèque Anti-Analyse Android” [vidéo]
- Cette présentation traite de l'ingénierie inverse d'une des bibliothèques natives anti-analyse les plus complexes que j'ai vues utilisées par une application Android. Elle couvre principalement les techniques d'obfuscation dans le code natif.
- REcon 2019 : “Le Chemin vers le Payload : Édition Android” [vidéo]
- Cette présentation discute d'une série de techniques d'obfuscation, uniquement dans le code Java, qu'un botnet Android utilisait pour cacher son comportement.