LES PREMIERES NOTIONS:
Le cracking consiste à cracker les programmes, c'est à dire enlever la protection ou le password d'un programme en le désassemblant. Il existe beaucoup de mags et de E-zines sur le sujet. J'en donne quelques un dans cette page. Pour commencer je vous conseille de vous procurer WINDASM 8.9 (disponible dans la rubrique Download), pour désassembler les logiciels et un éditeur Hexadécimal pour modifier ces programmes.
Présentation de w32dasm :
Lorsque l'on fait un programme dans n'importe quel langage, une fois compilé en exécutable il est également traduit dans un langage appelé l'assembleur. Avec un désassembleur, on va afficher le code source du programme en assembleur, après cette brève introduction, commençons. On ouvre W32Dasm et on fait "open file to disassemble". Alors on sélectionne un quelconque programme exécutable. Voila vous avez devant les yeux de l'assembleur. On descend un peu, aïe ça se complique légèrement:
Bon au premier abord ça a l'air compliqué, mais c'est bon vous apprendrez avec le temps. Pour l'instant on à pas besoin de comprendre. On est là pour observer et apprendre le fonctionnement de W32Dasm. Bon on remarque que la barre bleue devient verte lorsqu'elle passe sur un je, jne, jmp ou autre... C' est juste pour executer des sauts.
Pour aller à l'adresse qui nous intéresse on fait Goto Adress, l'option Patch Code est assez utiles, vous entrer la modification que vous souhaitez effectuer (en assembleur, bien sur) et elle vous est traduit en hexadecimal lorsque vous faites apply patch, s'il y a marqué write protected memory c'est pas la peine de continuer. Bon ça devrait suffir pour l' instant. Notez bien que le debugger de W32Dasm ne fait pas le poids par rappport à SoftICE, un debugger qui permet de charger un programme en mémoire et l'exécuter pas à pas(tracage).
Qu'est-ce q'un désassembleur ?
Un désassembleur sert a voir ce qu'il y a à l'intérieur d'un
prog. Quand vous en désassemblerez un, vous aurez droit à un listing traduisant
le code assembleur.
Lorsqu'un programmeur fait un prog, il utilise des
instructions spécifiques à son langage ( c++, c,visual basic,..etc.).Il
enregistre ensuite son code source dans un fichier puis il le compile. Le
compilateur va transformer le code source spécifique au langage en assembleur
qui ne peut être lu que par le même environnement ou il a été compiler. Si le
programme a été compilé sous Windows il ne marchera que sous Windows (Logique
non LOL).
Quand vous avez un .EXE sur votre disque celui-ci est donc en
assembleur. Si vous l'ouvrez avec un éditeur hexadécimal vous ne verrez pas
d'instructions assembleur mais les caractères ASCII correspondants a ces
instructions.
Pour voir ces instructions assembleur il vous faut donc un
désassembleur et donc il vous faut w32dasm.
Qu'est-ce q'un debugger ?
Le débugging consiste à tracer un prog ligne par
ligne. C'est à dire d'exécuter ligne par ligne les instructions assembleur, un
programme contient des milliers de lignes. Donc vous verrez le prog se
développer au fur et à mesure de l'avancement dans les lignes de codes donc vous
pourrez éventuellement virer des trucs que vous n'aimez pas, genre des splash
unregistrered ...etc.
Petite note : Quand vous changez des trucs dans
softice les
changements ne marchent q'une fois, c'est a dire que ça n'est que temporaire.
Pour modifier réellement le programme il faut un éditeur hexadécimal.
En fait
softice sert à
trouver les endroits où par exemple une fonction appelle une fenêtre "veuillez
vous enregistrer ...etc.", et donc à savoir où patcher le programme pour ne
qu'il n'appelle plus cette fonction.
Pour debugger il vous faut donc softice (quoi que w32dasm
le fait aussi mais bon c'est mieux softice).
Qu'est-ce q'un éditeur hexadécimal
?
Un éditeur hexadécimal sert donc à modifier réellement le prog
à tel ou tel endroit. C'est vraiment trop bon ces progs car on peut presque tout
changer dans le progs (Virer du texte, changer des mots... etc)
Comme
éditeur hexadécimal il vous faut ultraedit et hiew c'est les 2 seuls que
j'utilisent et les meilleurs selon moi.
Tout d'abord sachez qu'il existe 3 types de programmes shareware :
1. limitation à X de jours ou à X utilisations.
(Il est entier)
2. version bridée (incomplète à l'utilisation mais il quand
même entier).
3. les versions "démo" (tout n'est pas dedans).
Pour les versions demo ont peut rien faire (normal)
Pour les version limitée à un certain nombre d'utilisations ou de jours, on peut par exemple bloquer la fonction qui compte le nombre de fois qu'il a été lancé ou le nombre de jours.
Pour les version bridées ont peut déjà chercher ce
qui n'est pas accessible et le rendre accessible.
On peut aussi chercher
le serial avec softice (pour 1 et 2) et donc ne rien
changer au programme mais bon je ne trouve pas ça très excitant. (en règle
générale c'est souvent comme ça, mais bon des fois c'est différent mais ce sera
pour le futur ; commencez déjà par ceux la.)
La table des sauts assembleurs:
JNE |
Saute si pas egal |
75 ou 85 |
JE |
Saute si egal |
74 ou 84 |
JMP |
Saute |
EB ou E9 |
JA |
Saute si au dessus |
0F87 |
JNA |
Saute si pas au dessus |
0F86 |
JAE |
Saute si au dessus ou egal |
0F83 |
JNAE |
Saute si pas au dessus ou egal |
0F82 |
JB |
Saute si en dessous |
0F82 |
JNB |
Saute si pas en dessous |
0F83 |
JBE |
Saute si en desous ou egal |
0F86 |
JNBE |
Saute si pas en dessous ou egal |
0F87 |
JG |
Saute si plus grand |
0F8F |
JNG |
Saute si pas plus grand |
0F8E |
JGE |
Saute si plus grand ou egal |
0F8D |
JNGE |
Saute si pas plus grand ou egal |
0F8C |
JL |
Saute si moins grand |
0F8C |
JLE |
Saute si moins grand ou egal |
0F8D |
JNLE |
Saute si pas moins grand ou egal |
0F8E |
NOP |
Ne fais rien |
90 ou 908F |
Alors une fois que vous avez trouve l'endroit a patcher dans la fenetre de code par exemple un jne en je il vous faut connaitre l'adresse car on ne peut pas directement changer le truc qu'on veut dans la fenetre du prog desassemblé (cest tres con d'ailleurs). Pour pouvoir changer donc il vous faut un editeur hexadecimal mais le probleme c'est que ce nest pas le meme langague entre le prog desassemblé et le prog dans l'editeur hexa, c'est pour ca que dans w32dasm il ya un truc tres bien qui vous indique l'adresse a laquelle se trouve votre ligne jaune en assembleur et en hexadecimal.