• STATISTIQUES
  • Il y a eu un total de 1 membres et 15825 visiteurs sur le site dans les dernières 24h pour un total de 15 826 personnes!


    Membres: 2 433
    Discussions: 3 585
    Messages: 32 831
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] PHP Débutant
    Apprendre le PHP par l'exemple, facilement et simplement. Réservé d'abord aux débutants....
    Programmation
    [FR] Hackfest
    Le Hackfest est un évènement de sécurité et de piratage informatique au Québec reg...
    Hacking
    [FR] Infomirmo
    Challenge présenté sous la forme de 6 niveaux de difficultés diverses et variées avec chacun plusieurs chall...
    Challenges
    [FR] Root-me
    Script: 5, Système: 20, Cracking: 16, Cryptanalyse: 17, Programmation: 8, Réaliste: 11, Réseau: 10, Stéganog...
    Challenges
    [EN] Sabre Films
    Site de challenge présenté sous la forme d'une quête. Vous êtes un détective et devrez résoudre d...
    Challenges
    [EN] phrack
    Lot's of stuff !
    Hacking
    [EN] Lost-chall
    Site de challenge présenté sous la forme de différente saison. Pour passer une saison vous devez avoir accumulÃ...
    Challenges

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!

    €



Introduction au reverse engineering sous Win32

[SIZE="4"](Introduction Reverse engineering sous Win32) by fr0g[/SIZE]

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".


[Image: 18452218873572_screen.png]

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 .

[Image: 5220963711414_screen2.png]

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"

[Image: 7000694140572_screen3.png]


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" .

[Image: 14852585242935_screen4.png]

[Image: 20980988491320_screen5.png]

Article : Introduction au reverse engineering by fr0g .
26-09-2011, 05h38
Message : #1
CyberSee Hors ligne
Admin fondateur de N-PN
*******



Messages : 1,721
Sujets : 287
Points: 158
Inscription : Jan 2012
Introduction au reverse engineering sous Win32
Un autre très bon tuto :-) Bravo fr0g! rep +20!
26-09-2011, 08h32
Message : #2
ark Hors ligne
Psyckomodo!
*****



Messages : 1,033
Sujets : 48
Points: 317
Inscription : Sep 2011
Introduction au reverse engineering sous Win32
Sympa ta technique pour qu'il l'affiche lui même, dommage que ça soit rarement aussi simple ! ^^
26-09-2011, 19h38
Message : #3
fr0g Hors ligne
NTEuNDI2MzcsLTEuNzc4NDg4
*****



Messages : 348
Sujets : 22
Points: 56
Inscription : Aug 2011
Introduction au reverse engineering sous Win32
_Ark_ > c'est pour ça qu'il faut s'adapter à la structure du logiciel pour en tirer à peu près ce que l'on veut Smile
27-09-2011, 21h39 (Modification du message : 22-10-2011, 16h09 par Di0Sasm.)
Message : #4
ark Hors ligne
Psyckomodo!
*****



Messages : 1,033
Sujets : 48
Points: 317
Inscription : Sep 2011
Introduction au reverse engineering sous Win32
Okay. Et c'est possible, si on manque de place de mettre juste un jmp et d'écrire notre code à la fin du prog sur les null bytes, puis revenir par un autre jmp ?
10-10-2011, 23h26
Message : #5
fr0g Hors ligne
NTEuNDI2MzcsLTEuNzc4NDg4
*****



Messages : 348
Sujets : 22
Points: 56
Inscription : Aug 2011
Introduction au reverse engineering sous Win32
Oulah, désolé pour le temps de réponse , je n'étais pas revenu sur le topic depuis un moment, bah personnellement je n'ai jamais procédé de la sorte, mais oui, je suppose que c'est bien possible évidemment, je ne voit pas tellement ce qui pourrais t'en empêcher, en théorie ça devrais fonctionner (et en pratique aussi je pense si tu te débrouilles ^^)
11-10-2011, 02h01
Message : #6
Xylitol Hors ligne
Membre
*



Messages : 34
Sujets : 3
Points: 11
Inscription : Sep 2011
Introduction au reverse engineering sous Win32
_Ark_ a écrit :Okay. Et c'est possible, si on manque de place de mettre juste un jmp et d'ecrire notre code a la fin du prog sur les null bytes, puis revenir par un autre jmp ?

[ame]http://www.youtube.com/watch?v=ZJEDphDdu7M[/ame]
720p fullscreen dude.

j'ai fais cette vidéo ya un petit moment déjà.
11-10-2011, 11h50
Message : #7
naab Hors ligne
Newbie
*



Messages : 9
Sujets : 1
Points: 0
Inscription : Oct 2011
Introduction au reverse engineering sous Win32
_Ark_ a écrit :Okay. Et c'est possible, si on manque de place de mettre juste un jmp et d'ecrire notre code a la fin du prog sur les null bytes, puis revenir par un autre jmp ?


On pourrait aussi citer deamoncrack :
http://deamonftp.free.fr/deamoncrack/Pages/cours16.htm

Il rajoute un bruteforce sur les bytes de libre et fait sauter dessus pour que le crackme se pete tout seul.

Vieux mais toujours tres bon article.