Applications d'ingénierie inverse après obscurcissement

Présentation


Cette publication vise à étudier certaines techniques d'ingénierie inverse. Tous les documents sont présentés à titre informatif uniquement et ne sont pas destinés à être utilisés à des fins personnelles.


Sujet de recherche


A titre d'exemple, nous étudierons le code de documentation d'Atomineer Pro (ci-après APD). Il s'agit d'un plug-in pour Visual Studio conçu pour générer automatiquement des commentaires dans les codes source. Tout d'abord, installez ce plugin et vérifiez son fonctionnement. La version gratuite a une période d'essai et un certain nombre de restrictions d'utilisation pendant cette période. Ainsi, lors de l'ajout de commentaires au fichier, l'utilisateur reçoit un message indiquant que pendant la journée, vous ne pouvez traiter que 10 fichiers

Message 1
image

Lorsque vous essayez de traiter l'intégralité du projet, l'utilitaire affiche une boîte de dialogue vous avertissant que cette commande n'est pas disponible.

Message 2
image

Commençons


Tout d'abord, regardez dans le répertoire de l'extension installée et n'y trouvez qu'une seule bibliothèque dynamique. Nous en avons besoin. La première chose que nous faisons est de le télécharger sur le décompilateur dotPeek de JetBrains.

dotPeek
image

Comme vous pouvez le voir sur la capture d'écran, la bibliothèque est passée par un obfuscateur, les variables et les méthodes ont été renommées et ont des noms de la forme a, b, c, d ... c'est ce dont nous avons besoin. Nous recherchions juste cela. Voyons ce qui peut être fait.

Partie 1


La première chose qui me vient à l'esprit est de trouver la ligne, mais comme la fonctionnalité de recherche n'est pas dans dotPeek, allons dans un sens différent. Nous décompilons la bibliothèque avec le ildasm.exe standard des SDK Microsoft. La sortie ne recevra qu'un seul fichier texte. Dans ce document, nous recherchons le texte du message « Mode d'essai. Veuillez noter que votre ... "

fichier texte
image

Trouvé une méthode
Famille .method hidebysig static bool e () cil managed
Qui appartient à la classe CmdDocThisScope. Revenons maintenant à dotPeek.

Cap de spoiler
image

Alors ce que nous avons. Nous avons trouvé une méthode qui affiche un message d'essai APD et, selon la condition, renvoie vrai ou faux. On retrouve tous les endroits d'où cette méthode est appelée

recherche d'appels
image

Seuls 2 points d'appel ont été trouvés et ce sont les méthodes CmdDocThisFile :: c et CmdDocThisScope :: c.

trouvé
image

Par le nom des classes et le code constructeur, il est évident que les classes sont responsables des éléments de menu, et la virtualité de la méthode «c» indique qu'il s'agit du gestionnaire d'événements pour sélectionner l'élément de menu correspondant par l'utilisateur (Ces informations nous seront utiles plus loin). Il est facile de deviner que si la méthode renvoie true, la commande sera exécutée même si elle affichera une boîte de dialogue avec un avertissement.

Au début de la méthode CmdDocThisScope :: e, la variable f est incrémentée. Ouvrez la fenêtre «IL View» et recherchez le code de commande:

IL Voir


Wikipedia a un article décrivant ces instructions .

Ensuite, recherchez cette méthode dans le fichier de bibliothèque APD. Nous le ferons en utilisant l'outil IDA. Dans la fenêtre avec les fonctions, nous trouverons notre méthode, et nous verrons le code déjà familier.

IDA


Après avoir sélectionné l'instruction ldsfld, nous trouvons sa représentation binaire dans la fenêtre Hex View

Vue hexadécimale


La description de l'équipe confirme que nous avons trouvé le bon endroit.

Wiki


Une analyse plus approfondie du code de cette méthode et des étapes suivantes dépasse la portée de cet article.

2e partie


Maintenant, comme des chercheurs déjà expérimentés, nous trouvons un appel au dialogue avec le message " La commande 'Document all in Project' n'est disponible que dans la version complète ... ". Cette méthode est CmdDocThisProject :: c

CmdDocThisProject :: c


La classe CmdDocThisProject est responsable de la commande «Process Project», la méthode «c» est virtuelle. Et il ne contient qu'une chose - c'est un appel au dialogue avec un message. Pas de conditions, pas de chèques. Une recherche dans le code source nous mène à la méthode CmdDocThisProject :: i, qui a ce que nous attendons dans CmdDocThisProject :: c. Maintenant, dans IDA, nous pouvons facilement trouver les méthodes nécessaires et apprendre les instructions CIL


Conclusion


Il reste à dire que l'article a délibérément laissé des points blancs pour leur étude indépendante.

Source: https://habr.com/ru/post/fr444886/


All Articles