Cours de Cracking
              
(1 ième Partie)

 

 

Mon objectif : tout vous expliquer de A à Z pour que vous puissiez comprendre comment fonctionne le cracking. Il va falloir que vous lisiez bien tout attentivement de façon à bien comprendre le cours...

 

1/ Les logiciels utiles pour ce cours

-> Le programme à craquer     :  Start Clean v1.2
-> Un désassembleur             :  W32dasm 8.93
-> Un éditeur hexa décimal     :  Winhex 10.2

 

2/ Qu'est ce qu'un crack ?

Un crack, est un petit programme (quelques ko en général) qui va modifier certains octets d'une application à certains emplacements du fichier cible de façon à jouer à votre jeux préféré sans CD par exemple ou encore utiliser le programme en tant qu'utilisateur enregistré. Mais bon, passons aux choses sérieuses, pour le crack qui suit, certaines fonctions ne seront pas expliquées du fait de leurs compléxitées pour les débutants. (tout les bons cracker l'ont été un jour ;)

Pour faire votre premier crack, on a choisi un programme super fastoche à cracker pour vous montrer un truc super classique, le saut conditionnel ;))

Comme son nom l'indique, un saut conditionnel, est un passage du programme en assembleur qui fait que, si une condition est remplie ou non, un " saut "vers la suite du programme s'effectue ou non. Par exemple, une barre de défilement s'active à condition que vous cliquiez avec le bouton de gauche de la souris... Ainsi, le bouton droit n'aura aucun effet...

Voici le prog choisi; Start Clean v1.2. Ce programme sert à supprimer les raccourcis qui ne menent nul part dans le menu Démarrer.

Tout d'abord, il faut un logiciel, qui s'appelle un désassembleur. Comme son nom l'indique, il sert à désassembler un fichier de façon à le rendre lisible et plus tard compréhensible. Pour ma part, j'utilise W32Dasm 8.93 facile à trouver sur le net :)

Il faut aussi se qu'on appelle un éditeur héxadécimal. Comme son nom l'indique aussi, il sert à faire apparaître un fichier sous forme héxadécimale pour pouvoir remplacer un octet par un autre, de façon a pouvoir quand même executer le prog après modification(s) précise(s). Mon préferé est HexWorks 3.X, mais il y a ausi WinHex 10.2 ...N'importe quel éditeur hexadecimal fera l'affaire :)

Enfin, il vous faudra dans tous les cas (enfin presque) un cerveau réveillé et en état de marche ;)

 

2/ Passons à la pratique


D'abord, lancez Start Clean. Au démarrage, une fenêtre s'affiche pour pouvoir s'enregistrer. Mais le problème c'est que vouz avez peut être pas que ça à faire d'envoyer des tunes, d'ou le crack ;) .

Donc, pour pouvoir voir le programme de façon lisible, il faut l'ouvrir avec un désassembleur :)

Avant tout, faiteune copie de Start Clean.exe
Lancez W32Dasm...

Comme c'est le premier lancement de W32Dasm, il faut choisir la fonte par default que l'on va utiliser...Faites :
Disassembler =>Font... => Select Font =>...

Et pour sauvegarder la fonte choisie, faite :
Disassembler => Font => Save Default Font.

Allez cherchez ensuite la copie du fichier executable STARTCLN.EXE de la façon suivante :
Disassembler => Open File to Disassemble...;

Double-cliquer sur la copie de startcln.exe

 

3/ Listing de désassemblage

Ben ouais, ce que vous voyez à l'écran c'est du code en assembleur.
Ce sont de petites instructions qui s'enchaînent pour former un tout, un programme.

L'assembleur est le language de programmation le plus bas. Quand vous programmez que se soit en Delphi ou en C, tout est traduit en assembleur pour que votre prog soit compréhensible par l' ordinateur, car ne l'oublions pas l'assembleur, c'est le language machine par exellence. Ses avantages résident dans le fait qu'il est tout de suite compris par la machine, ainsi, un programme, même écrit en C sera exécuté moins rapidement que s'il avait été fait en assembleur ( de quelques dixièmes de secondes, mais bon... ).

Ok, vous devez peut-être vous dire " bordel c'est quoi ce truc, je quitte ça et je retourne télécharger des cracks tous faits!". Si c'est ce que vous vous dites, alors quittez ce tutorial, et vous serez obligé d'attendre sur le net que les cracks sortent, et surtout, vous ratterez le plus important, la satisfaction personnelle et le monde superbe qu'est l'assembleur.

