Cours n°8 : Cracker Teleport Pro
Objectif :
1°) Cracker le logiciel Teleport Pro
Niveau :
- Moyen
Ce qu'il vous faut :
- WinDasm (Voir page "Outils - Crack")
- Un éditeur hexadécimal comme HexDecCharEditor (Idem)
- Le logiciel Teleport Pro v.1.29.1820 (870 Ko)
- Ne pas être pressé.
C'est parti !
On va s’attaquer dans ce cours à un vrai logiciel. Il s’agit de Teleport Pro (version 1.29.1820). Ce programme est très intéressant à cracker, car il y a plusieurs éléments à modifier.
Tout d’abord on va modifier un truc pour éviter que vous vous énerviez, car le logiciel démarre seulement si l’exécutable se nomme « pro.exe » donc si vous voulez enregistrez sous un autre nom (ce que je vous conseille pour garder l’original et de toute façon vous ne pouvez pas enregistrer vos modifications sur le fichier qui est déjà ouvert avec WinDasm), vous seriez obliger de modifier le nom de l’original puis du programme cracké pour voir si ça marche. Ce qui est pénible à faire chaque fois.
Donc on va voir ce qu’il nous dit quand le nom du fichier n’est pas bon. On modifie donc « pro.exe » en « pro1.exe » par exemple et on le lance. Là un beau message, qu’on va s’empresser d’enlever, apparaît : “This program’s name have been changed; please rename…”.
On va donc dans WinDasm et on désassemble notre programme. On cherche ensuite notre message dans les Data Strings References et on double-clique dessus. Ce message a une seule référence.
:0040BE79
85C0 test eax, eax
:0040BE7B 59 pop ecx
:0040BE7C 7413 je 0040BE91
:0040BE7E 53 push ebx
:0040BE7F 53 push ebx
* Possible StringData Ref from Data Obj ->"This
program's name has been changed; "
En regardant au dessus du message on peut voir un “TEST” suivi d’un saut, ici “JE”. Il faut donc remplacer ce JE en JMP soit 74 par EB.
Pour trouver plus facilement l’emplacement de ce 74 dans l’éditeur hexadécimal, double-cliquez dans WinDasm sur la ligne du « « JE » et regardez en bas de l’écran dans la barre d’état : “Line:23454 Pg 273 of 2470 Code Data @ :0040BE7C @Offset 0000BE7Ch in File:pro.exe”
L’offset représente l’emplacement du “JE” et donc retenez le numéro qui est entre les « 0 » et le « h » qui signifie que c’est en hexadécimal. Donc ici : BE7C. Allez dans votre éditeur hexadécimal, ouvrez le fichier et pour « HexDecCharEditor » faîtes « Edit » à « Go to… » ou bien CTRL + T. Tapez dans la case hexadécimal « hex » BE7C et faîtes « Ok ». Vous arriverez directement sur notre 74 que cous changerez en EB.
Ce changement effectué, il faut voir si ça marche. Donc on lance le fichier modifié en lui mettant un autre nom que « pro.exe ». Et là il nous mets un nouveau message nous disant que le fichier a été altéré, peut-être par un virus… Ben forcément qu’il a été altéré, on vient de le modifier. Donc on recherche ce message dans WinDasm.
Vous pouvez dans ce dernier pour chercher une phrase faire « Search » à « Find Text » et tapez un morceau de la phrase comme par exemple « been altered » ou « by a virus ». Faîtes attention qu’il n’y en ait pas plusieurs.
:0040BECD
741C je 0040BEEB
:0040BECF A144D74700 mov eax, dword ptr [0047D744]
:0040BED4 3B30 cmp esi, dword ptr [eax]
:0040BED6 7413 je 0040BEEB
:0040BED8 53 push ebx
:0040BED9 53 push ebx
* Possible StringData Ref from Data Obj ->"This program has been altered, "
On peut voir deux “JE” avant le message se reportant au même endroit. Vous pouvez donc prendre celui que vous voulez et le remplacez par un JMP (EB en hexadécimal pour ceux qui ne le seraient pas encore).
Donc là on est enfin prêt.
Faîtes maintenant « Help » à « Register… ». On voit que le logiciel est limité à 40 utilisations. Bon alors sinon on fait comme d’habitude : nom, société et le code (bidon bien sûr). On clique sur « Ok » et là……… un message d’erreur qui dit que le code n’est pas bon. Ben oui, vous voulez que ça soit quoi d’autre ?
On fait une petite recherche dans WinDasm. Si vous avez du mal à trouver dans les Data String References (dans le haut de la liste) faîtes donc une recherche de texte (voir plus haut) avec « registration number » par exemple. Faîtes attention à ne pas faire de fautes en recopiant. Bon et donc on aperçoit notre beau message :
* Referenced by a
(U)nconditional or (C)onditional Jump at Address:
|:00427CBE(C)
|
:00427CF1 8945F0 mov dword ptr [ebp-10], eax
* Possible Reference to String Resource ID=07033: "We're sorry! The registration number you entered appears to"
Ce message est appelé par un saut conditionnel en 00427CBE, donc on se dirige vers cette adresse et on voit ceci :
* Referenced by a
(U)nconditional or (C)onditional Jump at Address:
|:00427C78(C)
|
:00427CB0 57 push edi
:00427CB1 E80F090000 call 004285C5
:00427CB6 85C0 test eax, eax
:00427CB8 A1ECF44700 mov eax, dword ptr [0047F4EC]
:00427CBD 59 pop ecx
:00427CBE 7531 jne 00427CF1
:00427CC0 8945F0 mov dword ptr [ebp-10], eax
* Possible Reference to String Resource ID=07032: "You haven't entered a valid username. Your username must be"
On tombe sur un « JNE » et on voit qu’il fait un test avant, donc on aurait tendance à dire qu’il faudrait le modifier. Mais regardez en dessous : « You haven’t entered a valid name ». Donc si on modifie ce saut on tombera sur ce message. On regarde alors encore au dessus du saut et on qu’il est appelé par un autre saut conditionnel. On y va :
* Referenced by a
(U)nconditional or (C)onditional Jump at Address:
|:00427C33(C)
|
:00427C6F 8BBFD5000000 mov edi, dword ptr [edi+000000D5]
:00427C75 395FF8 cmp dword ptr
[edi-08], ebx
:00427C78 7536 jne 00427CB0
:00427C7A A1ECF44700 mov eax, dword ptr [0047F4EC]
:00427C7F 8945F0 mov dword ptr [ebp-10], eax
* Possible Reference to String Resource ID=07031: "You must enter your username in the Name field, exactly as y"
Là on se retrouve dans le même cas. Si on modifie ce saut on tombera sur le message d’erreur qui se trouve en dessous du « JNE ». Ce saut est appelé par un autre saut. On n’en finit plus.
On arrive donc en 00427C33 :
:00427C2F
3945E8 cmp dword ptr [ebp-18],
eax
:00427C32 59 pop ecx
:00427C33 753A jne 00427C6F
:00427C35 A1ECF44700 mov eax, dword ptr [0047F4EC]
:00427C3A 8945F0 mov dword ptr [ebp-10], eax
* Possible Reference to String Resource ID=07026: "Thank you! Your copy of Teleport Pro is now registered. Al"
Et là que voit-on ? Un beau message nous disant qu’on est enregistré. On va donc nopper ce saut en remplaçant 753A par 9090 pour qu’il tombe toujours sur ce message. On modifie et bien sûr on essaye. Et là ça marche enfin !
Relancez le programme et regardez dans Help à About. Vous n’êtes plus enregistré ! Il suffit juste de retaper le code à chaque fois que vous lancez le logiciel. Mais bon… On va s’intéresser à la fenêtre d’About où l’on peut voir « This copy of Teleport Pro is UNREGISTERED ». On va donc chercher ce dernier mot dans WinDasm. On tombe ici :
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00416D9E(C)
|
:00416DD0 3898CD040000 cmp byte ptr [eax+000004CD], bl
:00416DD6 7430 je 00416E08
:00416DD8 894DF0 mov dword ptr [ebp-10], ecx
* Possible Reference to String Resource ID=07093: "This copy of Teleport Pro is UNREGISTERED."
Et un peu plus bas :
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00416DD6(C)
|
:00416E08 8B900D050000 mov edx, dword ptr [eax+0000050D]
:00416E0E 395AF8 cmp dword ptr [edx-08], ebx
:00416E11 7537 jne 00416E4A
:00416E13 8BB809050000 mov edi, dword ptr [eax+00000509]
:00416E19 894DF0 mov dword ptr [ebp-10], ecx
* Possible Reference to String Resource ID=07102: "Licensed to %s"
Donc on va modifier le “JE” (en 00416DD6) en JMP (EB) pour arriver tout le temps sur « Licensed to… ». Mais si on regarde au dessus du message de « UNREGISTERED ». Il y a :
:00416D9E
7430 je 00416DD0
:00416DA0 894DF0 mov dword ptr [ebp-10], ecx
* Possible Reference to String Resource ID=07076: "The free evaluation period for Teleport Pro has expired."
Ca c’est le message qu’il nous mettra passé les 40 utilisations. Donc on met un JMP à la place du JE, qui arrivera sur le JMP du 00416DD6 qui sautera lui à son tour vers « Licensed… ». Et voilà !