Leçon N°6 :Cracker un CD-Check |
Présenté par: geoffrx1 |
-Outils nécessaires : - Un désassembleur/débuggeur comme WinDasm v8.9. - Un éditeur hexadécimal HexDecCharEditor. - Le programme CD-Check. -Le but :Le but est de détourner la vérification du CD. -Allez Go :Alors voyons voir ce que nous dit ce cd-check, on l'ouvre et la, deux grosses cases avec "chek for CD" et "exit", ![]() on clique sur "check for CD" et on aura: ![]() Hum... bon on va le désassembler et dans les string data référence on cherche "Try again" : ![]() Double clique et on tombe ici: ![]() On voit donc que le message d'erreur est appellé par un saut conditionnel à l'adresse 00401352 et que au dessus du message d'erreur à l'adresse 0040138C, il y a un JE qui va directement au message de réussite donc, la suite est logique: On nop le le saut conditionnel qui appelle le message d'erreur et on tranforme le "JE" du message de réussite, soit en "JNE" soit en jump. -Le Crack : On prend l'éditeur hexadecimal (moi j'utilise HexDecChar Editor) on cherche l'offest* "1352",qui est l'adresse du saut conditionnel qui appelle le message d'erreur et on remplace le 743E par 9090, puis on va à l'offset "138C" qui est l'addresse du "JE" qui saute au message de réussite la il faut un peu de concentration: primo : le programme comparre "Bl" et "byte ptr [ebp-0D]", si ils ne sont pas égaux il continue vers la boite de dialogue "try again". l'astuce c'est d'affecter à "byte ptr [ebp-0D]" le contenu du registre "bl" , la forcément il sont égaux l'istruction qui permet ça est: mov byte ptr [ebp-0D], bl ![]() On remplacera alors dans la ligne :00401380 0F9445F3 sete byte ptr [ebp-0D] le "sete byte ptr [ebp-0D]" par "mov byte ptr [ebp-0D], bl" et un "nop" car "sete byte ptr [ebp-0D]" c'est 4 chars "0F 94 45 F3" tandis que "mov byte ptr [ebp-0D], bl" c'est que trois chars "88 5D F3" pourque le compte soit bon on ajoute le "90" du "nop". ![]() ![]() On quitte l'éditeur héxa et on sauvegarde, la on essaye maintenant on aura : ![]()
* L'offset: c'est l'adresse exacte d'une donnée dans l'assembleur. cliquez sur le "JE" du message de réussite, de manière à avoir la bande verte
au dessus dans l'assembleur. maintenent regarder tout en bas du programme et vous verrez une ligne où il est marqué:
Line:735 Pg 15 and 16 of 21 Code Data @:0010138C @ Offset 0000138Ch in file:crackme1.exe ![]() Regardez, il est marqué @ Offset 0000138Ch, et bien nous on utilise uniquement que les nombres compris entre les "0" et le "h" ce qui nous donne "138C". Pour aller à l'Offset, tout dépend maintenant de l'éditeur héxadécimal, moi j'utilise HexDecChartEditor et je dois faire Ctrl +T mais pour les autres j'en sais rien, mais le principal, c'est que vous ayez compris comment fonctione l'Offset. ![]() |