Par contre si vous vous dites " bordel c'est quoi ce truc, c'est chelou mais j'ai quand même envie de savoir comment on s'y prend pour cracker" ; alors la suite de ce tutorial est pour vous ;))

Bon, ce qui apparait à l'écran, s'appelle un listing. C'est là dessus que l'ont va étudier.

 

DESCRIPTION

 

Point très technique : (à lire quand vous avez lu tout le tutorial) dans la photo du dessus le code hexa décimal et le code assembleur correspondent (ce sont 2 façons d'écrire la même chose). Par exemple pour coder le saut conditionnel en asm (= assembleur) je 00403CE3 (je= jump if equal to 0) il nous faut 6 octets (2 pour le je et 4 pour l'adresse 00403CE3). Les 2 octets pour le je ce sont les octets (bytes en anglais) 0F et 84 et pour l'adresse ce sont les octets 78, 01, 00 et  00. Pourquoi 78 01 00 00 ? Eh bien pour atteindre l'adresse 00403CE3 (l'endroit vers lequel on va) on effectue un saut depuis l'adresse 00403B6B en passant sur 01 78 h = 1x16 + 78  d = 376 octets (d pour décimal, h pour hexadécimal) . En effet les calculs se font en hexdécimal et 00403B6B + 00000178 = 00403CE3 (prendre la calculatrice de windows en mode scientifique en cochant hex et en n'oubliant pas d'inverser les bytes quand on transforme une adresse en hexadécimal par une adresse en asm 78 01 00 00 devient 00 00 01 78 dans notre calcul).

 

Récapitulons : en démarrant Start Clean, une option nous propose de vous enregistrer. Allez-y et entrez un truc bidon puis faite Ok. Si ça marche, c'est que vous avez un méga-bol du fait qu'il y des possibilitées quasiment infines ! Sinon le prog vous affiche " Incorrect code !". Un saut conditionnel est donc présent :)) Dans la boîte de dialogue en question où l'on doit entrer son code et-tout, il y a deux cellules de saisie. Celle du nom et celle du code ;) L'une s'appelle "name", et l'autre "code"

 

4/ Faisons un peu d'assembleur

Revenez a W32Dasm.

-> Avant de lancer une recherche sur un mot, on va se placer directement à l'entrée du prog, car ce qu'il y a avant on s'en fou un peut ;) .Pour ca, faites: Goto => Goto Code Start...

-> Lancez ensuite une recherche automatique sur le mot "name"; ( ne rentrez pas les guïllemets ), car il fait partie de la boîte de dialogue se chargeant de la saisie du code. On pourrait aussi rechercher " code "...
Pour faire cette recherche, faites: Search => Find Text..

 

 

Et là, vous allez forcement tomber sur quelque chose. Cependant, il se peut qu'il y ait plusieurs fois ce mot dans le programme... Donc, par mesure de prudence, faites Suivant
Vous verrez alors que vous arrivez a d'autre endroit du programme... Alors, que choisir ??

-> Revenez au debut du code (Goto => Goto Code Start.. ou bien clic sur le bouton avec une lampe marqué Cd Start en dessous dans la barre de bouton de w32dasm).

-> Refaite une recherche et arretez vous à la seconde occurence de "name " (qui doit etre trouvée a la ligne 423 comme indiqué dans la photo d'écran ci-dessous).

AllCode

On se trouve alors à un endroit particulièrement interressant. Mais alors pourquoi cet endroit est t-il si interessant me direz-vous ?

Parce que si l'on observe bien cette petite partie (ce qu'il y a avant et apres...), on remarque que l'indication "*Reference To: ADVAPI32. RegCreateKey, Ord: 00C6h "est affichée.

Cette indication de fonction indique que Start Clean va inscrire un truc dans la base de registre de Windows, sans doute votre nom et code... a condition que votre code soit bon :). En français pour ceux qui sont allergiques à l'anglais RegCreateKey veux dire Créer une clef dans le registre (Reg pour Registry).

L'instruction que l'on recherche est un saut conditionnel. En assembleur, ca se traduit par :
JNE, JNZ... (jump if not equal (to 0), jump if not zéro) qui sont des sauts appelés sauts de "non egalité"...
JE, JZ....    (jump if equal (to 0), jump if zéro) qui sont des sauts qui s'effectuent en cas d'égalité"...

Egalité signifie ici "deux valeur identique"... Lorsque que le programme va comparez votre code avec le vrai, il va indiquez si il sont "egaux" ou non...

