Leçon de cracking

par Sirius Black

Page précédente

Nous voilà donc de retour, n'hésitez pas à faire une pause entre ces 2 pages (attention à la surchauffe du cerveau). Si vos yeux commencent à fatiguer n'oubliez pas que vous pouvez changer la taille du texte avec votre navigateur (affichage>taille du texte dans explorer).

Maintenant qu'on a vu le théorique on va peut-être passer au pratique. J'aurais pu vous proposer le crack de winzip (je ferais ça une autre fois, j'ai déjà une version que je dois refaire) où bien de Easy Applet Builder (un logiciel nous aidant à faire des applets java) que j'ai cracké en moins de deux mins (je m'explique : souvent les logiciels demandent un login et un mot de pass, parfois le pass est calculé en fonction du login, dans EasyAppletBuilder il y a un pass qui marche pour tout le monde. Bref je désassemblait le logiciels puis je vois : possible StringData Ref...->"987456321" donc je note ce code au cas où puis finalement je le rentre et c'était le bon code. Si vous chargez cette démo sur internet le pass c'est 987456321 ou 789654123 je sais plus).

Bon là le logiciel auquel on va s'intéresser c'est HexWorkshop (un éditeur hexadécimal, ça tombe bien) j'ai mis du temps à trouver la faille (j'étais dans la bonne zone du prog mais je savais pas quoi changer). En gros j'ai mis un mois entre le moment où je l'ai désassemblé la première fois et le moment où je l'ai cracké. Donc je vous demanderait de bien respecter mon travail (laissez ma signature). Avant toute chose je tient à signaler que je suis moi même un newbie (3 logiciels à mon actif au 13 septembre 2001 à 19 heures 51 minutes et 12 secondes, heure où j'écris ces lignes) donc ne venez pas me demander de vous cracker tel ou tel logiciel (surtout ceux limités dans le temps, je cherche toujours). Sachez qu'il existe des sites proposant des cracks (de petits programmes qui vont modifier un logiciel à votre place), allez sur //astalavista.box.sk (je crois) puis rentrez le nom de votre logiciel, c'est aussi simple que ça. Mais c'est bien plus sympa de le faire soit-même.

Matériel utilisé :

Un PC (ça doit aussi être possible sur mac, suffit de trouver des softwares utiles), un désassembleur (moi c'est W32Dasm), un éditeur hexadécimal (moi c'est HexWorkshop) et le programme à cracker (c'est encore HexWorkshop)... à j'allais oublier, il faut des yeux pour voir, des mains avec au moins un doigt pour taper et cliquer sur la souris (vous tapez sur la clavier pas sur la souris, la pauvre bête ne vous a rien fait : ) ) et aussi un cerveau pour réfléchir et mémoriser.

Bon moi je vais faire une pause (il est maintenant 20 heures 2 mins et 11 secs il faut que je pense à manger) donc à tout à l'heure.

PAUSE

Ca y est je suis de retour (20 h 43), bon où qu'on en était... A oui, on avait fait le matos. Avant tout chose faite une copie de HWORKS32.EXE d'abord parce que si vous faites une connerie vous pouvez la corriger ensuite parce que vous pourrez pas éditer un programme qui est en train de fonctionner. Personellement je crée 2 répertoires dans le répertoire de hexworshop, un qui s'appelle original et un qui 'sappelle crack, je met une copie dans chacun et je modifie ensuite celui qui est dans le rep "crack". Quand j'ai cracké l'exe je le met à la place du vrai et je l'exécute, si ça marche c'est bon sinon je prend celui dans le rep "original" et je le met à la place des deux autres. Comme ça je suis sûr de ne pas faire d'erreurs. Je fait ça avec tous les soft que je cracke.

Une chose importante : vérifiez que l'exe n'est pas en lecture seul quand vous le modifierez avec HexWorkshop.

