Titre: Cracking: Breakpoint sur fonction Posté par: Lascazas le 13 Juillet 2015 à 19:59:58 Les 2 techniques les plus basiques pour cracker un programme sont:
-Regarder les text strings -Mater les appels dans la pile Je vous en propose une troisième: Mettre des breakpoint sur des fonctions spécifiques Le prog, un crackme que je vous ai codé (code source à la fin) : https://www.dropbox.com/s/u64y765zl7vhudv/crackme.exe C'est du 100% ligne de commande, il prend le mot de passe en argument dans la ligne de commande. Donc soit vous ouvrez avec cmd.exe etc, soit vous créez un .bat à coté avec dedans: Code: crackme.exe password Donc, on ouvre dans ollydbg, on va lui mettre un argument avec ce menu, on met 123456789 pour tester: http://image.noelshack.com/fichiers/2012/33/1344872852-0.png (http://image.noelshack.com/fichiers/2012/33/1344872852-0.png) Une fois que c'est fait, il faut relancer avec le bouton ou CTRL+F2 Pour tenter l'approche classique, on cherche les text strings et... Fail: http://image.noelshack.com/fichiers/2012/33/1344872989-00.png (http://image.noelshack.com/fichiers/2012/33/1344872989-00.png) Il va falloir trouver une autre solution. Cette solution sera de s'arrêter sur des fonctions qu'on suspecte de jouer un rôle dans la vérif du serial. Donc on va aller cliquer sur le bouton E bleu On voit les modules chargés, on fait clic droit sur crackme > View names Ca nous affiche toutes les fonctions utilisées par le programme: http://image.noelshack.com/fichiers/2012/33/1344873096-1.png (http://image.noelshack.com/fichiers/2012/33/1344873096-1.png) Rien de très flagrant, à part memcmp, qui pourrait servir à comparer des données en mémoire. On fait donc clic droit dessus, set breakpoint on every reference Le programme va s'arrêter à l'appel de memcmp, ce qui nous permettra d'analyser ce qui se passe. Donc on lance avec F9, et on regarde la pile quand ça s'arrête: http://image.noelshack.com/fichiers/2012/33/1344873219-2.png (http://image.noelshack.com/fichiers/2012/33/1344873219-2.png) Voilà les paramètres de memcmp. s1, s2 et n. n c'est le nombre de caractères à comparer, ici 10. s1 et s2 ce sont les chaines comparées. On fait clic droit sur s1 > Follow in dump: http://image.noelshack.com/fichiers/2012/33/1344873557-3.png (http://image.noelshack.com/fichiers/2012/33/1344873557-3.png) Ca nous permet de voir les données brutes de s1. "01 02 03 04 05 06 07 08 09"...Tiens, c'est le 123456789 qu'on a entré =D On fait clic droit sur s2 > Follow in dump: http://image.noelshack.com/fichiers/2012/33/1344873664-4.png (http://image.noelshack.com/fichiers/2012/33/1344873664-4.png) 01 07 05 04 06 03 02 09 08 08 Donc en fait le pass est 1754632988 ... http://image.noelshack.com/fichiers/2012/33/1344873765-7.png (http://image.noelshack.com/fichiers/2012/33/1344873765-7.png) Voilà ! Le code source du programme était: Code: #include <stdio.h> |