Si le saut est de forme JE, alors on dira que "le saut se fait si les codes sont égaux".
Si le saut est de la forme JNE, alors on dira que "le saut se fait si les codes ne sont pas egaux"...

Il existe un type de saut appelé inconditionnel, c'est a dire que le saut s'effectue sans conditions (on saute tout le temps) ...
Ce saut s'ecrit avec une instruction JMP en assembleur, mais cela ne nous servira pas pour ce tutorial...

Donc, pour revenir a StartClean, il va falloir qu'on trouve tout les sauts qu'il y a dans le bout de code ci dessus, puis qu'on analyse ou est-ce qu'ils nous font sauter...

On est chanceux, ici il n'y a qu'un seul saut qui est a l'adresse 004011EB, et qui est situé juste apres un test (Un TEST est l'instruction qui determine si une valeur est egale a zéro...) et juste au dessus de la chaîne "name" trouvée.
On a donc :

 

 

L'instruction assembleur jne 00401271 signifie : "Sauter à l'adresse 00401271> si la valeur testée n'est pas égale à zéro.". Cette instruction est intéressante car il y a fort a parier que la valeur testée soit le numéro de série que vous avez rentré au pif. En effet au dessus on voit que le programme fait appel à une API (Application Interfcace Programming) nommée Kernel32 qui est un fichier sur votre disque (le fichier kernel32.dll dans C:\windows\system32) dans lequel est codé une méthode (fonction) de comparaison de chaînes nommée lstrcmpA ( l' API va comparer votre numéro de série encore appelé serial dans la terminologie anglo-saxone avec le vrai sérial calculé par l'application).

Il faut bien comprendre que souvent, un numéro de série est considéré comme valide lorsque la valeur du test est égale a zéro. Autrement, dans le cas ou le test n'est pas égal à zéro, alors ce numéro est reconnu comme incorrect... C'est un peu comme le courant electrique : 0=ouvert et 1=fermer... Compris ?

