Cours de Crack #1
par Frog's Print - Juin 1997
SUJET
- Introduction au Cracking - 1ère Partie
- Désassembler un fichier pour le craquer
- Conseils et Documentations
EXEMPLE
- ComSpeed 2.01
OUTILS
- W32Dasm6 (ou W32Dasm85) et une cervelle
Index
- INTRODUCTION
- EXECUTION DU CRACK
- CONSEILS
- LIVRES
1/ INTRODUCTION
Ce premier cours, destiné avant tout aux débutants, va vous donner quelques notions sur le cracking. Si vous ne connaissez pas grand chose à l'Assembleur, ce n'est pas bien grave puisque je ne vais pas trop vous faire de bourrage de crâne sur ce sujet (pas encore...:=)
mais je vous conseil de vous munir d'un livre (voir section "4/LIVRES" plus bas) sur ce langage puisqu'il vous sera quand même nécessaire de connaitre la différence entre un "Jmp", "Jz', "Jnz" et autres "Jae".
Mais rassurez-vous, nous allons surtout utiliser la logique et notre cervelle ce qui suffira pour craquer environ la moitié des softs de votre disque dur.
Nous allons craquer ComSpeed 2.01 (53,750 Ko) pour Win 3.X et Win95.
ComSpeed est disponible entre autre sur la page web de son auteur: (http://ourworld.compuserve.com/homepages/Cordes/). A l'heure ou je rédige ce cours, on ne trouve plus cette version mais la version 2.11.
Ce n'est pas grave le schéma de protection est EXACTEMENT le même donc dès que vous aurez bien assimilé ce cours vous n'aurez qu'a vous faire la main sur la dernière version.
Après tout, vous êtes ici pour apprendre pas pour piquer les cracks des autres et y mettre votre nom, hein?
ComSpeed est un petit programme qui vous montre les performances de votre modem.
Il a deux types de protections (en fait il en a 3 mais nous verrons cela plus loin..:-):
- Il est limité dans le temps à 120 jours d'utilisation.
- Il est protégé par un mot de passe qui permet son débridage.
Il existe 2 méthodes pour craquer un programme:
- "Live Approach"
- "Dead Listing"
1/ "Live Approach" consiste à deboguer le programme (l'exécuter pas à pas) avec un debugger. (comment ne pas nommer ici SoftIce 3.01) en posant des Breakpoints et en le traçant.
Cette méthode est tout particulièrement adaptée aux programmes nécessitants un mot. de passe (comme ComSpeed) ou ayant un "NagScreen".
2/ "Dead Listing" consiste a désassembler le programme et a chercher dans le listing le schéma de protection pour le modifier à son gré. Cette méthode est assez formidable pour peu que vous connaissiez un peu l'Assembleur. Vous pourrez modifier le programme, lui faire faire ce que VOUS voulez! Cette méthode s'applique très bien aux programmes nécessitants un mot de passe mais aussi et surtout aux "Démos" bridées qui ne vous permettent pas de sauvegarder un fichier, de l'imprimer, ou bien limitées dans le temps ou avec un "nagscreen"...
Cette méthode peut paraitre assez effrayante aux yeux des débutants en raison de la taille importante du listing obtenu de certains programmes Windows (désassembler la démo de Quark XPress donne un fichier de plus de 50 Mo que même Word6 n'arrivera pas a ouvrir :-)
Cependant, les schémas de protections sont souvent situés dans une toute petite zone du programme presque toujours facilement localisable et n'en sortent que très rarement en raison de la limitation des registres du CPU.
Bien sur, pour de meilleurs résultats, la combinaison de ces deux méthodes ne peut etre que bénéfique.
Comme ComSpeed ne fait que 53 Ko, nous utiliserons le "Dead Listing". De plus, il n'existe pratiquement pas de cours en Français sur cette technique.
Nous avons besoin pour ce crack de W32Dasm6 (ou W32Dasm85).
N'utilisez PAS W32Dasm7 ou W32Dasm8!!!!
J'utilise ici W32Dasm6 parce que suivant le programme que vous avez a désassembler (16bits ou 32bits...), si vous utilisez differentes versions de W32Dasm vous n'obtiendrez JAMAIS le même résultat.
Si vous désassemblez ComSpeed avec W32Dasm6 vous obtiendrez beaucoup de 'String Datas References' (cf ci-dessous), tandis que vous n'en n'obtiendrez AUCUNES avec W32Dasm7 ou 8.
De plus W32Dasm n'est pas un très bon désassembleur et même son schéma de protection est ridicule. Je vous expliquerai très prochainement comment le craquer.
Bon assez de bla-bla, place au boulot:
2/ EXECUTION DU CRACK
Lancez W32Dasm6 et ouvrez CompSpeed.
Nous allons rechercher le maximum d'infos. Ce sont essentiellements des chaines de caractères (les 'String Datas References' dont je vous parlait ci-dessus) contenants les mots du genre "Enter Your PassWord", "Wrong Password", "PassWord IS correct", "You are using this program for xxxx days"....Trouver ces mots est avant tout l'essence même du 'Dead Listing'.
Appuyez dans la barre à outils sur le button 'string Datas References'.
On trouve, entre autres, dans la liste qui s'affiche:
CodeFalse_
CodeOk_
N'est-ce pas déjà merveilleux!
On a presque tout ici, la routine qui s'execute quand le mot de passe est correct (CodeOK_) et celle du mauvais mot de passe.
Plus bas dans la liste on trouve aussi:
VIRUS_
(ça, nous verrons plus loin...:-).
On a assez d'informations pour commencer le crack.
Cliquez sur 'CodeOK_' et W32Dasm vous envoie directement à cette routine qui commence à l'adresse 0011.0271. Juste après, on trouve la procédure CodeFalse_ en 0011.02A4.
Jettons un oeil sur "CodeOk_":
:0011.0262 9AFFFF0000 call 0012.02E5h
:0011.0267 08C0 or al , al
:0011.0269 7433 je 029E ;< Excellent
:0011.026B FF76F0 push word ptr [bp+F0]
:0011.026E FF76EE push word ptr [bp+EE]
* Possible StringData Ref from Data Seg 017 ->"CODEOK_%s" ;< **ICI**
:0011.0271 BFF104 mov di, 04F1
:0011.0274 1E push ds
On trouve un joli saut conditionnel (je 029E) qui nous enverra sur la procedure "CodeFALSE_" si le mot de passe est incorrect.
On le change:
:0011.0269 7533 jne 029E
Maintenant le programme ira sur "CodeOK_" quand le mot de passe sera faux.
Lancez ComSpeed après cette modification faite avec un éditeur hexadécimal: Le programme refuse de démarrer et vous dit: "The .exe file has been modified! That can be a Virus...".
Vous vous souvenez de "VIRUS_" que nous avions trouvé dans la liste des 'String References Datas'??
C'est un CheckSum. Le programme additionne les bytes et vérifie le résultat.
Facile a contourner:
Nous avons changé un 74 (je) par un 75 (jne) donc nous allons modifier le 33 qui le suit:
Nous avions:
:0011.0269 7533
On le change avec:
:0011.0269 7532
Au départ nous avions 74+33 et maintenant 75+32: ça donne le même résultat. On se fiche pas mal de modifier l'adresse du saut puis le programme n'exécutera jamais ce saut (sauf si vous entrez le bon mot de passe)
Après, on relance ComSpeed: Ca marche.
Essayez de vous enregistrer (Shareware/Enter Code...). Entrez votre nom et n'importe quel mot de passe puis appuyez sur OK. Là encore, ça marche.
Maintenant quittez ComSpeed puis relancez-le: Il n'est plus enregistré.
En fait nous ne nous sommes débarassé que de la procédure de vérification du mot de passe entré au clavier. Le progamme vérifie au démarrage le mot de passe (qu'il lit dans ComSpeed.ini) avec le bon mot de passe.
Etait-ce donc nécessaire de craquer cette partie? Non, mais ça ne nous a pris que 5mn et maintenant si vous ouvrez ComSpeed.ini, vous saurez de qu'elle manière le programme y inscrit votre nom et mot de passe:
SwName=_Votre_Nom
SwCode=_Votre_Mot_De_Passe
Bon, maintenant c'est le moment de faire marcher sa cervelle.
On étant ses pieds sous le bureau, on remonte les manches, on s'allume une cigarette....et on se concentre:
Regardez le menu de ComSpeed.
Il y a:
File / Com-Port() / Shareware / Help.
Vous avez peut-etre remarqué (n'est-ce pas?) que quand vous vous êtez enregistré il y a quelques minutes celui-ci s'est tranformé en:
File / Com-Port() / Help.
Et oui, 'Shareware' disparait de la barre des menus quand le programme est enregistré.
Execellent!
On retourne dans W32Dasm6:
Appuyez dans la barre à outils sur le boutton 'Imports Functions'.
Une liste de toutes les fonctions de Windows (les API) qui sont utilisées par ComSpeed s'y trouve. Elles permettent, entre autre, a un programme d'utiliser une interface graphique 100% Windows...
Pour créer une Barre des Menus, un programme Windows doit appeller la fonction USER!DrawMenuBar. Cliquez sur elle (dans la liste) plusieurs fois pour localiser tous les appels à celle-ci dans ComSpeed.
On ne trouve que deux appels.
Le deuxième est tout a fait intéressant:
:0001.1756 9AFFFF0000 call 0011.0122h
:0001.175B 803ED00400 cmp byte ptr [04D0], 00 ; < 04D0=0??
:0001.1760 7531 jne 1793 ; < Si <>0 alors 'Unregistered'
:0001.1762 FF363C0A push word ptr [0A3C]
:0001.1766 FF363A0A push word ptr [0A3A]
:0001.176A 9AFFFF0000 call 0006.0044h
:0001.176F FF363407 push word ptr [0734]
:0001.1773 6A02 push 0002
:0001.1775 680004 push 0400
:0001.1778 9AFFFF0000 call USER.DELETEMENU ; < Efface Menu car 'Registered'
:0001.177D FF760E push word ptr [bp+0E]
:0001.1780 9AFFFF0000 call USER.DRAWMENUBAR ; < **ICI**
:0001.1785 FF760E push word ptr [bp+0E]
:0001.1788 6A00 push 0000
On voit que USER!DeleteMenu va effacer la barre des menus et tout de suite derrière, DrawMenuBar va en créér une autre toute jolie sans le mot 'Shareware'.
Au dessus, on trouve encore un saut conditionel (Jne 1793) qui, si 04D0 est différent de 0 nous fera sauter par dessus ces deux fonctions.
On en déduit tout simplement que si 'byte ptr [04D0] = 0' alors le programme est 'Registered'.
Si vous cherchez 'cmp byte ptr [04D0], 00' dans le listing de ComSpeed, vous le trouverez 10 fois.
Maintenant, on va chercher l'instruction qui va écrire à l'adresse 04D0:
Cherchez: 04D0
On en trouve une seule:
:0011.0D27 9AFFFF0000 call 0012.02E5h
:0011.0D2C 08C0 or al , al
:0011.0D2E B000 mov al, 00 ; al:=0
:0011.0D30 7501 jne 0D33 ; Rien à cirer
:0011.0D32 40 inc ax ; al:=al+1
:0011.0D33 A2D004 mov [04D0], al ; **ICI** 04D0=al
:0011.0D36 803ED00400 cmp byte ptr [04D0], 00 ; Encore!
:0011.0D3B 7527 jne 0D64 ; Si 04D0<>0 =>Unregistered
:0011.0D3D FF36D404 push word ptr [04D4]
:0011.0D41 FF36D204 push word ptr [04D2]
Et voila M'sieurs Dames.
Devons nous changer le 'jne 0D64' avec un 'je 0D64'? Non. N'oubliez pas le checksum et le fait que vous devriez changer les 10 sauts conditionels suivants les 10 'cmp byte ptr [04D0], 00'.
Pour ce type de crack j'utilise toujours le même vieux truc: Etant donné qu'on ne peut pas modifier trop de bytes en raison du checksum, rien (mais alors vraiment rien) ne nous empêche d'intervertir les intructions.
Exemple
Nous avions:
:0011.0D2E B000 mov al, 00
:0011.0D30 7501 jne 0D33
:0011.0D32 40 inc ax
:0011.0D33 A2D004 mov [04D0], al
:0011.0D36 803ED00400 cmp byte ptr [04D0], 00
:0011.0D3B 7527 jne 0D64
Peut être changé en:
:0011.0D2E 7501 jne 0D31 ; Toujours rien à cirer
:0011.0D30 40 inc ax ; al:=al+1
:0011.0D31 B000 mov al, 00 ; al:=0 < Voila!
:0011.0D33 A2D004 mov [04D0], al
:0011.0D36 803ED00400 cmp byte ptr [04D0], 00
:0011.0D3B 7527 jne 0D64
Maintenant "al:=0" et l'instruction "mov [04D0], al" donnera la valeur 0 (donc 'Registered') dans "04D0".
ComSpeed ne s'appercevra jamais de ces modifications et le résultat de "cmp byte ptr [04D0], 00" sera toujours VRAI et ceci tout au long du programme.
ComSpeed est maintenant enregistré.
3/ CONSEILS
Que choisir : Live Approach ou Dead Listing??
Personne ne pourra vous répondre....
Effectivement, chaque Cracker a ses préférences.
Moi, je commence toujours avec SoftIce (v3.01) histoire de savoir ce que fait le programme, ses differents appels aux API...bref juste pour savoir a qui j'ai a faire.
Je verifie aussi qu'il n'est pas écrit (mal-écrit) en Visual Basic (tout bon programmeur n'écrit JAMAIS en Visual Basic) puis je le désassemble car cette technique est la plus cool et la plus zen des deux (passer des heures devant l'écran de SoftIce peut se révéler assez pénible tandis que désassembler un fichier puis imprimer les parties de code intéressantes pour aller les étudier (et les craquer) à la terrasse d'un café sur les Quais de la Mégisserie en buvant une Leffe fait partie des ces habitudes qui rendent la vie du cracker tellement plus agréable...:-).
Chacun ses gouts.
De toute façon, l'idéal est de combiner ces deux techniques pour pouvoir TOUT craquer.
Attention: Certains programmes (de plus en plus) détectent si SoftIce est chargé et risquent de vous planter ou rebooter. Mais d'autres (ou les mêmes une fois qu'ils se seront débarasser de SoftIce) vous planteront si tentez vous les désassembler.
C'est le cas de SmartDraw v3.11 Win95. Si vous essayez de craquer ce programme en le traçant avec SoftIce vous avez de grandes chances pour qu'il vous plante et soyez obligé de rebooter.
De plus il est impossible de le désassembler (toutes versions de W32Dasm confondues).
En fait, les auteurs de tels logiciels n'écrivent pas cette protection mais font appel à des programmes de protection très couteux (EverLock, Copy Control) qu'ils intègrent à leurs softs.
C'est généralement suffisant pour faire abandonner les petits crackers. Mais ne vous dégonflez pas:
Vous n'avez pas besoin de SoftIce ou W32Dasm pour craquer SmartDraw. Avec un simple éditeur hexadécimal (comme HexWorkShop) il ne vous faudra pas plus de 5mn pour le craquer à 90%.
Mais cela sera pour plus tard...ne grillez pas les étapes. Prennez et craquez des logiciels de votre niveau (comme ComSpeed) pour l'instant.
Dès que vous aurez craqué votre programme, executez le avec SoftIce de nombreuses fois pour être sûr de n'avoir rien oublié (en craquant à un endroit on peut déclencher ulterieurement une autre protection "cachée"...) bref VERIFIEZ que votre crack est totalement FIABLE.
Dès que votre crack est bon, DISTRIBUEZ-LE (gratuitement evidemment) a tous ceux qui ne peuvent pas s'acheter le programme enregitré et aussi aux crétins qui ne seraient même pas capables de réaliser 1/10e de votre crack. Et surtout EVITEZ les trucs du genre:
- "Je vous passe ce crack mais vous n'avez pas le droit de vous en servir, c'est illégal".
ou bien:
- "Moi je crack des programmes? Oui bien sûr, mais quand je les utilises longtemps je m'enregistre auprès de leurs auteurs".
CA VA PAS, NON??!!!
On est des CRACKERS, des VRAIS, des DURS, des PURS.
Qui vous a parlé de "légalité"? Pourquoi faire confiance à un crétin de programmeur alors qu'il n'a même pas été capable d'écrire un bon schéma de protection puisque vous l'aurez craqué en 5mn? Vous acheteriez un programme à un type comme ça vous? Moi non.
4/ LIVRES
Vous trouverez de très nombreux ouvrages sur l'informatique et le PC mais peu sont réellement adaptés à nos besoins. En voici donc 2 particulièrement indispensables et faciles a trouver:
Assembleur
"Assembleur Pratique" - de Bernard Fabrot chez Marabout Collection "Best-Sellers de l'informatique" 1996.
Pour un prix modeste de 50 balles et un format livre de poche, c'est a mon avis ce qui ce fait de mieux pour apprendre ce merveilleux langage. Destiné au mode 32 bits, cette mise à jour succède à "Assembleur facile" ( de P.Mercier qui avait écrit de très bons ouvrages sur le BIOS et la programmation DOS:=) qui lui ne concernait que le 16 bits. Ils ont bien fait de changer le titre pour cette nouvelle version! N'essayez pas de l'apprendre par coeur, vous n'y arriverez pas. Contentez-vous de l'avoir sous la main à chaque fois que vous rencontrerez un instruction que vous ne connaissez pas, et ça finira bien par rentrer...
API
"Programmation des API -Windows 95 Win32" de Richard Simon chez Simon & Schuster Macmillan France - coll. "Secrets d'experts" (+ CD-ROM).
Là, il vous faudra dépenser 399FF (je vous ai déjà fait économiser $11 en vous apprenant a craquer ComSpeed!! :=) mais il vaut bien son prix car je n'en n'ai jamais trouver d'autres aussi complets. Tout y est classé par catégorie (E/S, Menus, Boites de dialogue, registre...) et très bien détaillé. De nombreux exemples sur le CD-ROM avec leur source. Très bien.
Voila, d'autres cours suivronts ...
Frog's Print -06/97
(http://www.ThePentagon.com/frog_s_print)
PS: J'allais oublier, ouvrez le fichier ComSpeed.ini et a coté des lignes suivantes
rajoutez votre nom:
SwName=Mettez_Votre_Nom
SwCode=Merci_Frog's_Print
Lancez ensuite ComSpeed et appuyez sur 'Help' - 'About' et le tour est joué...