LE CRACKING
Salut, Moi c Virux (Virux@caramail.com) du groupe Atthackers (Atthackers@caramail.com). Je suis dans ce mag en tant que Guest (Invité). Jessayerai de faire quelques articles de temps en temps (g po ke ca a foutre ! ! ;) ).
Bon
je suis pas un super CRACKER mais je vais essayé de vous apprendre ce que je sais ! On commencera par un petit TUTORIAL (Netsketch 2.3), puis on apprendra a faire un programme de CRACK en PASCAL.
--------------------------------------------------------------------------------
TUTORIAL #1
-SUJET : -Initialisation au Cracking
-Désassembler un fichier pour le cracker
-EXEMPLE : Netsketch 2.3
(http://www.vegasfx.com)
-OUTILS : W32Dasm89, UltraEdit (ou un éditeur Hexa) , et une cervelle (pi o - 1 doigt)
--------------------------------------------------------------------------------
-
INTRODUCTION
- LE CRACK
- LE PROGRAMME
INTRODUCTION
Comme tout le monde le sait cracking rime avec Assembleur (NDV :A non ca rime pas ca ! tant pis), il faut donc un minimum de connaissance ASM pour pouvoir cracker un
soft. Donc lidéal serait de ce procurer un book sur lasm, pour le moment on va commencer et on verra ce qui faut savoir en temps voulu.
LE CRACK
On execute Netsketch, il nous balance sa boite de dialogue " Netsketch
Registration ". On tape nimporte quoi dans ledit " NAME : " et idem dans " KEY :".
On click sur " REGISTER NOW " et merde " Invalid Registration. Please try again. "
Bon il est temps
de le désassembler(avec WINDASM).
On click sur "string reference" et on cherche "Invalid Registration. Please try again." (On click plusieurs fois dessus pour trouver combien de fois il apparais)
On le trouve quune
seul fois :
* Possible StringData Ref from Data Obj -> "Invalid Registration. Please try again. "
:0047E161 68A0414C00 push 004C41A0
On Remonte un peu plus haut pour voir dou arrive le message et on trouve quelques
lignes plus haut :
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses :
| :0047E0DE(C), :0047E0F3(C), :0047E125(C) < ICI on a 3 saut conditionnel
On va voir la routine correspondant (a ladresse 0047E0C2)
:
* Possible StringData Ref from Data Obj -> "Unregistered "
|
:0047E0C2 BF20414C00 mov edi, 004C4120
:0047E0C7 E8C4000000 call 0047E190 < Routine qui crée le vrai Serial
:0047E0CC 83C408 add esp,
00000008
:0047E0CF B9FFFFFFFF mov ecx, FFFFFFFF
:0047E0D4 2BC0 sub eax, eax
:0047E0D6 F2 repnz
:0047E0D7 AE scasb
:0047E0D8 F7D1 not ecx
:0047E0DA 49 dec ecx
:0047E0DB 83F903 cmp ecx, 00000003 cmp :
compare ICI le reg ECX et 3 ( Hexa ! ! !)
:0047E0DE 725F jb 0047E13F < ICI saut si " Invalid Registration " (1er )
:0047E0E0 8D7C2474 lea edi, dword ptr [esp+74] jb : jump if below (saut si plus petit)
:0047E0E4
B9FFFFFFFF mov ecx, FFFFFFFF
:0047E0E9 2BC0 sub eax, eax
:0047E0EB F2 repnz
:0047E0EC AE scasb
:0047E0ED F7D1 not ecx
:0047E0EF 49 dec ecx
:0047E0F0 83F908 cmp ecx, 00000008 (Tres important pour la fin)
:0047E0F3 724A jb 0047E13F < ICI saut si " Invalid Registration " (2eme)
:0047E0F5 B850164E00 mov eax, 004E1650
:0047E0FA 8D542474 lea edx, dword ptr [esp+74]
et (a ladresse 47E123)
* Referenced by a
(U)nconditional or (C)onditional Jump at Address :
| :0047E11C(U) < saut inconditionnel mais pas utile dans notre cas
:0047E123 85C0 test eax, eax
:0047E125 7518 jne 0047E13F < ICI saut si " Invalid Registration "
(3eme)
:0047E127 C70584414C0001000000 mov dword ptr [004C4184], 00000001
On se dit on na ka remplacer le jb par un ja (jump if above, saut si supérieur), comme ca le soft sautera que si le code est bon (nous on sen fou on entre
nimporte koi).
On va donc debugger Netsketch (CTRL+L sous Windasm), Il faut maintenant mettre un " Break point " (Point darrêt) sur les trois saut ( en 0047E0DE, 0047E0F3 et 0047E125), on va a ladresse et on fait F2
(Pour mettre le BP a cette adresse).
Puis F9 pour exécuter le prog, il nous rebalance sa merde de boite de dialogue et comme tout a lheure on tape nimporte koi (ou ton nom si tu veux) et click sur "Register now".
Windasm sarrête sur notre BP (en 0047E0F3), tient et le 1er ? ben il sert a rien dirons nous. Il sarrette donc sur le 2eme , on fait F7 (Step into) et le prog saute en 0047E13F , "Invalid Registration", F9 Pour relancer
lexecution, comme tout a lheure NAME,KEY,REGISTER NOW (NKR) et Windasm sarrete sur notre BP, on va le patcher : on click sur "Patch Code" et on tape ja 47E13F, "Enter", "Apply Patch", "Oui" et F9,
NKR et la il sarrete sur le 3 eme bon on patch (comme précédemment: je 0047E13F), F9, NKR, on lance et HO ca marche ! ! ( en plus il crée le fichier Reg qui contient le vrai serial).
Voilà le prog est cracker ! (il suffit souvent de patcher
des jump pour cracker un prog).
Maintenant on prend notre editeur Hexa on va a loffset (Adresse Hexa) 7E0F3 on fou un 77 (Ja) et en 7E125 on fou un 74 (Je).
On efface le fichier reg et on lance le prog (ben vi faut testé).
Tout
marche c bon ! ! ! ;)
MAIS Rappelle toi tout a lheure on a dit que si le code était bon le prog ne se débriderai pas. Ben testons va chercher le bon serial et efface le .reg , lance le prog et tape le bon nom et le bon serial et la
"Invalid Registration". Plutôt con ca !
Overclock ta cevelle et revenons a notre routine de test on a :
:0047E0F3 724A jb 0047E13F
et
:0047E125 7518 jne 0047E13F
patcher en
:0047E0F3 724A ja 0047E13F
et
:0047E125 7518 jne 0047E13F
En fait il ne doit JAMAIS sauter, il faut donc simplement supprimer les sauts par des NOP (No Operation Procedure, Aucun effet) donc :
:0047E0F3 724A jb 0047E13F
et
:0047E125 7518 jne
0047E13F
patcher en
:0047E0F3 90 nop
:0047E0F4 90 nop
et
:0047E125 90 nop
:0047E126 90 nop
Tu reprend ton éditeur Hexa et tu fou des 90 en 7E0F3, 7E0F4, 7E125, 7E126
Tu test ton prog et Voilà
maintant ca marche au poil.
En fait il ne faut jamais patcher simplement un jump par un NOT jump (inversion du jmp).
RAPPEL : Not > égal <= et non < donc Not Ja = Jbe
Not < égal >= et non > donc Not Jb = Jae
LE PROGRAMME
Notre crack fini il faut maintenant faire un programme pour le distribuer.
Nous allons utiliser le langage PASCAL, très simple.
De quoi avons nous besoin :
- Ecrire des messages a lécran .
-
Ouvrir un fichier.
- Ecrire dedans.
- Pi c tout.
---------------------------------- Debut Du Progamme ----------------------------------
Program crack; { Nom du programme}
Uses Crt; { Librairie utilisées}
Var {
Déclaration des variables}
F:File; { Du type Fichier}
C:Char; { Du type caractère}
Begin { Début du programme}
Writeln('Netsketch Crack par Virux'); { Writeln pour écrire un texte a lecran}
Assign(F,'NS.EXE'); {
Ouvre le fichier}
{$I-} Reset(F,1); {$I+}
If IOResult <> 0 then { Teste si le fichier est bien ouvert}
begin
writeln('Programme non trouver');
halt(1); { Arrête le programme}
end;
C:=Char($90); { C =
$90 }
Seek(F,$7E0F3); { Va a loffset 7E0F3}
Blockwrite(F,C,1); { Ecrit $90 a loffset 7E0F3}
Blockwrite(F,C,1); { Ecrit $90 a loffset suivant}
Seek(F,$7E125); { Va a loffset 7E125}
Blockwrite(F,C,1); { Ecrit $90 a loffset7E125}
Blockwrite(F,C,1); { Ecrit $90 a loffset suivant}
Writeln('Programme cracké avec succès!!');
End. ); { Fin du programme}
------------------------------------ Fin Du
Progamme ------------------------------------
Voilà je pense quavec les commentaires ta tous compris !
Sinon Virux@caramail.com.
Bye a tous et bon Cracking.
VIRUX