Bon d'abord on utilise le vrai HexWorkshop (on fait comme si on avait déjà un mot de passe) ; on l'ouvre, on clique sur Demonstration Version (à droite) (moi j'ai la version 2.53, 32 bits) il nous demande un sérial number, on en entre un bidon (moi je rentre toujours crack ou fucker) on clique sur Register et là il nous jette comme un malpropre : fenêtre appelée Registration Unsuccessful et message : "You have entered an invalid registration number et "Please confirm you entered a valid registration number...". On note ça sur un papier et on quitte le programme.

Ensuite on ouvre le désassembleur. Avec W32Dasm on fait Disassembleur>Open File to Disassemble>HWORKS32.EXE. Regardez un peu à quoi ressemble le langage asm histoire de vous faire une idée. D'abord vous verez les infos relatives au menu, cliquez sur les lampes de poches rouges (les boutonqs en haut) celles où il y a marqué Start et EP. Ca c'est du code assembleur.

Il faut que l'on retrouve dans le programme le message d'erreur, c'est notre point de départ. Parfois il suffit de cliquer sur Strn Ref (le bouton entouré de rouge).

Mais dans notre cas on trouvera rien de cette façon alors on peut faire soit Search>Find Text> et entrer "You have entered" sans mettre les guillemets bien sûr où aller à la page 1 (avec le bouton lampe de poche entouré de bleu) ça peut marcher.

Dans tous les cas on tombe sur une série de Name: DialogID_XXXX, # of Controls=XXX etc. On note ceux qui nous intéressent :

Name: DialogID_0064, # of Controls=009, Caption:"About Hex Workshop - Unregistered", ClassName:""
001 - ControlID:0412, Control Class:"STATIC" Control Text:"Hex Workshop Version 0.00"
002 - ControlID:0436, Control Class:"STATIC" Control Text:"16/32 Bit Version"
003 - ControlID:FFFF, Control Class:"STATIC" Control Text:"Copyright © 1995-97 BreakPoint Software, Inc."
004 - ControlID:FFFF, Control Class:"STATIC" Control Text:"&Serial Number:"
005 - ControlID:0404, Control Class:"EDIT" Control Text:""
006 - ControlID:03F6, Control Class:"BUTTON" Control Text:"&Register"
007 - ControlID:0001, Control Class:"BUTTON" Control Text:"&Exit"
008 - ControlID:0400, Control Class:"BUTTON" Control Text:"&Help"
009 - ControlID:FFFF, Control Class:"STATIC" Control Text:"E-Mail: info@bpsoft.com"

Name: DialogID_0071, # of Controls=010, Caption:"About Hex Workshop", ClassName:""
001 - ControlID:0412, Control Class:"STATIC" Control Text:"Hex Workshop Version 0.00"
002 - ControlID:0001, Control Class:"BUTTON" Control Text:"&OK"
003 - ControlID:FFFF, Control Class:"STATIC" Control Text:"Serial Number:"
004 - ControlID:FFFF, Control Class:"STATIC" Control Text:"User Name:"
005 - ControlID:0403, Control Class:"STATIC" Control Text:""
006 - ControlID:03FE, Control Class:"STATIC" Control Text:""
007 - ControlID:0436, Control Class:"STATIC" Control Text:"16/32 Bit Version"
008 - ControlID:FFFF, Control Class:"STATIC" Control Text:"Copyright © 1995-97 BreakPoint Software, Inc."
009 - ControlID:FFFF, Control Class:"STATIC" Control Text:"E-Mail: info@bpsoft.com"
010 - ControlID:FFFF, Control Class:"BUTTON" Control Text:""

Name: DialogID_0074, # of Controls=006, Caption:"Registration Successful", ClassName:""
001 - ControlID:FFFF, Control Class:"STATIC" Control Text:"Please enter your name and organization to complete the registration process."
002 - ControlID:FFFF, Control Class:"STATIC" Control Text:"&User Name:"
003 - ControlID:0403, Control Class:"EDIT" Control Text:""
004 - ControlID:FFFF, Control Class:"STATIC" Control Text:"&Organization:"
005 - ControlID:0407, Control Class:"EDIT" Control Text:""
006 - ControlID:0001, Control Class:"BUTTON" Control Text:"&OK"

Name: DialogID_0075, # of Controls=003, Caption:"Registration Unsuccessful", ClassName:""
001 - ControlID:FFFF, Control Class:"STATIC" Control Text:"You have entered an invalid registration number."
002 - ControlID:FFFF, Control Class:"STATIC" Control Text:"Please confirm you entered a valid registration number or contact BreakPoint S"
003 - ControlID:0001, Control Class:"BUTTON" Control Text:"&OK"

Name: DialogID_0078, # of Controls=002, Caption:"Registration Complete", ClassName:""
001 - ControlID:0001, Control Class:"BUTTON" Control Text:"&OK"
002 - ControlID:FFFF, Control Class:"STATIC" Control Text:"You are now a registered user of Hex Workshop. You will receive free minor up"

En fait le DialogID_0064 c'est la boîte dans lequel on a entré notre pass bidon, le 71 c'est la boîte qu'on aurait eu si on avait été enregistré, le 74 si on entre un bon pass, le 75 si on entre un mauvais pass et le 78 si le pass est bon et si on s'est enregistré (à travers le 74), je vois ça aux différents textes qui définissent chaque boîte.

On va s'intéresser au DialogID_0075 (le message d'erreur). On fait alors Search>Find Text>"DialogID_0075" (faites attention aux maj et minuscules) en faisant une recherche vers le bas du document. Il en trouve un à la ligne 17 774, on note l'adresse qui est proche :00409D63 et un autre à la ligne 69 712 (près de l'adresse :0042621D)

