Manual DeObfuscation
Techniques de Dé-obfuscation Manuelle
Dans le domaine de la sécurité logicielle, le processus de rendre un code obscurci compréhensible, appelé dé-obfuscation, est crucial. Ce guide explore diverses stratégies de dé-obfuscation, en mettant l'accent sur les techniques d'analyse statique et la reconnaissance des schémas d'obfuscation. De plus, il propose un exercice d'application pratique et suggère des ressources supplémentaires 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 utilisées en fonction de la nature de l'obfuscation :
Octets de code 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.
Java et Code 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 pleinement l'algorithme mais de l'exécuter efficacement.
Identification de l'Obfuscation
Reconnaître un code obfusqué est la première étape du processus de dé-obfuscation. Les indicateurs clés incluent :
Absence ou brouillage de chaînes en Java et Android, ce qui peut suggérer une obfuscation de chaînes.
Présence de fichiers binaires dans le répertoire des ressources ou des appels à
DexClassLoader
, laissant entendre un déballage de code et un chargement dynamique.L'utilisation de bibliothèques natives aux côtés de fonctions JNI non identifiables, indiquant une éventuelle obfuscation des méthodes natives.
Analyse Dynamique en Dé-obfuscation
En exécutant le code dans un environnement contrôlé, l'analyse dynamique permet d'observer le comportement du code obfusqué en temps réel. Cette méthode est particulièrement efficace pour découvrir le fonctionnement interne de schémas d'obfuscation complexes conçus pour cacher la véritable intention du code.
Applications de l'Analyse Dynamique
Décryptage en Temps d'Exécution : De nombreuses techniques d'obfuscation consistent à crypter des chaînes ou des segments de code qui ne sont déchiffrés qu'au moment de l'exécution. Grâce à l'analyse dynamique, ces éléments cryptés peuvent être capturés au moment du déchiffrement, révélant leur forme réelle.
Identification des Techniques d'Obfuscation : En surveillant le comportement de l'application, l'analyse dynamique peut aider à identifier les techniques d'obfuscation spécifiques utilisées, telles que la virtualisation de code, les packers ou la génération de code dynamique.
Découverte de Fonctionnalités Cachées : Un code obfusqué peut contenir des fonctionnalités cachées qui ne sont pas apparentes par l'analyse statique seule. L'analyse dynamique permet d'observer tous les chemins de code, y compris ceux exécutés de manière conditionnelle, pour découvrir de telles fonctionnalités cachées.
Références et Lecture Complémentaire
BlackHat USA 2018 : “Unpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis Library” [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 : “The Path to the Payload: Android Edition” [vidéo]
Cette présentation aborde une série de techniques d'obfuscation, uniquement dans le code Java, qu'un botnet Android utilisait pour masquer son comportement.
Last updated