Comme nous l'avons dit précédemment, les plugins pour tous nos outils de reverse engineering préférés ont tendance à prendre la forme de DLL. Dans cet exemple, nous allons examiner comment coder un plugin pour ImpREC car c'est assez simple. ImpREC est un excellent outil pour réparer les imports des exécutables corrompus par des packers. Il échoue sur certains des nouveaux protecteurs, mais reste polyvalent car il est extensible via des plugins. Les tutoriels sur son utilisation sont nombreux et il est également détaillé dans mon tutoriel PE. Les instructions ont été fournies par MackT, l'auteur d'ImpREC, dans Plugin.txt dans le dossier des plugins où ImpREC est installé : Les points importants ci-dessus sont mis en évidence. Voici le code source d'un plugin pour tELock v0.92 que j'avais sous la main. Je ne l'ai pas codé moi-même et je ne connais pas l'auteur. C'est un bon exemple car il est très simple. J'ai ajouté plus de commentaires pour expliquer chaque ligne de code. Si vous souhaitez créer un projet WinAsm et construire cela, n'oubliez pas les paramètres de la DLL décrits dans le chapitre de la DLL squelette. Les fichiers Asm et Def se trouvent dans la section du code source comme d'habitude.
|
Notez qu'il doit encore y avoir une procédure DLLEntryPoint vide (appelée LibMain dans ce cas) et que la seule autre procédure est notre fonction de trace construite selon les instructions de MackT. Le fichier DEF est également très simple comme d'habitude, ne contenant que 2 lignes : LIBRARY tELock Écrire des plugins pour OllyDbg C'est exactement la même chose en principe, mais Olly est un logiciel beaucoup plus complexe. Un kit de développement de plugins (PDK) est disponible en téléchargement ici : http://www.ollydbg.de/plug110.zip qui comprend de la documentation et 2 exemples entièrement fonctionnels et bien commentés. Selon la documentation : Un plugin est une DLL qui réside dans le répertoire d'OllyDbg et ajoute
des fonctionnalités à OllyDbg. Pour coopérer, différents plugins nécessitent des noms uniques, des tags .udd,
des types de noms, etc. Au démarrage, OllyDbg charge toutes les DLL disponibles une par une et recherche
les points d'entrée nommés _ODBG_Plugindata et _ODBG_Plugininit. Si ces entrées sont présentes et que le plugin
signale une version d'interface compatible, OllyDbg enregistre le plugin et ajoute une entrée ou un sous-menu au menu
Plugins dans le menu principal d'OllyDbg. Malheureusement, les deux plugins d'exemple sont écrits en C avec des instructions pour la compilation sous BCC55, BCB5 ou M$VC++. Une fois encore, j'ai un exemple sous la main qui a été codé en MASM par SV & EviLoid. C'est un exemple idéal car c'est une correction simple pour l'API IsDebuggerPresent, qui est également importante pour notre compréhension. Cependant, il n'est pas compilable car certains fichiers inc sont manquants, mais j'ai inclus les fichiers asm et def dans la section du code source uniquement à titre de référence ici.
|
Copyright (C)- xtx Team (2021)