(Introduction Reverse engineering sous Win32) by fr0g
En quoi consiste le reverse engineering, comme son nom l'indique (rétro-ingénierie),
le reverse engineering consiste à comprendre le fonctionnement d'un programme par rapport à soit :
1/ Son code source (dans le cas où on là)
2/ Son exécutable ...
Eh oui, ici c'est la deuxième solution que l'on va voir, de quoi avons nous besoin ? :
disons que rien n'est vraiment nécessaire, car ceci est un APERCU , et non pas un cours complet,
cet article ne vise qu'à vous donner un aperçu de ce en quoi consiste le reverse engineering .
Pour suivre le cours, on à besoin de :
- Notre reverse-me => Lien
- Ollydbg (désassembleur) => Lien
- Reshacker (ou on autre editeur de ressources) => Lien
- Et de préférence quelques connaissances en assembleur
Bon alors tout d'abord on lance notre reverse-me et on entre un sérial bidon,
le programme nous affiche un message "Wrong key".
Qu'allons nous faire ici ? celà est simple, quand nous rentrons un sérial invalide dans notre reverse-me: celui ci nous affiche "wrong key" , ce que nous allons faire , c'est repérer l'instruction qui affiche ce message et remplacer le message affiché par la variable contenant le sérial .
Bon allons y , nous allons ouvrir notre reverse me avec ResHacker , et parcourir les dossiers
RCData -> TFORM1, là il y a un fichier nommé "0" , cliquez dessus, et dans le grand cadre apparaissent les propriétés de
la fenêtre et des objets du reverse-me, descendez en bas de la liste et là vous verrez : OnClick = Button1Click .
A quoi est-ce que cela correspond ? Eh bien Button1Click est le nom de la fonction qui est appelée
quand on clique sur le bouton .
Vous pouvez fermer ResHacker, et ouvrez maintenant le reverse-me avec Ollydbg,
une fois désassemblé, faites un clic droit au milieu du code source (cadre en haut à gauche)
SearchFor > All refenced strings
Et là vont s'afficher toutes les chaines ASCII lisibles dans l'exécutable, tout en bas de la liste on voit apparaitre
"Wrong key", "good" & "easy" : le "good" vous l'aurez compris est le message qui s'affiche quand le sérial est valide .
Mais qu'est ce que ce "easy" ??? C'est notre serial ^^, mais le trouver n'est pas tout, ici nous devons le faire "ressortir".(Notez d'ailleurs qu'un sérial qui apparait dans les string data références est un cas EXTREMEMENT RARE, j'ai simplifié le cas pour l'exemple )
Double-cliquez maintenant sur la ligne de la chaine ASCII "Wrong key".
vous vous retrouvez dans le code source du programme .
Nous nous retrouvons donc sur la ligne 0045409f affichant le message d'erreur .
On voit que l'instruction en assembleur est MOV EAX,004540F0 , à quoi cela correspond ?
Pour faire simple, le programme va mettre le contenu de la ligne 004540F0 dans le registre "EAX".
et qu'y a t'il à la ligne 004540F0 ? ^^ je vous laisse regarder, il s'agit de notre message d'erreur .
Si vous regardez plus haut dans le code, c'est à la ligne 004540E0 qu'est déclarée la variable contenant notre sérial (je rappelle que le sérial est "easy" nous l'avons vu plus haut .
Pour faire ressortir notre sérial c'est simple, nous allons modifier la ligne 0045409F, double cliquez dessus, afin de l'éditer,
Et changer l'adresse du message d'erreur, par celle de la variable content le sérial appuyez sur "Assemble", ce qui donnera :
Maintenant, allez dans le menu "debug" en haut de Ollydbg, et cliquez sur "Run" (ou bien appuyez simplement sur F9).
Notre reverse-me se lance, on entre un sérial bidon, et là qu'est ce qui apparait ? ^^ le sérial valide ^^ , essayez ensuite d'entrer le sérial valide, et le programme vous affiche le message de réussite "Good" .
Article : Introduction au reverse engineering by fr0g .
En quoi consiste le reverse engineering, comme son nom l'indique (rétro-ingénierie),
le reverse engineering consiste à comprendre le fonctionnement d'un programme par rapport à soit :
1/ Son code source (dans le cas où on là)
2/ Son exécutable ...
Eh oui, ici c'est la deuxième solution que l'on va voir, de quoi avons nous besoin ? :
disons que rien n'est vraiment nécessaire, car ceci est un APERCU , et non pas un cours complet,
cet article ne vise qu'à vous donner un aperçu de ce en quoi consiste le reverse engineering .
Pour suivre le cours, on à besoin de :
- Notre reverse-me => Lien
- Ollydbg (désassembleur) => Lien
- Reshacker (ou on autre editeur de ressources) => Lien
- Et de préférence quelques connaissances en assembleur
Bon alors tout d'abord on lance notre reverse-me et on entre un sérial bidon,
le programme nous affiche un message "Wrong key".
Qu'allons nous faire ici ? celà est simple, quand nous rentrons un sérial invalide dans notre reverse-me: celui ci nous affiche "wrong key" , ce que nous allons faire , c'est repérer l'instruction qui affiche ce message et remplacer le message affiché par la variable contenant le sérial .
Bon allons y , nous allons ouvrir notre reverse me avec ResHacker , et parcourir les dossiers
RCData -> TFORM1, là il y a un fichier nommé "0" , cliquez dessus, et dans le grand cadre apparaissent les propriétés de
la fenêtre et des objets du reverse-me, descendez en bas de la liste et là vous verrez : OnClick = Button1Click .
A quoi est-ce que cela correspond ? Eh bien Button1Click est le nom de la fonction qui est appelée
quand on clique sur le bouton .
Vous pouvez fermer ResHacker, et ouvrez maintenant le reverse-me avec Ollydbg,
une fois désassemblé, faites un clic droit au milieu du code source (cadre en haut à gauche)
SearchFor > All refenced strings
Et là vont s'afficher toutes les chaines ASCII lisibles dans l'exécutable, tout en bas de la liste on voit apparaitre
"Wrong key", "good" & "easy" : le "good" vous l'aurez compris est le message qui s'affiche quand le sérial est valide .
Code:
004540E0 ASCII "easy" ASCII "easy" 004540F0 ASCII "Wrong key" ASCII "Wrong key" 00454104 ASCII "Good" ASCII "Good"
Mais qu'est ce que ce "easy" ??? C'est notre serial ^^, mais le trouver n'est pas tout, ici nous devons le faire "ressortir".(Notez d'ailleurs qu'un sérial qui apparait dans les string data références est un cas EXTREMEMENT RARE, j'ai simplifié le cas pour l'exemple )
Double-cliquez maintenant sur la ligne de la chaine ASCII "Wrong key".
vous vous retrouvez dans le code source du programme .
Code:
CPU Disasm Address Hex dump Command Comments 0045406F |. 64:8920 MOV DWORD PTR FS:[EAX],ESP ; Installs SE handler 4540CB 00454072 |. B8 007C4500 MOV EAX,OFFSET 00457C00 00454077 |. BA E0404500 MOV EDX,004540E0 ; ASCII "easy" 0045407C |. E8 EF01FBFF CALL 00404270 ; [reverse-me.00404270 00454081 |. 8D55 FC LEA EDX,[EBP-4] 00454084 |. 8B83 F8020000 MOV EAX,DWORD PTR DS:[EBX+2F8] 0045408A |. E8 81F0FDFF CALL 00433110 ; [reverse-me.00433110 0045408F |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 00454092 |. 8B15 007C4500 MOV EDX,DWORD PTR DS:[457C00] 00454098 |. E8 8B05FBFF CALL 00404628 ; [reverse-me.00404628 0045409D |. 74 0C JE SHORT 004540AB 0045409F |. B8 F0404500 MOV EAX,004540F0 ; ASCII "Wrong key" 004540A4 |. E8 8739FDFF CALL 00427A30 004540A9 |. EB 0A JMP SHORT 004540B5 004540AB |> B8 04414500 MOV EAX,00454104 ; ASCII "Good" 004540B0 |. E8 7B39FDFF CALL 00427A30 004540B5 |> 33C0 XOR EAX,EAX 004540B7 |. 5A POP EDX 004540B8 |. 59 POP ECX 004540B9 |. 59 POP ECX 004540BA |. 64:8910 MOV DWORD PTR FS:[EAX],EDX 004540BD |. 68 D2404500 PUSH 004540D2 004540C2 |> 8D45 FC LEA EAX,[EBP-4] 004540C5 |. E8 5201FBFF CALL 0040421C ; [reverse-me.0040421C 004540CA \. C3 RETN ; Jump to 4540D2 004540CB $^ E9 28FBFAFF JMP 00403BF8 ; SE handling routine 004540D0 .^ EB F0 JMP SHORT 004540C2 004540D2 /> 5B POP EBX 004540D3 |. 59 POP ECX 004540D4 |. 5D POP EBP 004540D5 \. C3 RETN 004540D6 00 DB 00 004540D7 00 DB 00 004540D8 . FFFFFFFF DD FFFFFFFF 004540DC . 04000000 DD 00000004 004540E0 . 65 61 73 79 ASCII "easy" ; ASCII "easy" 004540E4 00 DB 00 004540E5 00 DB 00 004540E6 00 DB 00 004540E7 00 DB 00 004540E8 . FFFFFFFF DD FFFFFFFF 004540EC . 09000000 DD 00000009 004540F0 . 57 72 6F 6E 6 ASCII "Wrong key" ; ASCII "Wrong key" 004540F9 00 DB 00 004540FA 00 DB 00 004540FB 00 DB 00 004540FC . FFFFFFFF DD FFFFFFFF 00454100 . 04000000 DD 00000004 00454104 . 47 6F 6F 64 ASCII "Good" ; ASCII "Good" 00454108 00 DB 00 00454109 00 DB 00 0045410A 00 DB 00 0045410B 00 DB 00
Nous nous retrouvons donc sur la ligne 0045409f affichant le message d'erreur .
Code:
0045409F |. B8 F0404500 MOV EAX,004540F0 ; ASCII "Wrong key"
On voit que l'instruction en assembleur est MOV EAX,004540F0 , à quoi cela correspond ?
Pour faire simple, le programme va mettre le contenu de la ligne 004540F0 dans le registre "EAX".
et qu'y a t'il à la ligne 004540F0 ? ^^ je vous laisse regarder, il s'agit de notre message d'erreur .
Code:
004540F0 . 57 72 6F 6E 6 ASCII "Wrong key" ; ASCII "Wrong key"
Si vous regardez plus haut dans le code, c'est à la ligne 004540E0 qu'est déclarée la variable contenant notre sérial (je rappelle que le sérial est "easy" nous l'avons vu plus haut .
Pour faire ressortir notre sérial c'est simple, nous allons modifier la ligne 0045409F, double cliquez dessus, afin de l'éditer,
Et changer l'adresse du message d'erreur, par celle de la variable content le sérial appuyez sur "Assemble", ce qui donnera :
Code:
0045409F B8 E0404500 MOV EAX,004540E0 ; ASCII "easy"
Maintenant, allez dans le menu "debug" en haut de Ollydbg, et cliquez sur "Run" (ou bien appuyez simplement sur F9).
Notre reverse-me se lance, on entre un sérial bidon, et là qu'est ce qui apparait ? ^^ le sérial valide ^^ , essayez ensuite d'entrer le sérial valide, et le programme vous affiche le message de réussite "Good" .
Article : Introduction au reverse engineering by fr0g .
Commentaire