NewbieContest

Général => Proposition de tutoriaux => Discussion démarrée par: Lascazas le 12 Juillet 2015 à 20:40:04



Titre: Cracking level 3 : Cracker un prog + keygen
Posté par: Lascazas le 12 Juillet 2015 à 20:40:04
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.png (http://image.noelshack.com/fichiers/2012/31/1343831399-0.png)

On 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 loIilol
http://image.noelshack.com/fichiers/2012/31/1343831569-1.png (http://image.noelshack.com/fichiers/2012/31/1343831569-1.png)
Là 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 disassembler
On 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.png (http://image.noelshack.com/fichiers/2012/31/1343831923-2.png)
Juste au dessus on voit un JE, qui mène au Invalid registration
C'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.png (http://image.noelshack.com/fichiers/2012/31/1343832712-3.png)

Les paramètres de la fonction sont placés dans EAX et EDX
EAX = CTW303337-4563686F
EDX = loIilol

Donc de toute évidence, le sérial pour Echo est CTW303337-4563686F
Notez 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 executable

Petit 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.png (http://image.noelshack.com/fichiers/2012/31/1343833600-4.png)

En 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.00487524
Qui 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.png (http://image.noelshack.com/fichiers/2012/31/1343835237-5.png)
On 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.png (http://image.noelshack.com/fichiers/2012/31/1343835275-6.png)

Bon, je pense qu'on a assez maltraité Tetris pour cette fois :)