IDAPYTHON pour nommer les appels indirects aux fonctions

Après avoir recherché partout et fatigué tout le monde via IRC, je n’ai pas trouvé de solution sympa pour résoudre automatiquement les noms de fonction dans IDA quand les appels à celles-ci ne sont pas déclarées dans l’IAT.

Bon, j’ai perdu un lecteur ou deux, Je m’explique;

Par exemple, si je veux faire un programme windows qui pond une messagebox, cet appel de fonctions sera déclarée dans l’IAT et la DLL responsable de la fonction pour ce popup sera elle aussi déclarée et chargée à l’initialisation de l’executable. Cette publicité inattendue est peu souhaité par l’écrivain de malware. Celui-ci préfère éviter de déclarer les fonctions qu’il utilise. Et c’est du travail de se cacher.

J’ai pondu un petit exemple dans le github : https://github.com/Th4nat0s/Chall_Tools/tree/master/asm/hellostealth

Ce n’est pas le but aujourd’hui d’expliquer comment retrouver l’offset d’une fonctions en parsant la table d’EAT d’une dll; Mais en deux mots;  Ici je retrouve les adresse des fonctions à partir d’un hash de leur nom grâce à une petite procédure qui parse l’EAT de la dll chargée en mémoire (un grand classique).

Grosso modo dans tous les cas il faut passer par les étapes suivantes :

Une fois compilé, notre appel à MSGBOX est totalement incognito dans la table d’import

Et dans ida, rien n’est résolu et nous on ne sait pas trop ce qu’il se passe.

Et pour cause… Rien n’est initialisé, les appels sont cachés.

La solution facile dans ce cas là, si l’auteur du malware est sympas et charge tous les offset de fonctions dans une procédure pas loin du démarrage, c’est de dumper le process dans olly après résolution. A partir de là les offsets sont remplis.

Si on utilise olly on peut connaitre l’offset de la dite fonction et se transformer en Champollion. (View > Executable Modules > Bouton Droit > Show File in all module)

Screen Shot 2014-05-22 at 1.11.32

Bon là ca va il y en a que deux fonctions à trouver, mais avec un petit droppeur ou un malware, au bout de la 50eme c’est assez pénible. D’ou le script du jour.

Etape 1, sauver la liste de “All Names”  dans c:\temp\export.txt.

Etape 2, Se rendre ensuite dans IDA avec Python d’actif , mettre le curseur dans une fonction et faire Shift + F7 puis sélectionner ce script magique :  https://github.com/Th4nat0s/Chall_Tools/blob/master/ollylink.py

Etape 3, hurler de joie, ce qui était non renommé et inconnu en Dword_ et qui a trouvé correspondance dans une table d’export est enfin nommé. IDA fait le reste pour mettre les commentaires adaptés.

Voila qui est mieux.

This entry was posted in Asm, Reverse and tagged , , . Bookmark the permalink.

2 Responses to IDAPYTHON pour nommer les appels indirects aux fonctions

  1. the-maux says:

    Nice, gain de temps énorme sur certain ctf avec ce mignon petit script.

  2. thanatos says:

    Dummys après m’avoir tabassé sur mon orthographe vient de m’informer de l’existence de :

    http://zairon.wordpress.com/2014/05/15/hardcoded-dll-export-address-python-approach/

Leave a Reply

Your email address will not be published. Required fields are marked *

Please Do the Math