Salutation !
Avant toutes choses j'aimerai éclaircir quelques points : ce tutoriel s’adresse à des débutants en reverse engineering et si vous avez des questions n'hésitez pas j'essaierai d'y répondre au plus vite (- de 24H).
Sur ce bon tuto !
Beaucoup de gens pensent que le Reverse Engineering est quelque chose de difficile, où il faut savoir décrypter parfaitement le langage ASM pour pouvoir ne serait ce que commencer à comprendre les agissements d'un programme … Que n'est ni !
Dans ce premier tutoriel (oui il y en aura donc d'autres) nous allons faire nos premier pas dans ce monde incroyable qu'est le reverse engineering, ici d'un PE (Portable Exécutable) … enfin d'un .exe Windows quoi !
Pour ce tutoriel je n'utiliserai qu'un outil très pratique qu'est un éditeur hexadécimal !
Personnellement j'utilise Ghex (sous Ubuntu) et Frhed sous Windows (ici je serait sous Ghex), tout deux sont à mon sens très bien et surtout gratuit mais libre à vous d'en n'utiliser d'autres.
Vous pouvez d’ailleurs utiliser un simple éditeur de texte mais bon c'est moi classe.
Nous prendrons pour exemple ici un utilitaire de test réseau, notre but sera de prouver uniquement à la lecture du fichier avec notre éditeur hexadécimal que notre exécutable utilise bien des fonctions réseaux.
Bon à l'attaque !
Commençons par ouvrir notre fichier avec notre éditeur hexadécimal et la … WTF ?!
cour-1.jpg
Ne partez pas tout de suite les choses vont commencer a être intéressantes !
Je vous rassure nous travaillerons uniquement grâce à la partie de droite.
Bon maintenant nous allons devoir commencer nos recherches …
Le fichier est un exécutable Windows qui utilise des fonctions réseau jetons un coup d’œil aux DLL réseaux de Windows : ils sont au nombre de deux (il y en a plus mais se sont les plus utilisé/important) : wsock32.dll et ws2_32.dll.
Très bien cherchons si ces DLLs sont mentionnés ici et magie :
cour-2.jpg
Petite astuce : le nom du dll peut être transcrit en hexadécimal de différentes manière, par exemple : « WS2_32.DLL », « ws2_32.DLL », « ws2_32.dll », « WS2_32.dll » ...
Donc n'abandonner pas vos recherches si vous ne trouvez pas du premier coup, essayez les diverses écritures comme dans les exemples ci-dessus.
Maintenant nous savons que l’exécutable charge une librairie dynamique pour utiliser des fonctions réseaux.
Voyons maintenant s'il utilise vraiment ces fonctions …
NB : 1) les fonctions des DLLs Windows ont, à quelques exception près les même nom que celle en C/C++. Par exemple la fonction de connection du DLL ws2_32.dll (et aussi de wsock32.dll) est connect(), comme en C/C++.
2) Pour connaître toutes les fonctions stockés dans un DLL il existe un très bon outil gratuit (uniquement pour Windows) qui se nomme Depends.
Nous pouvons ici voir diverses fonctions réseaux chargés comme par exemple : connect(), send(), closesocket() ...
cour-3.jpg
Nous pouvons donc affirmer que cet exécutable utilise bien des fonctions réseaux.
Mission Accomplie !!!
Alors c'était si compliqué que ca ?
HexaHacker
Avant toutes choses j'aimerai éclaircir quelques points : ce tutoriel s’adresse à des débutants en reverse engineering et si vous avez des questions n'hésitez pas j'essaierai d'y répondre au plus vite (- de 24H).
Sur ce bon tuto !
Beaucoup de gens pensent que le Reverse Engineering est quelque chose de difficile, où il faut savoir décrypter parfaitement le langage ASM pour pouvoir ne serait ce que commencer à comprendre les agissements d'un programme … Que n'est ni !
Dans ce premier tutoriel (oui il y en aura donc d'autres) nous allons faire nos premier pas dans ce monde incroyable qu'est le reverse engineering, ici d'un PE (Portable Exécutable) … enfin d'un .exe Windows quoi !
Pour ce tutoriel je n'utiliserai qu'un outil très pratique qu'est un éditeur hexadécimal !
Personnellement j'utilise Ghex (sous Ubuntu) et Frhed sous Windows (ici je serait sous Ghex), tout deux sont à mon sens très bien et surtout gratuit mais libre à vous d'en n'utiliser d'autres.
Vous pouvez d’ailleurs utiliser un simple éditeur de texte mais bon c'est moi classe.
Nous prendrons pour exemple ici un utilitaire de test réseau, notre but sera de prouver uniquement à la lecture du fichier avec notre éditeur hexadécimal que notre exécutable utilise bien des fonctions réseaux.
Bon à l'attaque !
Commençons par ouvrir notre fichier avec notre éditeur hexadécimal et la … WTF ?!
cour-1.jpg
Ne partez pas tout de suite les choses vont commencer a être intéressantes !
Je vous rassure nous travaillerons uniquement grâce à la partie de droite.
Bon maintenant nous allons devoir commencer nos recherches …
Le fichier est un exécutable Windows qui utilise des fonctions réseau jetons un coup d’œil aux DLL réseaux de Windows : ils sont au nombre de deux (il y en a plus mais se sont les plus utilisé/important) : wsock32.dll et ws2_32.dll.
Très bien cherchons si ces DLLs sont mentionnés ici et magie :
cour-2.jpg
Petite astuce : le nom du dll peut être transcrit en hexadécimal de différentes manière, par exemple : « WS2_32.DLL », « ws2_32.DLL », « ws2_32.dll », « WS2_32.dll » ...
Donc n'abandonner pas vos recherches si vous ne trouvez pas du premier coup, essayez les diverses écritures comme dans les exemples ci-dessus.
Maintenant nous savons que l’exécutable charge une librairie dynamique pour utiliser des fonctions réseaux.
Voyons maintenant s'il utilise vraiment ces fonctions …
NB : 1) les fonctions des DLLs Windows ont, à quelques exception près les même nom que celle en C/C++. Par exemple la fonction de connection du DLL ws2_32.dll (et aussi de wsock32.dll) est connect(), comme en C/C++.
2) Pour connaître toutes les fonctions stockés dans un DLL il existe un très bon outil gratuit (uniquement pour Windows) qui se nomme Depends.
Nous pouvons ici voir diverses fonctions réseaux chargés comme par exemple : connect(), send(), closesocket() ...
cour-3.jpg
Nous pouvons donc affirmer que cet exécutable utilise bien des fonctions réseaux.
Mission Accomplie !!!
Alors c'était si compliqué que ca ?
HexaHacker
Commentaire