1. Introduction
Tout d'abord bonjour à tous et bienvenus sur notre page !
Si vous avez atterris sur ce texte c'est que le lien vous concernait et je supposerai donc que vous n'y connaissez à peu près QUE DALLE ;) !
L'objectif ici sera de vous armer au mieux pour commencer dans l'art du crack car contrairement à ce qu'on pourrait croire il ne suffit pas d'avoir de la volonté (ce sera certes vachement utile :) ) mais il faut surtout se préparer.
En gros, cracker c'est passer à l'attaque de protections ennemies et, à priori, sans matériel (outils) et sans plan d'invasion vous allez droit à la défaite (ben ouais, c'est pas très différent des récoltelesressourcesetcontruitsdesunités-like et des 3Dmachinchoz-like).
2. Un petit mot de philosophie (?)
Un point important est de vous demander pourquoi vous voulez cracker.
Plusieurs réponses possibles :
1) pour le fun
-> ça se défend, mais il vaut mieux avoir du temps devant vous...jouez plutôt à ot' choz !
2) j'adore l'informatique mais j'ai pas de blé
-> tiens, toi non plus ;)
3) la variante est aussi "à mort le shareware et vive le freeware ... bon je retourne à UNIX ... où est le bon vieux temps de l'Amiga ?"
-> tout à fait d'accord avec toi, on est des passionnés oui ou merde... et la beauté du geste ?
-> ras-le-bol des gens qui veulent se faire des tunes sur le dos des autres (hep, les Gates-like, on engage chez Kro$oft !)
4) j'ai envie d'apprendre
-> voilà un garçon (une fille ... mais c plus rare :( ) qu'il (elle) est bien !
5) pardon, je me suis trompé de page, je cherchais PLAYBOY.COM...
-> y a pas de mal, c'est par ici http://www.playboy.com
Bon ben maintenant, biffez les mentions inutiles.
En ce qui me concerne je joins l'utile à l'agréable... avec le 4 je débouche sur le 2 et le 3 !
(N.D.P. : ça n'engage que moi, pour Artex et Taz, voyez avec eux ;) )
3. Petit lexique
En fait, vous venez d'entrer dans un univers très actif et très riche (non, non, y a pas que notre site 8-) ) et vous serez donc confrontés à quelques appellations :
programme (nom commun m.s.)
-> ensemble d'instructions écrites dans un langage de programmation en vue de la réalisation de tâches par un ordinateur
langages de programmation (nom commun m.s.)
-> langages dans lesquels sont décrites les opérations que l'ordinateur devra effectuer (ceux-ci devront ensuite être compilés)
-> ces langages sont dits de haut (pascal-C-basic ...) et bas (assembleur) niveau en fonction de leur rapprochement du langage machine (celui "compris" par vos bécanes)
compiler (verbe)
-> transformer un texte en langage de programmation en instructions compréhensibles et exécutables par l'ordinateur (ceci se fait à l'aide de compilateurs spécifiques aux langages utilisés pour arriver en définitive à la même chose : du code machine)
crack (nom commun m.s.)
-> programme ou processus modifiant un autre programme afin d'en supprimer les restrictions et/ou les protections
cracker (verbe 1e conj.)
-> action de réaliser un crack
cracker (nom commun m.s.)
ou crackeur (je suppose qu'on peut aussi dire crackeuse) en vf, appelé aussi déplombeur dans la préhistoire de l'informatique
-> facile, c'est celui qui cracke :)
+cracker (nom commun m.s.)
-> le plus (+) devant un nick signifie que la personne a été reconnue comme ayant un haut niveau de maîtrise de son art (personnellement j'y ai vraiment pas encore droit :( )
tut (de l'anglais tutorial)
-> en gros : leçon
serial (de l'anglais)
-> numéro de série (abrév. s/n -serial number) fréquemment utilisé dans les sharewares, en conjonction avec votre nom pour avoir accès de manière illimitée et complète à un programme (après avoir payé oeuf corse !)
shareware (de l'anglais)
-> traduit par "partagiciel" (harfharfharf :)))))) - c'est encore pire que cédérom)
-> programme pouvant être utilisé à l'essai et nécessitant un "enregistrement" (register) pour une utilisation illimitée et complète
freeware (de l'anglais)
-> programme gratos
newbies (de l'anglais)
-> débutants (ouais, c toi ;) )
-> disons que communément il y a une gradation : lamers / newbies / intermediate / advanced / elite
-> pour info, une fois qu'on est lancé, après un dizaine de cracks on a bien pigé le système et on peut s'imaginer "intermediate", par contre pour aller plus loin 'faut être costaud ! (non, je n'en suis pas non plus :( )
... à compléter
4. Styles de protections
Bien, on entre dans le vif du sujet.
Pour le moment, puisqu'il s'agit d'une approche pour débutants, nous traiterons uniquement des sharewares (excusez-moi mais je ne peux vraiment pas écrire "partagiciel", il me faut chaque fois au moins 10 minutes pour me remettre).
Bien que l'on retrouve souvent des protections identiques dans les softs commerciaux, les sharewares sont ceux auxquels vous serez le plus souvent confrontés et ceux que vous voudrez certainement utiliser plus longuement.
Là, on n'a pas 36 styles différents.
En résumé, vous avez des combinaisons de :
1. limitation à X jours et son pendant, à Y utilisations
2. version bridée (incomplète à l'utilisation mais il s'agit quand même du soft complet)
3. les versions "démo" (tout n'est pas dedans)
C'est tout ...
Evidemment on coince pour les démos car tout ne se trouve pas dans le soft que vous utilisez et il faudra acheter la version complète pour accéder à tout (quoi que... ce n'est pas toujours vrai, mais bon, c'est une autre histoire).
Revenons à 1 et 2 ...
Comment ça se passe alors si on veut passer outre les limitations ?
Ben 'faut allonger du blé (en principe). Vous envoyez les $ et on vous renvoie quelque chose.
Ce quelque chose sera soit :
1. un numéro de série calculé à partir de votre nom et/ou société et/ou e-mail et/ou votre pointure ..... qu'il faut rentrer quelque part dans le programme
2. un fichier particulier à placer dans le répertoire du programme (ou en fait n'importe où, mais y a quand même des habitudes) du genre "monprogdelamortquitue.LIC" ou "vousavezraqué.REG"
On en reste là pour le moment.
5. Les outils
Comme je vous le disais tout à l'heure, il est nécessaire de posséder le matériel ad hoc pour se lancer.
De quoi avons-nous besoin ?
1. une tête
-> ça en principe vous avez
2. une connaissance en assembleur
-> ça c'est déjà moins évident, nous aurons un article à ce sujet
3. un désassembleur
-> ah, ça se complique; il s'agit de convertir un programme binaire en instructions un peu moins obscures que des 0 et des 1
-> pour ce faire, 2 outils : WDasm (la dernière version est la 89) et IDA
4. un debugger
-> c'est un programme qui permet d'interrompre le cours d'un autre programme, de voir ce qui s'y passe, de modifier la mémoire et plein d'autres petits trucs sympas
-> nous avons pour ça le célébrissime SoftIce pour Windows (version 3.20 et un patch 3.22)
5. un éditeur hexadécimal
-> Hexworkshop, HexEdit, UltraEdit, ... y en a plein
-> vous pourrez de cette manière modifier votre cible
6. de la patience
7. du temps
En option :
8. un compilateur quelconque pour réaliser vos propres cracks et les diffuser (personnellement j'utilise TAsm (Turbo Assembler))
9. des cloppes
10. une vodka martini
6. Les cibles
Supposons que nous utilisons Win 9x (pas NT, pas Linux, pas MacOS, pas OS2 ....)
Ce à quoi vous pourrez être confrontés sera soit :
1. un programme DOS
2. un programme Win 16 bits
3. un programme Win 32 bits (les plus courants de nos jours)
Comme vous êtes newbies, on oubliera les 2 premiers pour l'instant car les applications Win 32 bits sont beaucoup plus simples à cracker.
Les softs 32 bits ont tous la même apparence : des instructions sur des registres 32 bits et des sauts ... (cool les mecs, je sais c très résumé :) )
Qu'ils soient écrits en C++ ou directement en assembleur, ils se ressemblent beaucoup au point de vue de leur structure.
De manière synthétique, on dira que l'on trouve 2 parties distinctes dans un programme :
1. le code (les programme en lui-même, les instructions)
2. les données (variables, chaînes de caractères, constantes, ...)
Les instructions ont toutes des adresses en mémoire par lesquelles on peut les atteindre (les données aussi d'ailleurs :) ).
Quand vous désassemblez un programme, vous obtenez dans la première colonne les adresses et si vous regardez directement en mémoire, vous retrouverez les mêmes codes aux mêmes adresses.
Ceci n'est pas vrai pour les DLL (voir plus loin) dont les adresses varient en fonction des autres DLL en mémoire.
En d'autres termes si vous voyez sur un listing un prog qui commence en 00400000h vous le verrez au même endroit en mémoire. Tandis qu'en regardant un listing de DLL, il commencera en 10001000h mais pas en mémoire ....
Le cas particulier est le Visual Basic de M$. Ne commencez pas par là, vous allez vous noyer et la procédure n'est pas la même (c'est un peu plus subtil) pour au moins 2 raisons; la première réside dans le fait que les chaînes de caractères sont stockées autrement (longstrings) et que la majorité des opérations se font par des appels à des fonctions contenues dans une librairie gigantesque.
Je pense qu'on aura bien quelque part des tuts à ce propos.
Autre petit détail à propos des programmes. Si vous éditez directement un programme avec un éditeur hexa, vous verrez que les adresses commencent à 0.
Pas la peine de chercher 00401568h, vous ne trouverez pas car les adresses sont relatives.
Si vous souhaitez modifier une valeur directement, référez-vous à ce qui est écrit tout en bas de l'écran de WDasm (adresse directe et adresse relative).
Par exemple, vous voulez changer un 74h en 75h à l'adresse 00401234h, regardez ce qui est écrit à côte de 00401234h -> ça pourrait être 0000145Ah par ex.
Puis ouvrez le programme avec un éditeur hexa et allez en 0000145Ah et ... miracle, vous trouvez votre 74h; y a plus qu'à le changer en 75h et sauver...
ATTENTION, si vous essayez de sauver vos modifications alors que WDasm est ouvert pour le même programme, vous aurez un message d'erreur. Il faudra d'abord fermer WDasm et ensuite enregistrer.
Petit truc et habitude intéressante : avant d'effectuer une quelconque modification d'un soft, faites-en une copie et désassemblez cette copie. L'avantage est double; vous n'aurez plus le problème précédent et surtout si les changements foirent, vous aurez toujours une version vierge du programme.
7. Comment faire ?
C'est assez difficile de faire des généralités, mais on retrouve quand même certains principes.
Je dois d'abord vous mettre en garde, la protection d'un soft n'est pas nécessairement dans le soft lui-même. En effet, il existe les DLL (oui, vous avez déjà entendu parler de ces machins quand Windows vous affiche des messages du genre "Error - Cannot find MSVCRT.DLL"). Ces DLL sont des librairies contenant des parties de code utilisées par plusieurs programmes.
On trouve régulièrement des vérif de sérials ou de temps écoulé dans ces DLL.
Un procédé qui marche assez bien est de rentrer un N° de série au hasard ou d'avancer l'horloge de votre ordinateur d'un an (selon le cas) pour voir ce qui s'affiche sur l'écran.
Vous le notez et vous laissez Windows rechercher ce texte pour vous (Démarrer->rechercher->fichier (contenant le texte....) ).
Souvent il le trouvera dans le répertoire même, mais pas toujours où vous l'attendiez.
Une fois la cible déterminée, il faut la désassembler.
Pour la suite, c'est très variable, il faut consulter les tuts pour découvrir les différentes méthodes.
8. Note sur l'hexadécimal
Je vous ai dit que les programmes étaient un suite de 0 et de 1, mais l'usage veut que la représentation se fasse en base 16 (hexadécimal).
En fait, nous comptons en base 10 (décimal) : 0 1 2 3 4 5 6 7 8 9, mais il serait possible de compter en base n'importe quoi. Un de ces n'importe quoi est la base 16 (en réalité c'est pas n'importe quoi, ça a à voir avec l'architecture des processeurs) où les nombres sont représentés par 0 1 2 3 4 5 6 7 8 9 A(10) B(11) C(12) D(13) E(14) F(15), ensuite on en combine 2 comme en décimal 10(16) 11(17) 12(18) 13(19) 14(20) 15(21) 16(22) 17(23) 18(24) 19(25) 1A(26) 1B(27) 1C(28) 1D(29) 1E(30) 1F(31), etc. ...
Donc attention à ce que vous voyez ! Par convention on fait suivre un nombre hexadécimal par un 'h' (ex. 16h = 22d(écimal) ).
Je vous dis ça car on retrouve tout le temps des comparaisons dans les programmes :
CMP eax, 11h -> compare eax avec 17 et PAS 11, c'est une source de confusion fréquente au début.
Cette représentation hexa s'utilise donc pour l'édition de la mémoire de l'ordinateur.
Exemple :
adresses contenu de la mémoire Instructions correspondantes au contenu
:1001FCF0 8B7C2418 mov edi, dword ptr [esp+18]
:1001FCF4 8B742424 mov esi, dword ptr [esp+24]
:1001FCF8 3BF7 cmp esi, edi
:1001FCFA 7446 je 1001FD42
:1001FCFC 8BDF mov ebx, edi
:1001FCFE C1E902 shr ecx, 02
:1001FD01 85C9 test ecx, ecx
:1001FD03 741A je 1001FD1F
Les différentes combinaisons (colonne 2) sont des encodages d'instructions (colonne 3).
Vous apprendrez vite à modifier ces valeurs à votre avantage et je vous en donne un exemple tout de suite.
Prenons la dernière ligne :
:1001FD03 741A je 1001FD1F
Donc, à l'adresse 1001FD03, le programme effectue un saut si le test précédent est égal à 0 et cela se code 741A (hexadécimal), 74 étant les code pour "JE" (Jump if Equal ou JZ -> Jump if Zero, c la même chose)
Imaginons maintenant qu'on souhaite faire faire le contraire à ce programme, c'est-à-dire exécuter le saut si le résultat est différent de zéro.
Pour ça on doit utiliser l'instruction JNZ (ou JNE) dont le code est 75 (hexa).
On remplace donc 74 par 75 à l'adresse 1001FD03 (avec un éditeur hexa) et on a : 751A.
En traduction ça donnera :
:1001FD03 751A jne 1001FD1F
V'là c simple...
9. Conclusion
Voilà, je ne prétendais pas écrire un texte exhaustif, mais vraiment un tout premier survol pour les débutants.
Maintenant consultez des exemples pratiques et essayez par vous-même.
Apprenez à utiliser SoftIce, ce sera votre meilleur ami dans le futur ;)
Un dernier conseil, n'essayez pas directement de comprendre comment un serial est calculé, ce serait très frustrant et rarement concluant au début.
Imprégnez-vous de l'allure des programmes, retrouvez de trucs qui se répètent de l'un à l'autre et vous avancerez...
Gardez UNE chose à l'esprit : le programme devra TOUJOURS chercher à un endroit ou un autre si vous êtes "registered" ou non, que ce soit par la présence d'un fichier ou quelque chose d'écrit dans la base de registre, il lui faudra faire cette vérification et renvoyer une valeur (un "flag" = drapeau) qui indiquera par la suite ce que vous pouvez faire ou non.
C'est là qu'il faut porter son attention...
Dernière chose, lisez beaucoup d'exemples ... personnellement, j'ai consulté environ 300 pages de texte avant de m'y mettre.
Bonne chance,
Psyche
--------------------------------------------------------------------------------------------------------