Bonjour tout le monde
Je suis un nouveau membre dans ce forum et j'espère passer des périodes agréables ici et surtout connaitre des gens passionnés par la sécurité informatique
Désolé pour mon Français, il me parait qu'il n'est pas parfait
Dans ce petit tutoriel je vais présenter une petite technique de récupération d'un mot de passe à partir d'un exécutable
L'exécutable écrit en C demande un mot de passe et vérifie si il est correct
Notre mission est de découvrir le mot de passe correct
voilà la source
Bien sur on ne dispose pas de ce code source
juste l'exécutable
Je vais utiliser Imuunity Debugger mais vous êtes libres à utiliser ce que vous voulez
Comment doit t on réfléchir ?
Avant de commencer le processus de reverse on doit poser la question "Que voulons bous faire ?"
Dans notre cas on désire savoir un mot de passe secret
Il ya plusieurs méthodes pour ce faire
On peut dégager toutes les chaines utilisées dans l'exécutable
On peut aussi considérer touts les appels modulaires qu'a fait l'exécutable et chercher la fonction qui compare 2 chaines
et par la suite voir les valeurs de la Stack juste après l'appel de cette fonction
On va suivre ce démarche
Chaque OS possède ses propres fonctions pour faire ses traitements
La bibliothèque Win32 API est développée par Microsoft et est destiné pour faire les traitements sous Windows
La fonction utilisée par Win32 API pour comparer 2 chaines est strcmp (NE PAS CONFONDRE avec strcmp en C)
On va chercher l'instruction d'appel de cette fonction dans notre exécutable et on va considérer l'état de l'exécutable juste après cet appel
On va débugger l'exécutable à partir ce cet appel
1.jpg
Voilà la liste des appels modulaires de cet exécutable
2.jpg
Voilà l'adresse de l'appel de strcmp
3.jpg
On clique sur F2 pour créer un point de départ et F9 pour démarrer l'exécutable
C'est à dire on va exécuter notre programme à partir de ce point ==> debugger
On remarque que l'exécutable s'ouvre et il nous invite à introduire un mot de passe pour que la strcmp la compare avec le vrai mot de passe
On introduit un mot qqe
Voilà les valeurs stockée dans la mémoire stack
Les paramétres des fonctions appelés sont chargés dans cette mémoire
la fonction strcmp prend 2 paramètres (la chaine introduite par l'utilisateur et le vrai mot de passe)
4.png
On en déduit que le mot de passe est "MyPassword!!"
Vous pouvez tester l'exécutable avec le mot de passe ainsi déduite
C'est tout pour aujourd'hui
Merci pour votre attention
S'il ya des questions n'hésitez pas à les poser
Je suis un nouveau membre dans ce forum et j'espère passer des périodes agréables ici et surtout connaitre des gens passionnés par la sécurité informatique
Désolé pour mon Français, il me parait qu'il n'est pas parfait
Dans ce petit tutoriel je vais présenter une petite technique de récupération d'un mot de passe à partir d'un exécutable
L'exécutable écrit en C demande un mot de passe et vérifie si il est correct
Notre mission est de découvrir le mot de passe correct
voilà la source
Code:
#include<stdio.h> #include<stdlib.h> #include<string.h> int main(void) { char *mystr=(char*)malloc(sizeof(char)*50),*mypass=(char*)malloc(sizeof(char)*50); strcpy(mypass,"MyPassword!!"); printf("[~] Please Enter your Password Here: "); fgets(mystr,49,stdin); if (!strcmp(strcat(mypass,"\n"),mystr) ) printf("\n\n[~] Right Password!\n\n"); else printf("\n\n[!] Wrong Password!\n\n"); system("PAUSE"); return 0; }
juste l'exécutable
Je vais utiliser Imuunity Debugger mais vous êtes libres à utiliser ce que vous voulez
Comment doit t on réfléchir ?
Avant de commencer le processus de reverse on doit poser la question "Que voulons bous faire ?"
Dans notre cas on désire savoir un mot de passe secret
Il ya plusieurs méthodes pour ce faire
On peut dégager toutes les chaines utilisées dans l'exécutable
On peut aussi considérer touts les appels modulaires qu'a fait l'exécutable et chercher la fonction qui compare 2 chaines
et par la suite voir les valeurs de la Stack juste après l'appel de cette fonction
On va suivre ce démarche
Chaque OS possède ses propres fonctions pour faire ses traitements
La bibliothèque Win32 API est développée par Microsoft et est destiné pour faire les traitements sous Windows
La fonction utilisée par Win32 API pour comparer 2 chaines est strcmp (NE PAS CONFONDRE avec strcmp en C)
On va chercher l'instruction d'appel de cette fonction dans notre exécutable et on va considérer l'état de l'exécutable juste après cet appel
On va débugger l'exécutable à partir ce cet appel
1.jpg
Voilà la liste des appels modulaires de cet exécutable
2.jpg
Voilà l'adresse de l'appel de strcmp
3.jpg
On clique sur F2 pour créer un point de départ et F9 pour démarrer l'exécutable
C'est à dire on va exécuter notre programme à partir de ce point ==> debugger
On remarque que l'exécutable s'ouvre et il nous invite à introduire un mot de passe pour que la strcmp la compare avec le vrai mot de passe
On introduit un mot qqe
Voilà les valeurs stockée dans la mémoire stack
Les paramétres des fonctions appelés sont chargés dans cette mémoire
la fonction strcmp prend 2 paramètres (la chaine introduite par l'utilisateur et le vrai mot de passe)
4.png
On en déduit que le mot de passe est "MyPassword!!"
Vous pouvez tester l'exécutable avec le mot de passe ainsi déduite
C'est tout pour aujourd'hui
Merci pour votre attention
S'il ya des questions n'hésitez pas à les poser
Commentaire