Windasm.
En tout premier lieu, aller dans "Disassembler" => "Font..." => "Select Font" et choisissez un police qui convient. Puis aller dans "Disassembler" => "Font..." => "Save default font" pour l'enregistrer.
Comme je vous l'ai dit précédemment, Windasm est un désassembleur ( ou décompilateur ) pour Windows 16 et 32 bits. Mais pourquoi faut-il désassembler un programme ?
Tout simplement parce qu'un programme qu'il soit écrit en C/C++, Visual Basic, Delphi,ect... est traduit par le compilateur approprié en code ASM, ou assembleur, le seul langage que les machines comprennent. Mais si ce n'était que ça... En faite, il faut que le code ASM soit aussi transformer en binaire, car une machine ne reconnait que ça. Donc, le but de notre désassembleur, c'est de rendre un code lisible pour nous, les humains.
Tout d'abord, ce qui apparaît à l'écran s'appelle le listing, c'est tout le code désassemblé par Windasm:

La première colonne, souvent appelée Code Data, sert à déterminer l'adresse correspondant à l'instruction. Remarquez que pour les programmes exécutable, cette ligne commence à 401000.
La seconde colonne, est le code en hexadécimal.
Et la troisième est le code traduit en ASM que nous pouvons le plus facilement comprendre mais qui doit quand même ne pas vous dire grand chose...
Ensuite, la barre d'option:

Nous allons voir ce que chacun d'eux représente respectivement 1 par 1 en partant de la gauche vers la droite.
- "Open file to disassemble" : permet d'ouvrir un fichier à désassembler.
- "Save disassembly text file et create project file" : permet d'enregistrer votre listing et de créer un fichier de projet.
- "Find text" : permet de trouver une chaîne de caractère dans le listing.
- "Copy selected lines" : permet de copier les lignes sélectionnées. Pour ce faire, cliquez avec le bouton gauche de votre souris devant la ligne choisie pour la sélectionner. Si vous voulez en sélectionner plusieurs, appuyez sur Shift en même temps.
- "Goto code start" : permet de se rendre au début du code de votre programme.
- "Goto code entry point" : permet de se rendre au point d'entré du programme.
- "Goto page" : permet de vous rendre à la page du listing voulue.
- "Goto code location" : permet de vous rendre à une adresse ( Code Data ) spécifiée.
- "Execute jump" : permet de sauter si la ligne en cours ( marquée par une ligne de couleur ) est un saut.
- "Return from last jump" : permet de retourner à la ligne où se situais le dernier saut que vous avez effectué.
- "Execute call" : permet d'aller à la ligne de code appelée.
- "Return from call" : permet de retourner à la ligne où se situait le dernier call appelé.
- "Imports" : fonctions appartenant au fichier désassemblé.
- "Exports" : fonctions appartenant à un autre fichier que celui qui est désassemblé: dll, vxd,...
- "Hex display of data objet/segments" : permet de voir le programme en hexadécimal.
- "Hex display of code data" : idem que le prédédent.
Rem je ne ferai pas la différence entre les deux car elles ne devrait pas vous servir à ce stade.
- "Dialog references" : références des boites de dialogues utilisées.
- "String data references" : références de toutes les chaines utilisées.
- "Print" : imprime les lignes sélectionnées. Si il y en a aucune, tout le listing entier est imprimer.
Méfiez-vous, un listing atteint très très rapidement les 100 pages pour un programme de 50 à 100 Ko !!!
Et voici la barre de status:

"Line:320" définit le numéro de ligne en cours.
"Pg 4 of 30" définit que nous sommes sur la page 4, et qu'il y en a un total de 30.
"Code Data @:401117" définit que nous sommes à la l'adresse 401117.
"@Offset 00001117h" définit que nous sommes à l'offset 1117, h indiquant que ce nombre est en hexadécimal.
"in File:Crackme.exe" définit le nom du programme qui est désassemblé.
Trouver le/les saut(s) conditionnel(s).
Bon, nous voilà fin près à débuter le cracking. Je suppose que vous avez quand même déjà désassemblé votre programme, sinon faites-le. Comme je vous l'ai déjà fait remarquez, il y a un endroit ou se trouve ce qu'on appelle un saut conditionnel vérifiant si le sérial est bon ou pas. Donc ils nous faut trouver ce saut.
Rappellez-vous, quand nous avions entré un mauvais sérial, un message d'erreur était apparu:

Maintenant, on sait tout ce qu'il nous faut savoir pour cracker ce programme. Nous allons nous y prendre par la manière dite du "Dead Listing", c'est-à-dire qu'on repère le saut et on le change de façon à ce que même si le serial est mauvais, nous soyons enregistré.
Pour ce faire, nous allons aller voir les "String data references".

Nous pouvons remarquez que le message d'erreur y est:"Incorrect try again!!". Donc nous double-cliquons sur celui-ci plusieurs fois en regardant l'adresse où ça nous mène pour vérifier si il n'y en a pas plusieurs. Une chance pour nous ce n'est pas le cas.

Et voilà, si le sérial n'est pas bon nous sautons ici. Celà affiche un message avec comme titre "Crackme" et comme texte "Incorrect try again!!". Mais nous pouvons voir ceci aussi:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401595(C)
|
Ce qui signifie que le saut conditionnel se situe à l'adresse "00401595". Donc nous cliquons sur "Goto code location" et spécifions "00401595" pour nous rendre à ce saut. Mais voici à présent toute la partie du code qui nous intéresse: