Il y a un minimum de choses à savoir avant de commencer. Je vous recommande fortement de passer par les explications qui suivent si vous ne voulez pas être perdus des le premier tutorial.
Ne vous attendez pas a devenir des professionnels du cracking dans les heures qui suivent car cela prend énormément de temps et de patience, ainsi que de pratique. La raison pour laquelle j'ai décidé de faire de site: tous les cours et tutoriaux que l'on trouve sur le web requièrent une certaine connaissance préalable, ce qui rend les choses difficiles pour les newbies. Vous êtes tombés au bon endroit car je vais progressivement vous expliquer les choses à savoir en essayant de ne pas vous perdre en chemin!
Il faut pour reverser une certaine dose d'humilité. S'il y a une chose à retenir, c'est que "c'est en forgeant que l'on devient forgeron." Nous allons bien sur commencer par des choses simples et basiques, donc ne vous en faites pas... vous apprendrez pas à pas.
Vous trouverez tous les outils nécessaires à nos besoins dans la section Downloads , bien qu'ils soient disponibles partout sur l'internet pour ceux qui savent bien chercher. Ceci dit, avant de vous lancer lisez bien cette section descriptive.
Il me semble important de faire une différenciation entre le cracking et le reverse-engineering. Le reverse-engineering (parfois appelé "reversing") n'est pas du cracking à proprement parlé: il consiste à modifier le comportement d'un programme, et a un but qui reste strictement légal, en ce sens qu'il ne mène pas vers des déviances de Copyright. Cela peut mener à l'ajout ou à la suppression de menus dans un programme par exemple, mais à des fins exclusivement personnels (il est illégal de redistribuer un programme modifie de sa forme originale).
Le cracking en revanche, consiste à passer outre les protections d'une application, de manière à l'utiliser gratuitement et sans limitation de temps. C'est un domaine vaste et complexe, et dans lequel des teams se forment et codent des programmes destinés à être crackés, sans copyright et sans limitation. Il y a une grande variété de protections dans un programme. Elle peuvent être de type :
* "Time Trial" (version d'essai qui expire),
* "Registration code" ou encore "Serial Registration" (entrer un code d'enregistrement pour faire marcher le programme sans
limitation et le posséder légalement -- a son nom)
* "Nag-Screen" (petit écran qui s'affiche au démarrage du programme vous rappelant gentiment que vous ne
possédez pas de licence)
* "CD-Check" (il faut avoir une copie originale du CD pour utiliser le programme) etc...
Pour supprimer ces protections, il faut décomposer le programme, en l'observant et en repérant les lignes de code qui interviennent pour l'exécution de ces protections. Il y a souvent vous le verrez, plusieurs façons différentes de cracker un même programme. On peut trouver un serial en debuggant, sauter directement vers la bonne fenêtre d'enregistrement en modifiant un octet (vous comprendrez plus loin dans votre progression ce qu'est un octet - byte en Anglais), supprimer un Nag-Screen (écran de démarrage toujours pénible a fermer avant d'entrer dans l'application)... et il y a bien d'autres techniques.
Selon ma définition de ces termes, supprimer un Nag ou ajouter un patch graphique (modifier le nom de l'application dans la barre de titre, par exemple) tient plutôt du Reversing que du Cracking.
Patcher le programme pour qu'il vous enregistre avec n'importe quel numéro de série tient donc du Cracking: cependant voyons la réalité en face: l'un ne va pas sans l'autre, c'est pourquoi la définition de ces deux termes reste confuse a ce jour.
Pour leur utilisation, vous devrez attendre de vous rendre dans les cours: vous ne lirez ici qu'une présentation brève. Il vous faudra d'abord passer par la case "Présentation du Langage Assembleur"!
1. Les Désassembleurs:
Un désassembleur sert à voir ce qui se passe à l'intérieur d'un programme: cela se traduit par des lignes de code assembleur (dans des langages de programmation varies: C++, Visual Basic, Delphi...) qui vont vous paraître très ésotériques au premier abord, mais tout s'apprend et vous vous apercevrez vite que ce n'est pas si compliqué que ça peut vous sembler.
Les programmeurs traduisent ce langage spécifique en code source, c'est à dire les compilent en assembleur qui ne peut être lu que par l'environnement dans lequel il a été compilé (un programme compilé sous Windows ne pourra être lu que dans cet environnement).
Les plus connus sont W32Dasm (nous utiliserons la version 8.9) qui est devenu obsolète, OllyDbg (version 1.10), ou encore IDA (que nous ne verrons pas). Ces deux programmes intègrent également un debugger (module qui permet d'exécuter ligne par ligne le code du programme à reverser: cf. ci-dessous).
2. Les Debuggers:
Un debugger (débogueur en Français) permet de déboguer un logiciel, souvent en utilisant les valeurs espionnes en exécutant le programme pas a pas. En général, un debugger permet d'arrêter le programme à certains endroits afin de visualiser l'état des différents paramètres à l'instant précis du passage à ce point d'arrêt, et ensuite de poursuivre l'exécution du programme à partir de ce point.
A l'origine, son utilisation est strictement "professionnelle", en ce sens qu'elle permet d'en trouver les erreurs et les corriger.
Le plus connu est le mighty SoftICE (que j'ai en horreur vu 1- sa difficulté d'utilisation et 2- le fait qu'il devient de plus en plus obsolète, mais dont la version 4.05 fonctionne sous Windows). Cependant il y en a d'autres très efficaces tels qu' OllyDbg qui fait également office de debugger (il se trouve qu'OllyDbg est bien plus puissant que W32Dasm, mais son utilisation légèrement plus complexe même s'il reste relativement accessible aux newbies).
3. Les Editeurs Hexadécimaux:
Un éditeur hexadécimal comme son nom l'indique, va faire apparaître un programme sous forme hexadécimale: c'est ce qui va nous permettre de modifier physiquement le comportement du programme en changeant la valeurs des octets.
Il y en a bien sur plusieurs très efficaces et simples d'utilisation, mais mon éditeur de prédilection est WinHex (dont nous utiliserons la version 10.2). Pour référence, il existe aussi Hedit, ou bien HexWorks.
4. Les File Analysers (Analyseurs de Fichier):
Ce sont des petits programmes qui vont nous indiquer si un programme a été compilé (et souvent sous quel environnement, de manière à utiliser le bon pour le décompiler), ainsi que toutes sortes d'informations qui peuvent s'avérer très utiles pour le reversing (Entry Point...).
On trouve File Inspector XL par exemple, mais nous en verrons d'autres (comme StudPE ou PEiD (le plus utilisé) qui vont nous indiquer si le programme est compressé et le langage dans lequel il a été codé).
Pour obtenir des manuels d'utilisation de ces outils, vous pouvez vous rendre dans la section Download. Vous pourrez les télécharger en .zip ou .rar (Français et Anglais).
Bref, trève d'inepties! Pour enfin passer aux choses sérieuses et découvrir le langage assembleur, rendez-vous sur le Tuto Assembleur ...