Memory et Hardware BreakpointPour ça on prend un crackme que j'ai codé en VB6:
https://www.dropbox.com/s/u64y765zl7vhudv/crackme.exeNos 3 techniques pour retrouver la vérification:
-Pause + mater la pile
-Text strings
-Breakpoint sur fonctions
En voilà une quatrième
On ouvre le prog dans OllyDBG.
Pas de text strings ni de fonctions intéressante.
On va déjà tester le programme pour voir.
On lance avec F9On entre un truc dedans, on appuie sur Go, ça se transforme en petit points avec le message
Bad.
On va donc essayer de mettre un breakpoint en mémoire.
Mettons
LOLlLOL pour tester:
http://image.noelshack.com/fichiers/2012/33/1344955132-1.pngOn appuie pas sur Go, et on va dans OllyDBG.
On clique sur le bouton M bleuCa affiche tous la mémoire adressée au processus.
On
clique droit tout en haut et on met Search:http://image.noelshack.com/fichiers/2012/33/1344955481-2.pngOn met alors
LOLlLOL dans le champs
ASCIIOn recherche.
Il va s'arrêter quelque part sur LOLlLOL.
On fait
clic droit dessus > Breakpoint > Memory, on write:
http://image.noelshack.com/fichiers/2012/33/1344955597-3.pngCela veut dire que quand le programme va écrire à cet endroit de la mémoire, le programme va s'arrêter !
On appuie sur
GoQuand LOLlLOL est remplacé par des points, le programme s'arrête.
On va voir
dans la pile.On descend jusqu'à retrouver un retour vers crackme.exe
On fait
clic droit dessus > Follow in disassembler:
http://image.noelshack.com/fichiers/2012/33/1344955667-4.pngCela nous permet d'arriver un peu après la vérif.
On va supprimer le memory breakpoint vu qu'on a trouvé le bon endroit.
Sur le dump hexa en bas à gauche,
Clic droit > Breakpoint > Remove memory breakpoint:
http://image.noelshack.com/fichiers/2012/33/1344955839-5.pngUn peu au dessus on voit un CMP et un JNZ.
On pose un breakpoint sur le CMP pour voir ce qu'il compare.Ca a l'air d'être des nombres, donc on va mettre
"12345" et appuyer sur GoCa s'arrête là:
http://image.noelshack.com/fichiers/2012/33/1344956000-6.pngIl compare 3039 à 7AFD.
3039 = 12345 en hexa
7AFD = 31485 en hexa
Le pass est donc 31485, il nous met Not Bad
http://image.noelshack.com/fichiers/2012/33/1344956186-7.pngLes hardware breakpoints sont similaires, sauf que:
-On a 4 hardware breakpoints
-Ils sont plus rapides (Car ils sont gérés directement par le CPU, d'où leur nom)
-Parfois il y a des protections contre certains breakpoints
Ici on à utilisé un breakpoint à l'écriture, il y a aussi des breakpoints à l'acces (Lecture) qui peuvent être utiles.