Professional Documents
Culture Documents
ime
(1 Partie)
Mon objectif :
tout vous expliquer de A Z pour que vous puissiez comprendre
comment fonctionne le Cracking. Il va falloir que vous lisiez bien tout attentivement
de faon bien comprendre le cours...
Pour faire votre premier crack, on a choisi un programme super fastoche cracker pour vous montrer
un truc super classique, le saut conditionnel ;))
Comme son nom l'indique, un saut conditionnel, est un passage du programme en assembleur qui fait
que, si une condition est remplie ou non, un " saut "vers la suite du programme d'effectue ou non.
Par exemple, une barre de dfilement s'active a condition que vous cliquiez avec le bouton de gauche
de la souris...Ainsi, le bouton droit n'aura aucun effet...
Tout d'abord, il faut un logiciel, qui s'appelle un dsassembleur. Comme son nom
l'indique, il sert dsassembler un fichier de faon le rendre lisible et plus tard
comprhensible. Pour ma part, j'utilise WinDasm 8.9 facile trouver sur le net :)
Il faut aussi se qu'on appelle un diteur hxadcimal. Comme son nom l'indique
aussi, il sert faire apparaitre un fichier sous forme hxadcimal pour pouvoir
remplacer un octet par un autre, de faon a pouvoir quand mme executer le prog
aprs modification(s) prcise(s). Mon prfer est HexWorks 3.X, mais il y a ausi
WinHex 10.2 ...N'importe quel diteur hexadecimal fera l'affaire :)
Enfin, il vous faudra dans tous les cas (enfin presque) un cerveau rveill et en tat
de marche ;)
Comme c'est le premier lancement de WinDasm, il faut choisir la fonte par default
que l'on va utiliser...Faites :
Disassembler =>Font... => Select Font =>...
Et pour sauvegarder la fonte choisie, faite :
Disassembler => Font => Save Default Font.
Ouch !
Ben ouais, c'est ca l'assembleur ;)
Ce sont de petites instructions qui s'enchanent pour former un tout, un programme.
Ok, vous devez peut-tre vous dire " bordl c'est quoi ce truc, je quitte a et je
retourne tlcharger des cracks tous faits!" Si c'est ce que vous vous dites, alors
quittez ce tutorial, et vous serez oblig d'attendre sur le net que les cracks sortent, et
surtout, vous ratterez le plus important, la satisfaction personnelle et le monde
superbe qu'est l'assembleur.
Par contre si vous vous dites " bordl c'est quoi ce truc, c'est chelou mais j'ai quand
mme envie de savoir comment on s'y prend pour cracker" ; alors la suite de ce
tutorial est pour vous ;))
Bon, ce qui apparait l'cran, s'appelle un listing. C'est l dessus que l'ont va
tudier.
Rcapitulons. En dmarrant Start Clean, une option nous propose de vous enregistrer. Allez-y et
entrez un truc bidon puis faite Ok. Si a marche, c'est que vous avez un mga-bol du fait qu'il y des
possibilites quasiment infines ! Sinon le prog vous affiche " Incorrect code !". Un saut conditionnel est
donc prsent :)) Dans la bote de dialogue en question o l'on doit entrer son code et-tout, il y a deux
cellules de saisie. Celle du nom et celle du code ;) L'une s'appelle "name", et l'autre "code"
Lancez ensuite une recherche automatique sur le mot "name"; ( ne rentrez pas
les gullemets ), car il fait partie de la bote de dialogue se chargeant de la saisie du
code. On pourrait aussi rechercher " code "...
Pour faire cette recherche, faites: Search => Find Text..
Et l, vous allez forcement tomber sur quelque chose. Cependant, il se peut qu'il y ait
plusieurs fois ce mot dans le programme...donc, par mesure de prudence, faites
"Suivant"
Vous verrez alors que vous arrivez a d'autre endroit du programme...Alors, que
choisir ??
Revenez au debut du code ( Goto => Goto Code Start.. ou bien clic sur le bouton
avec une lampe marqu Cd Start en dessous dans la barre de bouton de w32dasm).
Refaite une recherche et arretez vous a la seconde occurance de " name " (qui doit
etre trouve a la ligne 473 comme indiqu dans la photo d'cran ci-dessous). On se
trouve alors un endroit particulirement interressant. Mais alors pourquoi cet
endroit est t-il si interessant me direz-vous ???
Parce que si l'on observe bien cette petite partie (ce qu'il y a avant et apres...), on
remarque que l'indication "*Reference To: ADVAPI32. RegCreateKey, Ord: 00C6h
"est affiche.
Cette indication de fonction indique que Start Clean va inscrire un truc dans la base
de registre de Windows, sans doute votre nom et code...a condition que votre code
soit bon :). En franais pour ceux qui sont allergiques l'anglais RegCreateKey veux
dire Crer une clef dans le registre (Reg pour Register).
Egalit signifie ici "deux valeur identique"... Lorsque que le programme va comparez
votre code avec le vrai, il va indiquez si il sont "egaux" ou non...
Si le saut est de forme JE, alors on dira que "le saut se fait si les codes sont gaux".
Si le saut est de la forme JNE, alors on diras que "le saut se fait si les codes ne sont
pas egaux"...
Il existe un type de saut appel inconditionnel, c'est a dire que le saut s'effectue sans
conditions...
Ce saut s'ecrit JMP en assembleur, mais cela ne nous serviras pas pour ce tutorial...
Donc, pour revenir a StartClean, il va falloir qu'on trouve tout les sauts qu'il y a dans
le bout de code ci dessus, puis qu'on analyse ou est-ce qu'il nous font sauter...
On est chanceux, ici il n'y a qu'un seul saut qui est a l'adresse 004011EB, et qui est
situ juste apres un test (Un TEST est l'instruction qui determine si une valeur est
egale a zero...).
On a donc :
Il faut bien comprendre que souvent, un numero de serie est considere comme valide
lorsque la valeur du test est egale a zero. Autrement, dans le cas ou le test n'est pas
egale a zero, alors ce numero est reconnu comme incorrecte... C'est un peu comme
le courant electrique : 0=ouvert et 1=fermer...Compris ?
Donc, "Sauter a l'adresse 00401271 si la valeur teste n'est pas egale a zero."
siginfie que si le code est mauvais, on va "sauter" tout ce qu'il y a entre l'adresse
004011EB (l'endroit d'o l'on saute) et l'adresse 00401271 (l'endroit ou le saut nous
amene...).
Par contre, si le code est bon, le saut ne s'effectue pas et le programme va continuer
son listing en passant par " * Reference To: ADVAPI32.RegCreateKey " et " *
Reference To: ADVAPI32.RegCloseKey " qui represente la procdure de cration de
votre code perso dans la base de registre de Windows 9x. Cette tape est
importante comprendre et si vous ne l'avez pas comprise relisez la plus
attentivement...
L 'hxadcimal
D'abord oubliez la faon dons vous avez appris compter. Parce qu' en hxa, on
compte le la faon suivante :
123456789ABCDEF
Voici une petite liste qui vous indique la valeur Hexadecimale de quelque instruction
Assembleur.
Il existe encore beaucoup d'autres instruction, mais qui sont peu interessantes a
notre stade ;)
Regardez la valeur " 0F8580000000 " se trouvant la gauche du "jne" dans le listing.
C'est en fait sa valeur en assembleur convertie en hxadcimal. 0F85 c'est JNE et
80000000 c'est le bloc memoire ou l'on saute... Un bloc mmoire, si vous ne savez
pas, c'est un peut comme un petit carr de mmoire lctronique qui va contenir une
information. Par exemple si vous collez un post-it avec crit dessus " achte du pain
pour ce soir "sur un porte, et ben la porte c'est le bloc mmoire et le post-it
l'information ;)
/* NB: Message de pifoman : Si votre diteur hxadcimal vous dit qu'il ne peut
enregistrer les modifications enlevez l'attribut lecture seule de STARTCLN.EXE.Si
cela ne suffit pas fermez le dsassembleur w32dasm 8.93. */
Maintenant, lancer le programme ainsi modifie...
Quoi ? La boite de dialogue d'enregistrement est toujours prsente ? Normal puisque le programme
n'a pas encore enregistrer votre code dans la base de registre de Windows 9x. il faut donc cliquer sur
" REGISTER " et rentrer un nom, un code bidon, puis cliquer sur Ok.
Et l ca marche! Car le saut "jne" n'existe plus, donc le prog continue tranquilement sont listing en
passant par les " * Reference To: ADVAPI32.RegCreateKeyExA " et " * Reference To: ADVAPI32.
RegCloseKey ". Le prog est donc complet et illimit. Vous pourrez aussi observer qu'il inscrit un
code personnel qu'il s'est auto-gnrer dans la base de registre de Windows9x ;))
Miracle ? Non, assembleur ;)))
PS: j'dit pas ca pour vous dcouragez, mais pour un cracker consquant, un tel
raisonnement, observations et crack comprit dans ce type de scurit ne prend que
deux trois minutes et encore... Alors entrainez vous bien et vous verrez, c'est pas si
compliquer que a en l'air ;)
Tutorial de Cracking
ime
(2 Partie)
Dans cette seconde partie de notre tutorial, nous allons aborder diffrents
raisonnement pour cracker, toujours avec StartClean...(le pauvre :( ). Dans cette
partie du cours, je m'adresse particulierement aux Newbies qui ont deja essayer de
cracker un truc mais qui ont pas russi, sans comprendre pourquoi...
Imaginez le contenu d'un programme :
Il y a des menus, un titre en haut de la fentre, une barre d'tat, des boites de dialogues....
Tous ces elements contiennent du texte (menu "Fichier", "Erreur 806...")
Eh ben, WinDasm permet de retrouver ce texte a l'interieur de l'executable !
C'est ce que nous avons deja fait dans la premiere partie du cours (souvenez vous de la
recherche sur le mot "name"), sauf que maintenant, je vais expliquer un raisonnement que
beaucoup de newbies ont mais qui est erron...
Lorsque l'on rentre un code au pif, on tombe sur la boite de dialog "Incorrect Code"...
Reflechissons donc deux secondes : ce message ne s'affiche qu'a condition que le
code soit faux...
Donc, si on arrive a retrouver ce message, on pourrait faire en sorte qu'il ne s'affiche
plus (en "noppant" un saut conditionnel par exemple...) Essayons ce raisonement
dans WinDasm...:
Lancer Windasm.
Desassembler le fichier StartClean. (cf cours de crack 1)
Faites Refs => String Data References....
Bon, balladez vous dedans jusqu'a ce que vous trouviez la phrase "Incorrect Code"...
Double cliquez sur cette phrase : vous tes amen a l'endroit precis ou on y fait
rfrence !
Cependant, de la mme manire qu'il y avait plusieurs fois le mot "name" dans le 1er
cours, verifiez que "Incorrect Code" n'est pas repet plusieurs fois dans le
programme...(double cliquez plusieurs fois dessus)
Par chance, il n'y a qu'une seule occurance a cette phrase !
NB: S'il y avait eu plusieurs occurance, il aurait fallu s'occuper de chacunes de ces
occurances, ou alors determiner celle qui nous interresse (cf 1ere partie du cours).
NB: Si vous comprenez pas d'o sortent les chiffres avant et aprs, faites le
rapprochemment avec le listing.
Explication: En fait, tout ce qu'on a fait, c'est dtourner le message cens nous
indiquer que le code est incorrect...Ce message s'affiche lorsque le programme sait
deja qu'on a entr un faux code.
Si j'ai pris le temps d'expliquer cette erreur, c'est parce que beaucoup de Newbies
tombent dans le piege lors de leur premiers crack. J'espere donc que ce cours aura
eclair certains et prvenu d'autres sur les resultats d'un tel raisonnement ;)
Tutorial de Cracking
ime
(3 Partie)
Dans le second cours, nous avons abord une erreur bien commune a tous les
dbutants... Maintenant, je vais tenter de vous expliquer comment trouver d'autres
endroits "interessants" dans un listing...
Voyons d'abord les differences entre une version shareware et une version
enregistre.
Voici ce qui est susceptible d'appparaitre dans un Shareware :
Dans chacune des fonction LstrxxxA, il y a un "Test eax, eax" suivi d'un saut vers
l'adresse 00401140...
Essayons de "nopper" (cf cour 1) ces deux sauts...
Lancer l'editeur Hexadecimal et faites une recherche sur 85C0742E8D84 (cf cour 2).
Remplacer le 742E par un 9090...Ensuite, faites une nouvelle recherche sur
85C07505BB01 et remplacer le 7505 par un 9090...
Pourquoi ?
Parcequ'on a enlevez les sauts qui s'effectuaient si une des conditions n'etaient pas
remplies...
Tutorial de Cracking
ime
(4 Partie)
Dans cette 4eme partie, nous allons effectuer simplement quelques precisions importantes.
Avant de lire tout ceci, il est prfrable que vous ayez bien compris les cours prcdents.
Comme les sujets abords ne sont pas lis, j'ai prefer les prsenter dans des paragraphes
independants.
Il se trouve que dans un programme, il y a plusieurs fois le mme byte... vous n'avez
qu' rechercher 75 dans le code Hexadecimal de StartClean... Il y en a une bonne
centaine !! Pourtant, chacun de ces 75 n'a qu'une seule et unique adresse : l'offset !
Souvenez vous du dernier cours...on a fait une recherche sur 85C0742E8D84 alors
qu'on voulait juste trouver le code 742E...Si on avait utilis l'offset, on aurait pu aller
directement a l'endroit voulu, sans taper des ribambelles de code hexa...
Vous pouvez voir que l'offset donn par WinDasm est 00002F65h
Le petit h a cot de l'offset, ca ne vous sert a rien, vous l'oubliez :)
Et tous les zros avant le premier chiffre, vous pouvez les oublier aussi :)
On se retrouve donc avec un offset qui est 2F65
Ok! Mais alors, les autres byte de la ligne, c'est quoi leur adresse ?
Voila, c'est pas bien compliqu non ? La seule difficult, c'est de compter en hexa...
Tiens, un truc pour verifier que vous ne vous tes pas tromp : regardez la ligne
suivante :
Malheureusement, je ne peux pas vous faire une liste exhaustive, mais c'est a peu
prs le mme principe pour tous les diteur hexadecimal...
Et si je veux connaitre l'offset d'un byte depuis l'editeur Hexa, je fais comment ?
Bon, la encore je ne peux pas faire une liste complte, mais de facon gnrale,
l'offset apparait dans la barre d'tat de votre diteur hexadecimal...Voici l'exemple de
Hedit (en haut) et de WinHex (en bas) :
Tout dpend du raisonnement qu'on adopte...C'est pour cela qu'il est tres dur de faire un cours qui
permette rllement d'apprendre cracker... Je fais mon possible, mais n'oubliez pas :
NB: Si il n'y a pas de barre de titre, faite une recherche sur le texte contenu dans le
nag...
Maintenant faites OK...le programme va vous renvoyer "Data not Found!" ou un truc
comme ca.
Donc maintenant, en appuyant sur OK, vous allez tomber sur la phrase qui nous
intresse :)
Et bien c'est simple : en general, les programmes windows 9x sont tous en 32bits,
sauf quelque uns...
Si c'est un programme Windows 3.x ou DOS, c'est forcement du 16bits...
Au pire des cas, si vous savez pas, ben vous essayer les deux mthodes ! Compris
?...
NB: Pour certains programmes, vous verrez toujours la fenetre, mais la barre de titre sera vide...
Dans ce cas, il faut voir si il n'y aurait pas juste au dessus (dans le code hexa) une
occurance du style "Shareware.Frm","Form.Shareware" ou un truc qui y
ressemble...(bien sur, j'ai mis "Form.Shareware" parceque c'est le cas de notre
exemple, mais ca correspond en fait a ce qu'il y a d'ecrit dans la barre de titre...vous
pouvez aussi chercher un truc du genre "Form.Nag" ou "Form.Splash" ou un autre
truc qui vous parait suspect...) Si vous trouvez, essayez de le supprimer (avec des
"00") et voyer si ca fonctionne...
Si ca marche pas ou que vous ne trouvez pas, laissez tomber...
OK! ca marche, mais la fenetre principal du programme, pourquoi elle n'apparait plus ?
Alors quel interet de nous faire un cours sur un truc qui ne marche pas !
Du calme !! Qui a dit que ca ne marchait pas ? On a bien virer la fenetre non ? En
fait, ce qui nous gne, c'est juste qu'on peut pas appuyer sur le bouton "OK"... D'ou
la caracteristique suivante : Cette technique n'est valable que si le Nag-Screen ne
requiert aucune action pour activer le programme...
Donc dans le cas ou le nag-screen est "au dessus" du programme deja lanc, cette
technique marche parfaitement... ;) Par contre, n'abusez pas de cette methode car
elle n'est pas tres "fine"...C'est mme plutot bourin... Personnellement je ne l'utilise
que dans les cas ou toutes mes autres tentatives ont echoues...
Arff ! Avez vous deja programm en VisualBasic ? Et bien dans ce language, tres
pratique au demeurant, toutes les fonctions de cration de fenetre, de comparaison
de chaines de caracteres, etc... sont prise en charge par les fameuse DLL qu'il nous
manque tout le temps quand on recupre un programme sur Internet.
Vous savez, les VBRUN300.DLL et autres MSVBVM50.DLL...Et c'est pour ca que
quand vous allez decompiler le programme vous allez rien voir dans les "Data String
References"...
Il y a aussi d'autres programmes qui ne possdent pas de Data String (bien qu'il ne
soit pas programmer en VisualBasic). Dans ce cas, essayez de voir si le code n'est
pas contenu dans un fichier DLL annexe...
Sinon, considerez qu'il n'y a rien a faire (ca serait bien trop dur a expliquer a votre
stade actuel).
Nous aborderons le sujet dans un prochain numero...
Ceci dit, si vous etes confronter a un nag-screen, vous pouvez toujours essayer la
technique dcrite prcdemment ! Avec un peu de chance, a peut marcher :)
Tutorial de Cracking
ime
(5 Partie)
Nous allons maintenant apprendre a faire un patche en langage TurboPascal... Rassurez-vous, aucune
connaissance n'est requise pour suivre ce tutorial !! Enfin, si : ca suppose que vous sachiez cracker un prog ...
Comme je me vois mal vous apprendre a programmez en quelques lecons, je vais vous donner un code source
o vous ne modifierez que quelques lignes en fonction du patch que vous ferez :)
Commencons par la theorie : Ci-Dessous, le code source du patch en question...
Tout ce qui ce trouve aprs les // seront des commentaires... (syntaxe la C/ C++).Pour pouvoir intgrer des
commentaires dans vos programmes en pascal les mettre entre { }. Ce qui est en rouge, c'est ce qu'il faut
changer c'est dire adapater suivant votre programme ... Quand il y a marqu pas touche, c'est pas touche !! ;)
-----------------------------------------------Dbut------------------------------------------------------
---
); // Pas touche
Var // Pas touche
Ch:Char; // Pas touche
I:Byte; // Pas touche
F:File; // Pas touche
FN:file of byte; // Pas touche
Size:longint; // Pas touche
Procedure Presentation; // Pas touche
Begin // Pas touche
Gotoxy(2,3); // Pas touche
Writeln('');
Writeln('gREETiNG : mes amis, monchien...');
0F =>> 5EB
84 =>> 5EC
80 =>> 5ED
00 =>> 5EE
00 =>> 5EF
00 =>> 5F0
Voil ! On a tout ce dont on a besoin :)) Bon, ben voila ce que ca donne :
-----------------------------------------------Dbut----------------------------------------------
-----------
Program crackpatch;
Uses Crt;
A : Longint;
B : Byte;
End =
(
(A:$5EB;B:$90),
(A:$5EC;B:$90),
(A:$5ED;B:$90),
(A:$5EE;B:$90),
(A:$5EF;B:$90),
(A:$5F0;B:$90)
);
Var
Ch:Char;
I:Byte;
F:File;
FN:file of byte;
Size:longint;
Procedure Presentation;
Begin
Gotoxy(2,3);
Textcolor(3);
Writeln ('');
Writeln('cRACk fOR : StartClean v1.2');
Writeln('cRACk tYPE : Enter Any registration name and code!');
Writeln('cRACKED bY : Smeita');
Writeln('');
Writeln('gREETiNG : A tous ceux qui lisent mon tutorial');
Writeln ('');
end;
Begin
Presentation;
Assign(F,'STARTCLN.EXE ');
{$I-} Reset(F,1); {$I+}
If IOResult <> 0 then
begin
halt(0);
end;
For I:=1 to 6 do
Begin
Seek(F,A[I].A);
Ch:=Char(A[I].B);
Blockwrite(F,Ch,1);
End;
Writeln('CrACk Successful');
End.
----------------------------------------Fin---------------------------------------------------
Alors l, si le compilateur vous dit qu'il y a une erreur, ca peut venir de plusieurs
endroits :
D'abord, vrifiez que vous n'avez pas mis de virgule la dernire ligne des offset.
Ensuite, assurez-vous d'avoir bien compt le nombre de changements et de l'avoir
indiqu au dbut du crack et a la fin du crack... Enfin, regardez si vous n'avez pas
mis une apostrophe dans les "Writeln"...
Normalement, ce sont ces erreurs qui reviennent le plus souvent...
Si vous avez un autre probleme, essayer de revoir ligne a ligne votre code source...
Ensuite, il vous faudra patcher ce crack avec TPPATCH.EXE, fournit en meme
temps que TPC...
Procdez de la meme manire que pour gnerer le crack.exe :
Normalement, ya un truc en allemand qui vous dit "Fertig"...ben ca veut dire que
ca a march :)
Voila, c'est fini, vous pouvez maintenant distribuer votre crack sur Internet...
Enfin, assurez au moins qu'il fonctionne bien en le testant sur une version "saine"
du programme a cracker.
Pour vous entrainez, essayez de faire le patch du 3me cours. Vous pouvez aussi
essayer de faire les patches correspondant a l'annulation des JE et des JNE (cf
Tutorial de Cracking n4) ...
Tutorial de Cracking
ime
(6 Partie)
Mon objectif : Vous apprendre a vous servir de SoftIce et meme cracker avec SoftIce (tant ka faire
;)
Installer SoftIce
Bon, ne mettons pas la charrue avant les boeufs, et commencons deja par installer SoftIce
correctement :
Enlevez les ';' devant les dll suivantes : kernel32.dll, user32.dll, gdi32.dll.
Recherchez aussi une ligne commencant par ligne INIT= et remplacez l par ceci:
INIT="X;CODE ON;DATA;R;".
Vous avez redemarrez ? Et maintenant, vous vous dites : bon, comment on lance SoftIce ?
Reponse: on le lance pas, car vous etes deja dedans ! En fait, c'est comme dans Alien IV :))
Vous etes en apparence dans windows, mais au fond, ya SoftIce qui veille...
Et des que vous tapez Ctrl+D (ou F5), vous etes dans SoftIce !
Et la, vous allez me dire "mais a koi ca sert le Symbol Loader qu'il m'on mis en raccourci ??"
Et ben ca, c'est si vous voulez tracer un programme depuis sa premiere instruction ! Autant dire que
ca sert pas a grand chose...du moins pas souvent :) Passke, entre le debut d'un programme et son
nagscreen, peut bien avoir des milliers d'instruction...imaginez si faisiez chacune de ces instruction
pas a pas !
Le probleme du debuggeur, c'est que quand vous entrez dedans, vous pouvez etre n'importe ou !!
Je m'explique: windows, ca fait plein plein de truc en tache de fond...(vous imaginez meme pas...) et
comme le debuggueur il sait pas que vous vous interressez qu'a tel ou tel programme, et ben il vous
affiche les instructions en cours au moment ou vous l'appelez.
...Oauis...vous avez l'air perdu...En gros, des que vous faites Ctrl+D, vous tombez n'importe ou dans
windows !! (Meme si vous faite Ctrl+D alors que vous etes dans le programme a cracker..)
Ahhh...En fait on va dire au debuggeur "arretes toi des qu'il y a une fenetre de cree".
C'est alors qu'intervient les fonctions usuelles de windows... Par exemple, quand un
programme cree un fenetre, il utilise souvent la fonction "CreateWindowExA" et
"ShowWindow"...
Donc si on dit a SoftIce "Arretes toi des que la fonction CreateWindowExA intervient",
et ben il nous arretes des que la creation de la fenetre est appellee. Donc on a l'appellant, et on
peut empecher qu'il appelle le nagscreen...vous suivez ??
Bon, en techinque, pour poser un tel point d'arret, il suffit de rentrer dans SoftIce, puis de taper
:
bpx CreateWindowExA
Notes toutes les fonctions ayant un A la fin signifie que ce sont des fonctions 32 bits.
Pour le mode 16 bits enlever simplement le A...
Exemple : GetWindowTextA = GetWindowText
Don't Panic !! Si j'enumere ces fonctions (liste non exhaustive..) c'est juste pour vous montrer quelque
exemples...dans les autres parties du cours, vous apprendrez a vous en servir :)
C'est pas tout, mais faut bien que vous sachiez utiliser un peu SoftIce...Donc voci une liste des
principales commandes de SoftIce...
F8 = permet d'xcuter le programme pas pas tout en rentrant dans les CALL (c'est dire que le
programme appelle une fonction, ou une routine de vrification du serial par exemple...).
Exemple : CALL 000012345 => si ici on fait F8 on rentre dans la fonction.
F10 = la meme chose que F8 mais ne rentre pas dans les CALL : il les xcutent, vous n'avez
simplement pas le dtail de la fonctions ). Si on fait F10 on xcute le CALL mais on ne rentre pas
dedans on va directement a l'instruction suivante...
La nuance entre les deux est tres importantes: Imaginez qu'un Call est une porte donnant sur une
piece ayant elle meme d'autre porte, et ainsi de suite a n'en plus finir...
Et ben, si vous rentrez dans une porte (un CALL) puis, a partir de cette porte, vous entrez dans une
autre, et une autre, et encore une autre.... ben vous vous etes plus qu'eloigner de l'origine... :) c'est
pour ca que F8 est a utiliser avec moderations, et il faut eviter de trop s'enfoncer de call en call...
F12 = permet de sortir d'un CALL et de reprendre l'xcution juste aprs. C'est comme ca que vous
retrouverez l'appelant d'une fonction.(vous etes a l'endroit X, appuyez sur F12 et vous arriverez juste
apres l'endroit Y qui appelle X...)
bpx nom_de_fonction = pour creer un breakpoint sur une fonction (ex: bpx showwindow).
bpm adresse_memoire = pour creer un breakpoint sur une addresse memoire (ex: bpx 0040660).
bc * = supprimmer tous les breakpoints, car quand vous en poser un, il reste jusqu'a ce que vous
l'effaciez....
Voila, vous savez le principal sur l'utilisation de SoftIce... N'hesitez pas a revenir sur cette partie du
tutorial pour revoir les commandes et les fonctions utilise dans SoftIce...
Allez, en cadeau bonux, je vous offre un beau dessin d'une fenetre SoftIce, histoire que vous voyez a
quoi ca ressemble :) Ouais, je sais, ca parait austere vu comme ca, mais en fait c'est bien pratique :)
Tutorial de Cracking
ime
(7 Partie)
Matriel ncessaire :
SoftIce
Les protections :
Registration par code
Un Nagscreen au lancement
Commencez par installer Start Clean (et ouais ca aide si on veut le cracker non ? )
Vous allez voir que choper un serial pour StartClean est trs, mais trs facile...
Mais cela constitue, tout de mme, une bonne introduction l'utilisation de SoftIce.
Commencons... Lancez Start Clean et lorsque le nag apparrait, cliquez sur Register...
Renseignez les champs : mettez votre nom (pour moi julien Lemaire ou pseudo peu importe) et un
serial bidon (12345).
Appuyez sur Ok, et une boite de dialogue apparait avec 'Incorrect code!'.
Et oui, on ne chope pas un serial valable avec la chance, vous croyez quoi !!!!
Rpetez l'opration prcedente mais n'appuyez pas sur Ok. Maintenant allez sous SoftIce pour cela
faites Ctrl+D et posez un "bpx Getdlgitemtexta".
(cette commande de SoftIce permet de poser un point d'arret sur les "objet" de la fenetre ou vous
rentrez le nom et le numero de serie...Comme ca, des que StartClean va regarder ce que vous avez
rentr comme serial, on va arriver sur SoftIce et on pourra suivre les operation pas-a-pas :)
Ensuite sortez de SoftIce et appuyez sur Ok.
L, regardez dans la fentre des registres (tout en haut...), et plus spcialement la ou il y a marque
"EAX".
(Dans la fenetre des registres, vous pouvez voir les valeur de tout les registres memoire un instant
donn. Tous les registres sont interressant a observer.
En fait, il est tres utile de les regarder a chaque pas que l'on effectue sous SoftIce.
C'est indispensable pour trouver un serial...Et n'oubliez pas que les registre sont en Hexa !!)
La valeur de EAX est de 0000000E. Tiens, bizarre ca ne serait pas la longueur de notre nom ?
Et oui 0E en dcimal ca donne 14 (il y a 14 lettres dansJulien Lemaire !!).
(Si vous voulez convertir une valeur hxadcimale en dcimale tapez "? valeur_hexa" ou "?
nom_du_registre")
Maintenant, faites d esp+18 et dans la fentre des donnes et on voit....rien...pas grave continuons..
(La fenetre des donnes est la partie de SoftIce ou il y a des trucs du style de ce qu'on peut voir dans
un editeur hexadecimal...et "d nom_du_registre" affiche les infos contenu a l'adresse du registre...
C'est souvent grace a cette commande qu'on peut trouver un serial)
La zone de saisie que l'on trace pour l'instant semble etre celui o l'on a rentr notre nom...
En effet, chaque zone de saisie est traite l'une apres l'autre. De facon general, l'ordre dans lequel
elle sont traits est concide souvent avec l'ordre qu'elle ont dans la fenetre...Par exemple, dans
StartClean, on a d'abord le nom et ensuite le password...d'ou il est fort probable que l'on atterisse
d'abord sur la premiere zone (le nom) puis sur la seconde (le serial..) (je rappelle que "bpx
getdlgitemtexta" permet d'arriver sur SoftIce ds que le programme appelle une zone de saisie...)
On refais F12 pour atterir sur la deuxieme zone de saisie (le serial..), et ici l valeur de EAX est de
00000005.
Tiens, bizarre ca ne serait pas la longueur de notre serial ?
Et si on fait "d esp", on voit dans la fentre "Data" 12345...Eh!! mais c'est notre serial !!
Plus de doute, on est bien dans la zone de saisie qui nous interresse !!
Y'en a qui doivent se dire "Comment on sait kil fo faire "d esp" ou aut' chose ????"
Bon, dans ce genre de cas, apres avoir appuyer sur F12, on arrive sur une instruction du style "push
esi" ou "push edi"...bref, on tombe sur "push xxx", et alors il suffit de faire "d xxx"...
On va poser un bpm (un point d'arrt sur une zone de la mmoire) comme ca quand le programme va
comparer notre serial au bon on pourras essayer de le choper. Mais pour poser un bpm il faut une
adresse...Regardez la gauche de la fentre sur la meme ligne que '12345'. Ici il s'agit de 63F4E0.
(Attention: l'adresse n'est pas la meme tout le temps, ne vous etonnez pas si c'est differrents chez
vous...).
Donc on tapes bpm 63F4E0 et on fait Ctrl+D (pour laisser le programme continuer son xcution).
Si tt sorti de SoftIce qu'on y retourne, et on voit alors ces lignes :
MOV AL, [EAX] => met le contenut de EAX dans AL (sans doute le bon serial..)
CMP [ECX], AL => Compare ECX avec AL ; compare le bon serial et celui que vous avez entr
JNZ BFF7A7E8 => On dgage si c'est pas bon (ndSmeita: c'est a cette ligne qu'on arrive...)
CMP BYTE [ESI],00 => Regarde si ESI=0 (c'est dire si ESI est le bon serial)
Tapez simplement d esi (cette commande permet de voir ce que contient le registre ESI dans la
fentre DATA) et dans la fentre data apparait mais oui votre SERIAL OFFICIEL !!!!
Donc pour CrAzY SquirreL le serial est 2730-26346-1673-333.
Pour info, le serial bidon est visble en tapant "d edi"...
Enlevez les breakpoints l'aide de la commande bc * (cette commande permet d'ter tous les
breakpoints poss auparavant), puis quitter SoftIce avec Ctrl+D.
De retour dans StartClean, rentrez le nom et le serial obtenus, et...Bravo!!! StartClean est encore
crack !
Tutorial de Cracking
ime
(8 Partie)
Dans ce cours nous allons expliquer comment cracker Winzip 7.0, programme de compression trs
utilis et quasi indispensable surtout sur le net. Nous allons utiliser dans ce cours la mthode qui
permet de trouver un serial qui corresponde notre nom.
Commencons !
Lancez Winzip et tout de suite si vous avez une version shareware, un beau nag-screen s'affiche avec
les boutons "Quit", "I Agree", "Ordering Info", "View Evaluation Licence" et "Enter Registration Code"...
Il s'agit du dernier qui nous intresse, quand vous cliquez dessus la boite de dialogue permettant de
s'enregistrer s'affiche. Il y a deux champs , l'un pour le nom et l'autre pour le code.
Mettez votre nom, pour moi Julien Lemaire et un serial bidon, 12345 et cliquez sur OK et une boite de
dialogue s'affiche avec le message 'Incomplete or incorrect information'. Donc le programme a
compar notre code par rapport au bon code et nous informe que 12345 n'est pas le bon code pour
notre nom. Nous allons donc essayer de choper le bon serial en interrompant l'xcution du
programme lorsqu'il lit notre nom/serial.
Pour cela il faut poser un breakpoint sous SoftIce, les deux fonctions les plus couramment utilises
dans la lecture d'un champs sont GetWindowTextA et GetDlgItemTextA.
Donc allez sous SoftIce ( l'aide de Ctrl-D) tapez bpx GetDlgItemTextA puis bpx GetWindowTextA.
Quittez SoftIce toujours avec Ctrl-D, et mettez un nom (Julien Lemaire) et un serial bidon (12345).
Ensuite appuyez sur Ok, et l on se retrouve immdiatement sous SoftIce.
Faites F12 pour sortir de la fonction pour voir si Winzip lit notre nom et effectivement on voit EAX=12.
Mais qu'est que ca pourrais bien tre ? Il faut savoir que les valeur des registres sont hxadcimales
et non dcimals, donc 12=18 en dcimal... Et il se trouve que 18 est longueur de mon nom!
Et la ligne sur laquelle nous emne SoftIce est PUSH EBX...
Faites donc "d EBX" et dans la fentre Data on apercoit notre nom !
Faites F12 pour que SoftIce continue son xcution et lise notre serial (car pour l'instant, on est dans
la routine qui lit la zone de saisie contenant notre nom...).
L, EAX=5 c'est dire la longueur de notre code.
Et la ligne sur laquelle on se trouve est PUSH ESI...
Ainsi, comme precedemment, faites "d esi" et on voit notre serial bidon.
Et maintenant qu'est qu'on fait ?...On peut supposer que Winzip va gnrer le serial valide et le
comparer au notre et s'il sont diffrents nous envoie la boite de dialogue 'Incomplete or ...'
On peut donc supposer qu'il va comparer un moment ou un autre notre serial (12345) au bon...
On va donc poser un bpm (arrt sur une zone de la mmoire) sur 12345.
Pour cela il nous faut l'adresse laquelle se trouve le serial, donc quand Winzip lit notre serial et que
vous faites d esi notez l'adresse laquelle il se trouve. [je rappelle que pour trouver l'adresse, il suffit
de regarder sur la meme ligne que 12345, mais tout a gauche...(la ou il y a xxx:xxxxx sur mon beau
dessin :))...]
Dans mon cas, j'ai 47D958. La commande taper est donc bpm 47D958 (notez que cette adresse
n'est pas forcement la meme chez vous !!).
Ensuite faites F5 (pareil que Ctrl+D...) pour que Winzip continue son xcution jusqu' ce qu'il xcute
notre bpm. Winzip fais plusieurs fois rfrence cette zone de la mmoire, en effet il est entrain
de crer le bon serial par rapport notre nom. On fait plusieurs fois F5 (ou Ctrl+D...), cinq fois
xactement et l nous arrivons sur des lignes de code interressantes...:
On peut constater que si on continue faire F5 (ou Ctrl+D, c'est pareil...), on tombe de nouveau sur
les mmes lignes que prcdemment mais que le serial est diffrent mais galement valide. Peut tre
qu'il d'agit d'un srial d'une version antrieur...(on obtient 21645132)
Tutorial de Cracking
ime
(9 Partie)
Dans ce cours, nous allons voir un exemple extrmement simple sur "comment cracker un
programme rien qu' avec un editeur hxa" :)
Pour cela, vous aurez bien sur besoin de votre editeur hxadcimal prfr et du prog 1toX (180Ko)
tlchargable ici.
Donc voil, une fois 1ToX install, il faut le dmarrer (beu...ca peut servir) puis que voit-on, un '(non
enregistr)' du plus mauvais effet... Ensuite, aprs avoir bien fait tourner le programme, vous verrez
qu'il est bien pratique et puissant, mais ds que vous le quittez un nag trs embtant apparait. alors l
c' est trop, il va faloir virer tout ca...
Pour cela, rappellez-vous, un '(non enregistr)' est prsent dans la barre de prsentation. En premier
lieu, nous allons nous occuper de lui. Alors voil, avant tout faites une sauveguarde du fichier
1toX.exe, puis ouvrez-le avec votre diteur hxa. Bon, ok, ca parait bordlique, mais vous allez voir,
c'est trs simple.
NB: pour pouvoir ecrire sur le fichier, il faut avoir quitter le prog.
Attention, on part sur une base de 0, ce qui fait un total de 16 adresses sur une ligne 32-bits, celles
que vous verez avec n' importe quel diteur hxadcimal :) ( Si vous comprenez pas, c'est pas
important...)
Premire mthode
Bon, une fois que tout est prt, lancez une recherche en mode ASCII sur (non enregistr). Pour se
faire, recherchez le de cette faon (ca donne a en general sous un editeur hexadcimal...).
(Dans certains editeurs (HEdit par exemple), l'equivalent est une recherche en 'Text'...).
L, vous allez forcment tomber dessus et deux solutions s' offrent vous pour l'effacer:
- Celle du cracker bourrin (mthode moyenne) qui va remplacer tout ca en appuyent sur [Espace] ( un
[espace] correspond au code ASCII '20'). Cela donne:
- Et celle du cracker qui y va tranquille et qui va faire ca bien proprement en placent un octects bien
precis, ici 00. Cela donne:
Si l'on dois mettre un 00, c' est parce qu' une fonction du programme va dire de lire le '(non
enregistr)' d' une adresse une autre, ici de ( ... ... ) -->les parenthses de mot 'non enrigistr. Et c'
est avec un simple 00 que l' on va faire comprendre au PC que le texte s' arrete juste aprs le X de
1toX. Et comme 00 n' est pas une instruction, il indique juste une zone dite vide qui ne sert rien et
que la machine va interpretter comme un stop sur le texte si l' on peut dire ainsi.
Virer le nag-screen:
Pour ce qui suit, laissez tomber 2 minutes WinDasm et les autres dsassembleurs...
Alors, pour virer un nag, il faut d' abord lire ce qu' il comporte et y chercher un mot qui y est utiliser
asser peux pour reperrer plus vite le coin interessant. Sur ce nag, on peut voir ca:
Bon, prenez par exemple le mot 'pleinement' et lancez une recherche mais ce coup-ci en mode
hxadcimal. B ca alors! On peut pas entrer ce mot dans la cellule de recherche! Normal, car
rappellez vous, on compte en hxa. Il faut donc trouver ce mot en mode hxa. Pour ce faire,
recherchez le de cette faon (ca donne ca en general sous un editeur hexa):
Et l, nous avons de la "chance", car ce mot n'est present qu' une fois dans le prog.
On peut cet endroit reconnaitre sans problme l' ensemble du message :)
Alors bien sur, comme un prog se lit et va tre executer par le machine de haut-en-bas il faut remonter
pour voir qu' est ce qui va faire que ce message va s' afficher. Nous pouvons voir qu'une certaine
chane d'octects est presente de trs prs juste au dessus, la voici:
Alors pkoi cette chane? En fait, ca ne fonctionne pas tout le temps si l' on prend toujours la chane la
plus proche du texte du nag. Parfois un telle chane peut se trouver bien plus haut avec des
messages qui ne correspondent pas au nag, mais c' est ass rare. Il est vrai qu' il n' y pas mal de
chanes de ce type dans ce prog mais c' est celle-ci qui va determine si le nag va s' affich ou non.
Ici c' est grce (et dans la plupart des cas) au 82.
Que veux dire 7E? Et bien cela vient du compilateur C++. Cette modif' n' a aucune signification en
assembleur. De plus, il est trs difficle de trouver une telle chane avec un dsassembleur. Cette
modification va donc virer le nag automatiquement. Le 7E (comme un 7C) montre d' aprs plusieurs
experiences qu' il peut servir aussi bien virer entirement des fentres que des boutons de
commande ;))
Deuxieme mthode
Ici, je prends en compte le fait que vous ayez deja lu la premiere mthode.
Je vous ai montrer la mthode precdente en premier parce qu'elle fonctionne plus souvent que celle
qui suit.
Alors voila, l nous allons toujours utilis un diteur hxa. Pour virer le '(non enregistr)', c' est la
mme chose qu' au debut du cours dans la rubrique Virer le (non enregistr). Pour le nag, c' est
presque la mme chose.
Alors pour le virer, lancez un recherche sur en mode hxadecimal sur " 70 00 6C 00 65 00 69 00 6E
00 65 00 6D 00 65 00 6E 00 74 " qui correspond comme nous avons pus le voir au mot "pleinement".
Souvenez vous, pour virer le (non enregistr), nous avions mis un 00 au dbut de la phrase, et bien l
c' est la mme chose, il faut remplacer le 43 par 00 :))
Et oui, car le prog va croire qu' aucun texte n' est prsent dans cette fentre alors il ne va pas l'
affiche du tout, c' est t'y pas cool?
Cette mthode fonctionne bien sur les progs programms et compils de faon simple sans reverse-
enginnering itout. (enfin bref, ca fonctionne plutot bien :)).
Tutorial de Cracking
ime
(10 Partie)
Matriel ncessaire :
Wdasm32
Un diteur hxadcimal (Hex WorkShop ou Hedit par exemple)
Les protections :
Limitation dans le temps (30 jours)
Registration par code
Certaines options brides
Un Nagscreen au lancement + 9 secondes d'attente (pas une protection c'est juste chiant)
Commencez par installer Winrescue dans le rpertoire de votre choix sur votre disque dur.
Cela fait, au boulot !! (faut arrter de glander de temps en temps...)
De plus certaines options sont en temps normal brides cela nous donne un messagedu genre :
"RegPack Disabled. Please register."
*
Possible StringData Ref from Code Obj -> "msR3I8aUi9y2E84L"
(humhum...c'est le bon code, c'est vraiment trop facile)
* Possible StringData Ref from Code Obj -> "Registration Key Accepted"
onc pour arriver "Registration Key Accepted" il faut enlever le "je" qui fait effectuer un saut jusqu'
"Warning Incorrect Key Entered". Pour cela on peut tout simplement enlever la ligne 004681C8 et
remplacer 7420 par 9090. (on rapelle que 90 = nop = No Operation...)
Donc maintenant, quand le programme arrive la ligne 004681C6 mme si le code est mauvais il va
directement sur "Registration Key Accepted" puisqu'il n'y a plus de saut conditionnel !
On peut diter maintenant 1.exe. On va l'offset 675C8 (car cela correspond la ligne 004681C8) et
on remplace 7420 par 9090. On relance le Rescue95, on entre n'importe quel code et...
BRAVO , RESCUE95 EST CRACKE !!!
Winrescue98 a exactement le mme schma de protection, sauf que le serial n'est pas le mme. Pour
conclure on peut simplement dire que ce logiciel est vraiment super simple cracker, et que la
protection est vraiment simpliste puisqu'il n'y a meme pas une vrification du code...
Bon, la c'est vraiment le cas le plus simple qu'il existe !! Ya pas plus facile !!
Disons que c'etait juste pour vous rememorer le principe de base :)
Tutorial de Cracking
ime
(11 Partie)
Unreal a t, en son temps, un jeux magnifique, super beau, super jouable, avec une bande-son
superbe aussi. Malheureusement, pour en profiter pleinement, il faut l'installer compltement sinon
ses temps de chargement CD sont beaucoup trops longs.
Parlons en du CD tiens !
Une fois UNREAL installer compltement, chaque fois que je dmarre le jeux, il me demande ce
CD. Comme je suis de nature assez bordlique, et que j'guare souvent mes CD dans le foutoir qu'est
my bedroom, j'ai dcider de faire un crack pour jouer sans CD.
Dans ce tutorial, je vais donc vous expliquer mon rsonnement... Ca n'a pas t vident du fait que j'ai
d tout dtailler alors que ce crack ne m'a pris que 5 minute. H oui, c'est certainement un des
cracks que j'ai fait le plus rapidement, c'est donc pas forcment parcqu'on sattaque une grosse
bote, que le crack sera dur.
Au dbut, on serait tent de dsassembler le fichier Unreal.exe, hophophop! Pas du tout! Quand on
dmarre UNREAL sans CD la bote de dialogue qui rclament le CD vient du fichier Window.dll.
( de facon generale, quand vous trouvez rien d'interressant dans le fichier '.exe' et qu'il existe des Dlls
qui accompagne le programme, il ne coute rien de desassembler ces Dlls, histoire de voir si c'est pas
dedans que ca se passe :)...)
Il faut donc dsassembler le fichier window.dll. (apres avoir fait une copie de sauvegarde...)
*Possible StringData Ref from Data Obj - > "Please insert CD-Rom in drive"
Trop fastoche, il suffit de remplacer le 'jne' par un 'jmp', saut qui s'effectue quoi qu'il arrive ! (saut
inconditionnel !!)
C'est ce moment l qui faut ouvrir window.dll avec votre diteur hxa prfr et de faire la modif'
suivant ;-))
Cherchez -------> 75 3E 8D 8D
Remplacez par --> EB 3E 8D 8D
Conclusion:
Les programmeurs de ce jeux sont pas cons du tout, car ils ont enfin comprit qu'il tait inutile
de se faire ch... en faisent des protection anti crack qui de toute faon se font largus les jours qui
suivent.
Cours de Cracking
ime
(12 Partie)
Matriel ncessaire :
Wdasm32
Un diteur hxadcimal (Hex WorkShop ou Hedit par exemple)
Introduction
Tout d'abord on peut se demander pourquoi cracker mIRC alors qu'il ne possde proprement dit
aucune
protection part un nag screen de temps en temps.
En fait, cela constitue tout de mme une bonne initiation au crack, et cela va permettre au dbutants
de suivre sans trop de difficults (enfin je l'espre... :-) et leur permettrent d'acqurir quelques bases.
Ou bien encore la satisfaction de voir son nom dans la fentre ou l'on voit habituellement 'unlicenced'.
Au boulot
Donc si on change le 'jne 00435DAA' en 'je 00435DAA' le programme ira sur "Your registration has
been entered successfully..." uniquement quand le code sera faux.
Il faut donc changer 'jne 00435DAA' en 'je 00435DAA' donc 0F859B000000 devient 0F849B000000
(OF85xxxxxx devient OF84xxxxxx, et inversemment...cf MemenTo 1)
On clique sur la ligne 00435D09 pour savoir quel offset modifier.
(en effet dans la barre du bas, W32dasm nous indique l'offset ou on se trouve. cf MemenTo 1...).
Ensuite prenez un diteur hxadcimal, allez l'offset et modifier '2.exe' comme indiqu
prcedemment.
Sauvegardez, et relancer le programme et essayez de vous enregistrez, rentrez un nom et un serial
bidon.
Bravo, mIRC et enregistr on constate galement que 'Register' ne figure plus dans le menu 'Help'
En plus, votre nom apparait dans 'About' !!
Quittez mIRC et relancez le programme et l....oh surprise, le programme n'est plus enregistr :(
Et oui...comme la plupart des programmes mIRC effectue une vrification du nom/serial au
dmarrage.
On rflchit et on se souvient que lorsque on c'est enregistr le menu 'Register' avait disparut.
On cherche alors dans 'Ref Menu' la reference 'Register' et on le trouve !
On sait galement que pour supprimer un menu le programme doit faire appel la fonction
USER.DELETEMENU. On recherche donc un endroit ou on trouve une rfrence au menu 'Register'
et la commande User.deletemenu. Cliquez donc plusieurs fois sur 'Register' jusqu' ce que vous
trouviez 'Register' et un peu plus haut la commande qui permet de supprimer le menu. On la trouve, et
cela nous donne cela :
La comme avant, il suffit de changer un je en jne donc jne 00492462 devient je 00492462 en
hxadcimal 744A devient 754A
Voil, comme avant notez l'offset modifier et allez les changez avec l'diteur hxadcimale,
sauvegardez, relancez le mIRC. Puis rentrez une nom et un serial bidon, comme avant le programme
vous dis "Thank...", quitter mIRC, relancez le et l bravo, mIRC et compltement crack, en effet notre
nom et dans 'About' et 'Register' n'est plus la.
[Conclusion :] C'tait pas trop dur, mIRC et un petit programme facile cracker, mais cela permet au
moins d'acqurir un peu de pratique. A une prochaine fois pour un autre FlashTut....peut tre
Tutorial de Cracking
ime
(13 Partie)
Matriel ncessaire :
Wdasm32
Un diteur hxadcimal (Hex WorkShop ou Hedit par exemple)
Mise en situation...
Quand vous lancez le jeu sans le CD, une image vous demande de l'inserer !Il n'y a pas de
MessageBox, donc il faut proceder autrement que d'habitude...
Pas de probleme, on va le cracker. Faites deux copies de MythII.exe.
Appellez la premiere 'WDASMyth2.exe' et l'autre 'BAKUP.EXE'...
Pourquoi 'Imports Funtions' and pas 'String Data reference' comme d'hab ?
Parceque le message d'erreur n'est pas sous forme de MessageBox,mais est integr dans le jeu sous
forme d'image.
Au premier 'double-clique', vous tombez sur un petit bout de code... Ce n'est pas l'endroit qui nous
interesse.
Pourquoi ? Eh ben, sachez que la fonction GetDriveTypeA differencie le type de support suivant un
code (de 1 a 7 je crois..) et le CD-Rom a le code '5'.Regardez donc en 4870D6...Si vous voyer une
ligne comme ca a cot d'un GetDriveTypeA,vous pouvez etre quasi sur que c'est la routine du CD-
Check !
Recliquez donc sur 'KERNEL32.GetDriveTypeA' afin d'atterir sur cette partie du code :
Sauf que cette fois, le saut en 4870C5 ne se fera pas car 'ebp' n'est plus egale a 'edx'
(si vous regardez bien, on peut supposer que c'est 'ebp' qui change pendant la routine du CD-Check
puisque 'edx' est initialis a 1 des le debut de 487170...'ebp' doit etre modifier dans les lignes que je
vous ai coup, de toute facon c'est pas important).
Donc comme on saute pas ce coup si, on passe a GetDriveTypeA...Arriv la, la fonction regarde s'il y
a un CD ou non...Et donc on va se taper le saut car on a pas de CD ! Il faudra donc penser a
remplacer ce 0F85 (jne) par un 0F84 (je) qui annulera ce saut...
Imaginons qu'on est annul ce saut: on continue notre epope et arriv a un moment de la routine
(dans les lignes que j'ai coup), le programme determine si le support correspond
a un CD original de Myth 2 (voir 48715D). On voit qu'il saute de facon inconditionnel en 48716B si le
premier saut n'est pas execut. Or 48716B c'est la 'boucle des 20 passages', la ou il faut pas aller !!
On en deduit donc que le saut en 48715F, c'est la ou il faut aller :)
Alors la, c'est simple, il suffit de forcer le 741B (JE) en EB1B (JMP) (cf 48715F)
Bon, ben voila si on recapitule, il faut d'abord annuler le saut en 4870D9 puis forcer le saut en
48715F...
Voulez-vous une autre methode pour niquer le CD-Check ?? (ouiiiiiii) Mmm...mais alors c'est
parceque c'est vous :) Bon, sans rire, regard la difference entre le saut de 48715F et celui qui est
en 48717A, a la fin du 'CD-Check'...Ben la seule difference c'est qu'avec le premier vous passez par
une ligne supplementaire :
Bon, alors la vous venez d'apprendre a cracker un jeu commercial d'une grosse boite...Vous voyez,
c'est pas si dur :)) En tout cas, soyez sur que c'est pas toujours aussi simple.Ceci dit, vous pouvez
cracker pas mal de jeu comme ca :)
Cours de Cracking
ime
(14 Partie)
ime
Dans le 5 cours de cracking, Smeita vous avait expliqu comment faire son propre patcheur via le
language Pascal et son compilateur TPC... Maintenant, nous allons voir comment faire un patch mais
plus voluer qui tiendra compte de plus de paramtres avec notamment une verification CRC du
fichier a patcher !
ime
Comme dans le 5 cours de cracking, je vous donne le code comment, puis un exemple sans les
commentaires ! Ici, les textes en rouge sont ceux que vous devez modifier pour faire correctement
votre patcheur. Les texte en jaune sont ceux que vous pouvez modifier pour des raisons
esthetique...Le reste, pas touche !! Essayer de bien comprendre, ca sera deja bien :) Bien sur, il faut
savoir que certains passages ne sont pas vidents expliqus, ainsi j' ai essayer de faire le plus
simple possible ;)
------------------------- debut --------------------------
Program Crack; //juste pour indiquer le nom du prog
A : Longint;
B : Byte;
End =
(
(A:$303e6;B:$90), //adresses hxadcimales modifier et leurs octects
(A:$47274;B:$90) //attention !! sur la derniere ligne=> pas de virgule !!!!
);
Var
F : File;
Ch : Char;
Attr : Word;
I : LongInt;
Begin
clrscr; //efface l' cran, WriteLn ne se charge donc que d' afficher un texte,
//juste une question de prsentation
Begin
Textcolor(12);
Writeln('oOOPS!: File ',FileN,' not found !!!');
Writeln('-Current bad size has: ', FileSize (F),' bytes.');
Writeln('-Good size should be : ', FileS ,' bytes.');
Writeln('Crack aborted...');
Halt(1);
end;
Assign(F,FileN);
Reset(F,1); //pour ouvrir un fichier
TextColor(8);
Write('Checking FileSize...');
TextColor(12);
Writeln('ERROR!');
TextColor(07);
Writeln('');
Textcolor(12);
Writeln('File ',FileN,' has an invalid Size !!!');
Writeln('Crack aborted...');
Else
TextColor(8);
Write('Cracking ',FileN,'...'); //Et hop!, on rutilise encore ',FileN,'
begin
Seek(F,A[I].A); //repere l'offset a patcher
end;
TextColor(10);
Writeln('CrACk Successful!'); //message de russite du patchage :))
Voila !! Vous pourrez constatez que c'est deja plus consistant que le premier patch ! En plus, la
verification CRC permet d'eviter de patcher une mauvaise version d'un programme...
Bon, maintenant, on vous donne un apercu de ce que ca donne sans les commentaires...
A : Array[1..2] of Record
A : Longint;
B : Byte;
End =
(
(A:$303e6;B:$90),
(A:$47274;B:$90)
);
Var
F : File;
Ch : Char;
Attr : Word;
I : LongInt;
Begin
Textcolor(13);
clrscr;
If (FSearch(FileN,FExpand(FileN))='') then
begin
Textcolor(12);
Writeln('oOOPS!: File ',FileN,' not found !!!');
Writeln('-Current bad size has: ', FileSize (F),' bytes.');
Writeln('-Good size should be : ', FileS ,' bytes.');
Writeln('Crack aborted...');
Halt(1);
end;
Assign(F,FileN);
Reset(F,1);
TextColor(8);
Write('Checking FileSize...');
If FileSize(F)<>FileS then
begin
TextColor(12);
Writeln('ERROR!');
TextColor(07);
Writeln('');
Textcolor(12);
Writeln('File ',FileN,' has an invalid Size !!!');
Writeln('Crack aborted...');
Close(F);
Halt(1);
end
else
begin
Writeln('OK');
end;
TextColor(8);
Write('Cracking ',FileN,'...');
For I := 1 to BytesToChange do
begin
Seek(F,A[I].A);
Ch:=Char(A[I].B);
Blockwrite(F,Ch,1);
end;
Writeln('OK');
Close(F)
TextColor(10);
Writeln('CrACk Successful!');
end.
N.B: Certains progs, vont chercher un fichier dat et refusent de demarrer. Alors, pour ne pas vous
galrer, une ptite ligne Pascal va vous permettre de crer un fichier vide. Pour cela il faut d' abord
dclarer une variable puis l' exploiter de la faon suivante:
Var
k: text;
puis:
Assign(k,'Info.dat');
Rewrite(k);