Titre: Cracking: Memory et Hardware Breakpoint Posté par: Lascazas le 13 Juillet 2015 à 20:16:38 Memory et Hardware Breakpoint
Pour ça on prend un crackme que j'ai codé en VB6: https://www.dropbox.com/s/u64y765zl7vhudv/crackme.exe Nos 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 F9 On 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.png (http://image.noelshack.com/fichiers/2012/33/1344955132-1.png) On appuie pas sur Go, et on va dans OllyDBG. On clique sur le bouton M bleu Ca 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.png (http://image.noelshack.com/fichiers/2012/33/1344955481-2.png) On met alors LOLlLOL dans le champs ASCII On 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.png (http://image.noelshack.com/fichiers/2012/33/1344955597-3.png) Cela veut dire que quand le programme va écrire à cet endroit de la mémoire, le programme va s'arrêter ! On appuie sur Go Quand 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.png (http://image.noelshack.com/fichiers/2012/33/1344955667-4.png) Cela 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.png (http://image.noelshack.com/fichiers/2012/33/1344955839-5.png) Un 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 Go Ca s'arrête là: http://image.noelshack.com/fichiers/2012/33/1344956000-6.png (http://image.noelshack.com/fichiers/2012/33/1344956000-6.png) Il 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.png (http://image.noelshack.com/fichiers/2012/33/1344956186-7.png) Les 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. |