C'est l'art de modifier un programme de façon a ce qu'il fonctionne dans un but auquel il n'etait pas destine, ou de dejouer les protections d'un logiciel. Le cracking est un art d'analyse, de reflexion, et d'ingeniosite. Le langage ASM (assembleur) est le pilier centrale de cet art. En effet le cracker travaille enormement en assembleur, pour d'une part comprendre le code source du programme desassemble et pouvoir le modifier, et d'une autre pour programmer un keygen, crack,.. Pour parvenir a ses fins le cracker utilise divers programmes pour l'aider a cracker, les voici :
Les programmes du cracker:
- Desassembleur : Il permet de desassembler un programme afin de voir son code source en ASM et ainsi savoir comment s'y prendre pour cracker le programme.
Exemple : Ida,Windasm,..
- Editeur hexadecimal : L 'editeur hexadecimal permet d'afficher le contenu du programme en hexadecimal et en ascii il est utilise pour faire des modifications dans le programme afin de le cracker.
Exemple : HexDecCharEditor, UltraEdit, Hex WorkShop, Winhex,..
- Debuggeur : Le debugger permet d'analyser un programme pendant son execution et de voir en temps reel (en direct quoi !) les valeurs des registres et les operations que le programme effectue. Le debugger devient reellement utile pour trouver un serial.
Exemple : SoftIce,Ollydgb,..
- Analyseur : Celui-ci permet de connetre le langage de programmation avec lequel le programme a etait code ou aussi de connetre avec quel logiciel il a etait crypte ou compresse.
Exemple : PEiD, StudPE,..
- Patcheur : Si vous souhaitez diffuses vos cracks vous aurez besoin d'un patcheur. Il va comparer le fichier cracke a l'original, il creera alors un patch.
Exemple : CodeFusion, Graphical-Patch Maker, WinPatchEngine,..
- Unpackers: les unpackers permettent de decompresser ou de decrypter des programmes qui le sont. Chaque compression et cryptage a sont unpackers specifique.
Exemple : AsPackDie, UPX,..
Le vocabulaire du cracker
- Deadlisting: C'est une façon de cracker un soft, en observant le code asm, mais sans lancer le soft. Technique assez longue et fastidieuse parfois.
-Serial Fishing : Le nom de cette technique est assez parlant,c'est la peche au serial,technique associe au dead listing en quelques sorte vus que ça repose sur le meme principe.
- API: Fonction pre-etablie appelee par un programme.
-Tracer ou tracing: Execution des codes d'un programme ligne par ligne (pas a pas), avec F8 ou F10 sous sice.
-Time-limit: Temps durant lequel vous pourrez utiliser une application, connu aussi sous le nom de "trial periode" (exemple : limitation a 30 jours ,etc..).
-Nag-screen: Fenetre qui vous rappel de vous enregistrer pour utiliser le logiciel.
-Reverse Engineering : Le reverse engineering est l'art de modifier un programme afin de lui ajouter des fonctions, d'optimise certaines routines, customise le programme, ect.. En bref le reversing c'est le fait de modifie un programme de façon a ce qu'il fonctionne d'une façon pour laquelle il n'etait, a la base,pas destine.
Pour modifier un programme le cracker a souvent recours a un editeur hexadecimal.
L'hexadecimal est different du decimal:
Et bien en hexadecimal on compte de cette maniere :
0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F..
En decimal vous compter comme ça :
0-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16..
Lorsque vous ouvrez un programme avec Windasm vous vous retrouverez souvent avec des lignes de code de ce genre :
__________________________________________
:0040100E .E839000000 . Call 0040104C
:00401013 83F807 cmp eax, 00000007
:00401016 EB1A jmp 00401032
:00401018 6A40 push 00000040
__________________________________________
Premiere colonne: ce sont les adresses de ligne pour Windasm.
Deuxieme colonne: ce sont les instructions en hexadecimal. C'est ce qu'on recherchera dans l'editeur hexadecimal et qu'on modifiera.
Troisieme colonne ce sont les instructions en assembleur du programme.
JNE : C'est un saut vers une adresse definie.
Il saute a cette adresse si le code que vous avez rentre est faux.
JMP : C'est aussi un saut mais celui la saute sans conditions, au contraire du JNE. Voila un exemple en assembleur (mes commentaires sont apres les <--) :
_________________________________________________________________
:00401001 &&&& <-- Teste si le code entre est bon
:00401002 7502 jne 00401004 <-- JNE est un saut conditionnel. Il saute au 00401004 si le code est faux (jne = saut si pas egal) ou continue sa route si le code entre est bon.
* Possible StringData Ref from Data Obj ->"Le code est bon ! Bravo " <-- Message provenant d'une boite de dialogue
:00401003 EB04 jmp 00401005 <-- "JMP" est aussi un saut ( jmp = saut). Le numero a sa droite est l'adresse ou il va sauter.
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401002(U) <-- Il indique que le message suivant est appele par un saut conditionnel (l'adresse de celui-ci est a gauche du"(U)" : 00401002)
:00401004 &&&& push &&&&&
* Possible StringData Ref from Data Obj ->"Le code n'est pas bon "
:00401005 &&&& &&&&& __________________________________________________________________
NB : Ce code assembleur provient d'un crackme de Deamon.
Bon je pense que vous avez compris que si on veux arriver au bon message c'est le JNE qu'il faut changer. En effet si il s'aperçoit que notre code est faux on a le message d'erreur. Pour eviter cela on peut remplacer le JNE par un JE (jump equal) il sautera alors au message "code bon" meme si le code que l'on a entrer est mauvais. Pour arriver a nos fins on peut aussi remplacer le JNE par un NOP (pas d'operation) il ne sautera pas du tout mais ira directement au bon message.
Voici un petit tableau pour resumer:Saut conditionnel | Valeur en hexadecimal | Description |
jne | 75 ou 0F85 | Saut si non egal |
je | 74 ou 0F84 | Saut si egal |
jmp | EB | Saut |
nop | 90 | Pas d'operation |
- les sauts tres proches ( SHORT).
- les sauts proches (NEAR)
- les sauts loin (FAR)
- les sauts indexes
Voila vous en savez un peu plus sur le cracking de quoi deja pouvoir se lance dans ce noble art.
N'hesitez pas a utiliser Google pour approfondir vos connaissances et repondre a d'eventuelles questions que vous vous posez.