Coder des plugins ImpREC & Olly

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é :


1

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.

 



1

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
EXPORTS Trace

É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.

Les plugins peuvent ajouter des éléments de menu aux fenêtres de désassemblage, de vidage, de pile, de registres, de mémoire, de modules, de threads, de points d'arrêt, de montres, de références, de fenêtres de trace d'exécution. Ils peuvent intercepter à la fois les raccourcis globaux et les raccourcis provenant de l'une des fenêtres répertoriées. Ils peuvent également créer leurs propres fenêtres MDI. Les plugins peuvent écrire des données spécifiques au plugin dans des fichiers .udd contenant des informations dépendantes du module et dans ollydbg.ini, et accéder à différentes structures de données décrivant l'application en cours de débogage. Il existe plusieurs fonctions de rappel (en général, facultatives) qui permettent une interaction facile mais étroite avec OllyDbg. De plus, les plugins peuvent appeler plus de 170 fonctions API spécifiques aux plugins.

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)

XHTML valide 1.1 CSS Valide !