Encadré en rouge c'est une adresse, en bleu une instruction assembleur et en vert sa correspondance en hexadécimal.

Dans chacun des cas (y'en a que 2 on a de la chance) on remonte un peu jusqu'à tomber sur un "Referenced by a (U)nconditionnal or (C)onditionnal Jump at Address :" suivi d'une adresse, on les notes : 00426133 (C) et 00409C79 (C). Le (C) signifie qu'on a "sauté" jusque là par un saut (jump) effectué suite à une condition (C comme condition) . Le saut s'est produit aux adresses 00409C79 et 00426133. Alors on clique sur la lampe de poche cd Loc (code location) et on entre 409C79, on arrive ici :

:00409C75 837DEC00 cmp dword ptr [ebp-14], 00000000
:00409C79 0F8479000000 je 00409CF8

On s'apperçoit que la condition du saut est une comparaison entre dword ptr (ebp-14) et la valeur 0. Si dword ptr (ebp-14) est égal à 0 alors le saut est effectué (je = jump si égal) sinon il n'est pas effectué. On sait que si il est effectué le programme va nous afficher "You have entered an invalid..." donc il faudrait que ce saut n'ai pas lieu.

Etant donné que le programme nous envoie un message d'erreur c'est bien parce que dword ptr (ebp-14) est égal à 0. Si on le comparait à 1 alors le saut ne serait pas effectué car les valeurs ne correspondraient pas. On va donc modifier cette comparaison, pour cela on note l'offset en bas de la fenêtre de W32Dasm : 9075 (le h signifie hexadécimal) ainsi que le code hexadécimal écrit en noir : 837DEC00

Maintenant on refait l'opé avec l'adresse 00426133, là encore on a à faire à un

:0042612F 837DEC00 cmp dword ptr [ebp-14], 00000000
:00426133 0F8479000000 je 004261B2

De même on note l'offset : 2552F et le code hexa (c'est le même) : 837DEC00.

On va changer le "cmp dword ptr (ebp-14), 00000000" en "cmp dword ptr (ebp-14), 00000001" ce qui nous donnera en hexa : 83DEC01 à la place de 83DEC00.

Donc on quitte W32Dasm, on exécute HexWorkshop, on fait File>Open et on ouvre HWORKS32.EXE qui est dans le rep "crack" (il ne faut pas qu'il soit en lecture seule) puis on fait Edit>Goto et on entre l'offset 9075, on tombe sur le 837DEC00, on n'a plus qu'a le changer en 837DEC01 et de même en allant à l'offset 2552F. On sauve le prog (pas besoin de *.BAK car on a tout prévu) on quitte HexWorkshop, on remplace le vrai par celui qui se trouve dans "crack", on le relance, on clique sur Demonstration version, on entre un pass bidon et là MIRACLE !!! il ne nous affiche plus de message d'erreur, on entre alors un User Name et un Serial Number erroné et il les accepte ! On l'a cracké !!!

M'écrire : niicolas@caramail.com