Suite du Level 2 avec toujours le même programme
tetris, qui est donc déjà unpacké.
Donc, on l'ouvre dans OllyDBG, on lance avec F9.
Pour le nom de Registration, on met par exemple Echo, et pass=loIilol
On met "Register now" et le message d'erreur apparait:
http://image.noelshack.com/fichiers/2012/31/1343831399-0.pngOn ne le
ferme pas, et on va mettre pause dans OllyDBG (un bouton en haut à gauche)
La on va aller voir dans la pile (en bas à droite) les appels qui ont été fait.
On descend pas mal, jusqu'à retrouver
Echo et loIilolhttp://image.noelshack.com/fichiers/2012/31/1343831569-1.pngLà on voit deux choses:
0012F400 |00AAE8A4 ASCII "loIilol"
0012F404 |00AB12A8 ASCII "Echo"
0012F408 |00AB12BC ASCII "4563686F""4563686F" ça a bien la gueule d'un serial ça, mais vous verrez qu'il manque un truc, va falloir chercher plus loin !
Et aussi:
0012F3C4 |004872B0 RETURN to Tetris2.004872B0 from <JMP.&User32.MessageBoxA>Ca doit revenir à l'adresse 004872B0 après l'appel à la MessageBox qui nous dis que le serial est invalide.
Donc on fait clic droit dessus
> Follow in disassemblerOn arrive donc à côté du invalid registration, on remonte un peu dans le code, et on voit...
"Registration Success!"http://image.noelshack.com/fichiers/2012/31/1343831923-2.pngJuste au dessus on voit un
JE, qui mène au
Invalid registrationC'est donc là qu'est la vérification du programme.
Pour voir un peu ce qui se passe, on pose un breakpoint sur le
CALL en 4870B5 juste avant le JE, ça doit être la fonction de vérification.
Une fois le breakpoint posé, on relance le programme avec F9, et on remet Echo et loIilol, on essaye de Register.
Ca s'arrête là:
http://image.noelshack.com/fichiers/2012/31/1343832712-3.pngLes paramètres de la fonction sont placés dans EAX et EDX
EAX =
CTW303337-4563686FEDX =
loIilolDonc de toute évidence,
le sérial pour Echo est CTW303337-4563686FNotez que le truc est simple, 4563686F c'est juste "Echo" en hexadecimal.
Pour le patcher pour qu'il mette OK pour n'importe quel serial, il suffit de
remplacer le JE par JNZ ou NOP, et d'enregistrer avec
Clic droit > copy to executablePetit bonus, on va transformer le programme en
Keygen, c'est déjà un peu
plus compliquéIl ne faut pas avoir modifié le JE, donc prenez une version vierge ou n'y touchez pas.
On regarde là où y'avait notre breakpoint.
Le serial correct est mis dans EAX avec
004870B2 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]Donc le serial est à l'adresse SS:[EBP-14]
(SS veut dire Stack Segment)
On regarde juste avant le message Invalid:
http://image.noelshack.com/fichiers/2012/31/1343833600-4.pngEn fait le serial est supprimé de la mémoire direct après pour qu'on puisse pas le retrouver !
Donc tout à fait à l'arrache,
on va mettre NOP à la place des 4 CALLs qui suppriment le serial
Et à la place de :
0048729D 68 24754800 PUSH Tetris2.00487524Qui met "Please make sure the registration...", on double clique dessus et on met:
PUSH DWORD PTR SS:[EBP-14]Ce qui devrait donner ça:
http://image.noelshack.com/fichiers/2012/31/1343835237-5.pngOn laisse comme ça et on enregistre avec Copy to executable, Tetris3.exe
Maintenant, en entrant un nom et en mettant n'importe quoi comme serial, au lieu de nous dire "Please make sure..." quand le serial n'est pas bon, il fait le keygen et nous donne le bon serial:
http://image.noelshack.com/fichiers/2012/31/1343835275-6.pngBon, je pense qu'on a assez maltraité Tetris pour cette fois
