jeudi 5 novembre 2015

Récupérer un mot de passe à partir d'un exécutable

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

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;
}

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
Images jointes


from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1MkKgki
via IFTTT

Aucun commentaire:

Enregistrer un commentaire