Donc, "Sauter a l'adresse 00401271 si la valeur testée n'est pas egale a zéro." siginfie que si le code est mauvais, on va "sauter" tout ce qu'il y a entre l'adresse 004011EB (l'endroit d'où l'on saute) et l'adresse 00401271 (l'endroit où le saut nous amène...).

Regardez sur le listing... Concrètement, le saut va passer au dessus de toutes la partie du programme qui inscrit notre nom et notre code dans la base de registre...

Par contre, si le code est bon, le saut ne s'effectue pas et le programme va continuer son listing en passant par
 -> " * Reference To: ADVAPI32.RegCreateKeyExA"
 -> " * Reference To: ADVAPI32.RegSetValueExA"

Là encore c'est une API qui est utilisée ADVAPI32.dll qui est utilisée pour créer une clé dans le registre de windows (méthode RegCreateKeyExA) et pour assigner une valeur à cette clef (méthode RegSetValueExA). Le mot Reg est une abbréviation de Registry (registre en français. Le registre est la base de praramétrage du système windows, du matétriel et des applications installés sur votre machine; en d'autres termes c'est le coeur de windows).

Cette étape est importante à comprendre et si vous ne l'avez pas comprise relisez la plus attentivement...

 

Donc, il va falloir que l'on modifie le saut jne 00401271
Dans ce cas de figure, il faut faire ce que l'on appelle "nopper" une valeur :)
Mais avant, un p'tit cour sur l'héxadécimal s'impose :))

 

5/ L'hexadécimal

 

D'abord oubliez la façon dons vous avez appris à compter. Parce qu' en héxadécimal, on compte le la façon suivante :

1 2 3 4 5 6 7 8 9 A B C D E F

Par exemple 15 en décimal s' ecrit F en héxadécimal. Mais pouquoi dit-on héxadécimal ? Tout simplement parce qu' après les neufs premier chiffres il y à six lettres, 6 d'où héxa, comme un héxagone a six cotés ;) Sinon pour ce qui est des conversions et tout, nous verons ça dans un autre tutorial ;)

 

6/ Nopper une valeur

Qu'est ce que ça veut dire "Nopper une valeur" ? Ca veut dire que l'on va remplacer la valeur d'un octet par la valeur 90 en héxadécimal, ce qui correspond à une instruction assembleur qui veut dire ne fait rien ( Nop = No OPeration). L'instruction nop en assembleur est un peu bizarre, puisqu'elle ne sert à rien. Sauf dans certains cas pour faire perdre du temps CPU (Central Processing Unit = micro-processeur) en encombrant ses entrées/sorties.

Voici une petite liste qui vous indique la valeur Hexadecimale de quelque instruction Assembleur.

 

Assembleur

Héxadécimal

NOP 90
JNE 75 ou 0F85xxx
JE 74 ou 0F84xxx
JMP EB ou E9
XOR 33
RET C3

Il existe encore beaucoup d'autres instructions, mais qui sont peu interessantes à notre stade ;)

Regardez la valeur "0F8580000000" se trouvant à la gauche du "jne" dans le listing.
C'est en fait sa valeur en assembleur convertie en héxadécimal. 0F85 c'est jne et 80000000 c'est le bloc memoire ou l'on saute... Un bloc mémoire, si vous ne savez pas, c'est un peut comme un petit carré de mémoire éléctronique qui va contenir une information. Par exemple si vous collez un post-it avec écrit dessus " achète du pain pour ce soir "sur un porte, et ben la porte c'est le bloc mémoire et le post-it l'information ;)

Comment nopper le saut conditionnel ?
Il suffit d' ouvrir le fichier STARTCLN.EXE avec votre éditeur héxadecimal, de lancer une recherche automatique sur la valeur " 0F 85 80 00 00 00 " ( qui represente en assembleur l'instruction jne 00401271). Une fois cette valeur trouvée, vous la remplacer par " 90 90 90 90 90 90", puis vous enregistrer les modifications (n'oubliez pas de faire une sauvegarde du fichier d'origine au préalable, au cas ou vous vous tromperiez...(on ne sait jamais).

Nb : message de pifoman : si votre éditeur héxadécimal vous dit qu'il ne peut enregistrer les modifications enlevez l'attribut lecture seule de STARTCLN.EXE. Si cela ne suffit pas fermez le désassembleur w32dasm 8.93 qui verouille toujours un fichier en écriture quand celui-ci est ouvert dedans. Il empêche ainsi d'écrire sur ce fichier avec un autre logiciel comme notre éditeur héxadécimal winhex par exemple.

Maintenant, lancer le programme ainsi modifié.

Quoi ? La boite de dialogue d'enregistrement est toujours présente ? Normal puisque le programme n'a pas encore enregistrer votre code dans la base de registre de Windows 9x. il faut donc cliquer sur " REGISTER " et rentrer un nom, un code bidon, puis cliquer sur Ok.

Et là ca marche ! Car le saut "jne" n'existe plus, donc le prog continue tranquillement son listing en passant sur les * Reference To: ADVAPI32.RegCreateKeyExA et * Reference To: ADVAPI32.RegSetValueExA. Le prog est donc complet et illimité. Vous pourrez aussi observer qu'il à inscrit un code personnel qu'il s'est auto-générer dans la base de registre de Windows9x ;))
Miracle ? Non, assembleur ;)))


PS :je ne dis pas ça pour vous découragez, mais pour un cracker conséquent, un tel raisonnement, observations et crack compris, ce type de sécurité à retirer ne prend que deux à trois minutes et encore. Alors entraînez vous bien et vous verrez, c'est pas si compliqué que ça en à l'air ;)

 

7/ Quelques astuces

 -> Lire pleins de tutoriaux fait sur de petit progs et les comprendre
 -> Faut pas se prendre la tête et laisser son ésprit logique tourner seul, ca donne plus d'endurance
 -> Faire une pause de 5 minutes minimum toutes les heures, quand on commence à cracker, c'est mieux
 -> Faire ses devoirs avant ;) , car cracker, surtout pour la première fois prend du temps
 -> S'acheter un p'tit bouquin sur l'assembleur. Pour moi la réference, c'est " L' assembleur " de Bernard Fabrot, éditions Marabout, env: 50 balles :). Pour moi pifoman ma référence "L'assembleur une découverte pas à pas" aux éditions Marabout de Philippe Mercier (57.95 F) en français et bien expliqué [ISBN 2-501-01176-7].
 -> Ne pas s'auto proclamer bon crackeur parce qu'on à cracker 1 ou 2 progs
 -> Avoir un bon écran, car pour le listing, c'est primordial
 -> Ne pas rester tout le temps dans le désassembleur et naviguer de façon équilibré entre ce dernier et l'editeur héxa (n'hésitez pas à faire pleins d'essais)
 -> Désassemblez un fichier d'origine et ouvrez une copie du fichier dans l'éditeur hexa décimal pour comparer et comprendre les modifications qui ont étés faites.

 

STATIC REVENGE
and
SMEITA





Nombre de visites depuis le 15/02/2003