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
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.
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.
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 ... "
Trouvé une méthode
Famille .method hidebysig static bool e () cil managed
Qui appartient à la classe CmdDocThisScope. Revenons maintenant à dotPeek.
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
Seuls 2 points d'appel ont été trouvés et ce sont les méthodes CmdDocThisFile :: c et CmdDocThisScope :: c.
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:
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.
Après avoir sélectionné l'instruction ldsfld, nous trouvons sa représentation binaire dans la fenêtre Hex View
La description de l'équipe confirme que nous avons trouvé le bon endroit.
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
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.