1. Les en-têtes du fichier | ||||||||||||||||||||||||||||||||||
En-tête DOS |
||||||||||||||||||||||||||||||||||
On
ouvre le fichier avec Stud_PE et on a une erreur.![]() On ouvre donc le fichier avec notre éditeur hexadécimal. Puis on effectue les modifications suivantes afin de faire reconnaître à Stud_PE qu'il s'agit bien du fichier exécutable PE.
Malgré quelques messages d'erreur, nous pouvons désormais ouvrir le fichier avec Stud_PE. ![]() En
cliquant sur le bouton "Basic HEADERS
tree view
in hexeditor" nous pourrons
parcourir tous les champs des différents en-têtes
du fichier afin de les vérifier.
Vous devez donc avoir un espace de travail qui ressemble à ça : ![]() Avec la fenêtre "Executable Headers" nous allons maintenant examiner chaque champs. Afin d'alléger ce tutoriel, je ne vais énumérer que les champs à corriger. |
||||||||||||||||||||||||||||||||||
Signature PE |
||||||||||||||||||||||||||||||||||
Rien à signaler. | ||||||||||||||||||||||||||||||||||
En-tête de l'image |
||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
En-tête optionnelle |
||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
2. Les sections |
||||||||||||||||||||||||||||||||||
Nous
allons maintenant examiner les sections. Comme nous l'avons vu précédemment elles sont au nombre de 4. ![]() |
||||||||||||||||||||||||||||||||||
La section ".text" |
||||||||||||||||||||||||||||||||||
Cette fonction est celle qui contient le code du programme. Nous avons trois valeurs à retrouver : VirtualOffset, RawSize et RawOffset.
![]() |
||||||||||||||||||||||||||||||||||
3. La table des importations |
||||||||||||||||||||||||||||||||||
Dernière chose qu'il nous reste à faire, corriger l'Import Table. Dans Stud_PE, cliquez sur l'onglet "Functions". ![]() On s'aperçoit rapidement qu'il y a un problème : aucun modules, aucune fonctions. L'Import Table est un tableau dont la taille n'est pas fixe, mais qui se termine toujours par un élément vide. Le fait que Stud_PE ne trouve aucune entrée signifie donc que le première élément du tableau est vide. Ce tableau est situé dans la section ".rdata". ![]() Pour connaître l'emplacement et la taille de notre Import Table, nous allons consulter l'élément correspondant dans le Data_Directories. - Emplacement : 0x2010 (RVA) soit l'offset 00000610 - Taille : 0x3C Nous aurons également besoin de connaître l'emplacement de l'IAT - Emplacement : 0x2000 (RVA) soit l'offset 00000600 Ainsi que de l'ImageThunkData - Emplacement : adresse de l'Import Table + sa taille = 0x610 + 0x3C soit l'offset 0000064C Et enfin pour la Hint/Name Table - Emplacement : offset pointé par le 1er élément de l'ImageThunkData = 0x205C soit l'offset 0000065C
|
||||||||||||||||||||||||||||||||||