Crackme Nag Screen Synapsus par Kharneth | |||
---|---|---|---|
Outils utilisés | Public | Cible | |
- OllyDbg 1.09d - Papier, Crayon, Cerveau 5.0 | Débutant avancé en Cracking ayant de bonnes connaissances en programmation | CrackMe.exe | |
1 - Introduction | |||
Il faut supprimer la MessageBox qui apparait au démarrage du programme. | |||
2 - OllyDbg | |||
Donc je charge le crackme sous OllyDbg. D'abord, je regarde un peu le code pour voir comment le programme est construit. Où se trouve la boucle de gestion des messages, la WNDProc(), la création de la fenêtre... On remarque toute une partie de code non interprétée par Olly. Pour y voir plus clair, il suffit de faire un click droit puis Binary Copy et Binary Paste. En traçant pas à pas et avec shift F8 pour passer les exceptions, on remarque que cette routine ainsi que le code décrypté précédemment sont là pour décrypter le début de la WNDProc() correspondant à la gestion du message WM_CREATE. Pour ne pas me prendre la tête, je désactive la gestion des exceptions dans les debugging options.
Je pose un BP sur CreateWindowExA puis relance le programme pour continuer tranquillement mon étude. Mais là je ne comprend pas pourquoi, le programme plante avant d'arriver sur le BP. Pourtant lorsque je l'ai tracé pas à pas, je n'ai trouvé qu'une seule exception. Je ne cherche pas plus à comprendre la suite du code qui n'est surement là que pour nous embrouiller. D'ailleurs en regardant le début de la WNDProc(), on s'aperçoit que seul le code après 4016FD est décrypté. Le CALL juste avant le jmp extrait une image des ressources: En étudiant le programme, on remarque dans la fenêtre de dump plusieurs chaines décryptées au fur et à mesure. Entre autres les chaines de la MsgBox mais surtout 2 apis importantes MessageBoxA et ShowWindow.
On en conclue que cette grande partie de code dans WM_CREATE charge l'image, affiche la MsgBox puis affiche la fenêtre. Donc il faut trouver comment contourner tout ce code. Par exemple en recodant l'évènement WM_CREATE. | |||
3 - Patch | |||
Je modifie donc en 4016FD le JMP 00402306 pour qu'il sorte de la fonction WNDProc(). Ainsi toute la partie cryptée du code est sautée! Seulement c'est un long JMP donc utilisant 5 octets et non 2. Ce code étant décrypté au début, cela va poser quelques problèmes... Donc je vais également sauter la partie qui décrypte en modifiant le JMP en 40156D pour qu'il saute en 401645 juste après la 1ere exception.
Enfin, je modifie le style de CreateWindowExA en WM_POPUP or WM_VISIBLE or WM_SYSMENU (PUSH 90080000). | |||
Kharneth | |||
The snake is long, seven miles Ride the snake...he's old, and his skin is cold | |||