CRACKING§§ THE BASE (french)

programing

CRACKING§§ THE BASE (french)

Postby RAD on Fri Sep 01, 2006 3:06 am

Cette page contient des informations concernant le Cracking, elle a était écrite dans un but purement éducatif afin de faire comprendre à ceux qui la lisent, les procédés pratiques du cracking. Vous êtes donc le seule responsable de l'utilisation des informations ci-dessous.

Niveau: débutant, aucune connaissance en ASM n'est requise. Il est tout de même préférable d'avoir quelques notions de programmation.
Ce qu'il vous faut: beaucoup de patience et de persévérence, un cerveau, un désassembleur (W32dasm), un debugger (Soft Ice) et un éditeur Hexa décimal (Hiew est parfait).
Conseil: un petit bouquin sur l'assembleur n'est pas de trop (par exemple: ASSEMBLEUR, un découverte pas à pas aux éditions Marabout), car il est évident que seul les fonctions les plus courantes sont détaillées ci-après.



Assembleur, les bases nécessaires
L'assembleur ? simplement ca veut dire quoi ?
L'assembleur est Le language de programmation le plus proche du micropresseur, c'est à dire qu'il ne fait appel qu'a des instructions élémentaires, c'est à dire que toutes fonctions tel que que afficher une chaine de caractères n'existe pas, il faut la programmer. Par conséquent il est très rapide à l'éxécution. Simplement, assembleur = language machine.

Remarque: En assembleur on travaille en base 16 (hexadécimal) et non en base 10 (décimale)

Les registres : AX, CX, DX, EAX, EDI .... ???
Il n'est pas nécessaires de connaître tous les registres pour faire du "cracking", connaitre les plus utiles suffis mais tous les types de registres sont ici listés. Les registres sont des emplacements mémoires situés à l'intérieur du microprocesseur, on les réparti en 4 catégories:

Les registres de segment (ne seront pas dévelloppé ici, jettez un coup d'oeil dans un bouquin si vous voulez des infos supplémentaires ;=)
Les registres de travail
Les registres d'offset
le registre FLAG
Les registres de travail:
Il en existe de différentes "tailles": 8bits, 16 bits et 32 bits.
EAX est un registre de 32 bits, AX de 16 bits, AL et AH deux registres de 8 bits.
AX représente la partie "basse" de EAX, AH la haute de AX (H= High) et AL la basse de AX (L=low)
ainsi quand EAX=1234abcd AX=abcd AL=cd et AH=ab.
registre de 16bits = AX, BX, CX, DX
registre de 32bits = EAX, EBX ....
remarque: Les registres 32bits commencent tjs par un E
De manière générale, AX est utilisé lors des opérations arythmétiques, CX comme compteur et DX pour les données.

Les registres d'offset:
SI= utilisé avec les chaines de caractères
DI= utilisé lors d'opéraions sur les chaines de caractères
IP= registre pointant l'instruction suivante à éxécuter, il n'est donc pas modifiable directement
BP= utilisé pour accéder aux données de la piles
SP= associé à SS pour accéder aux derniers éléments de la piles

Le registre FLAG :
C'est un registre de 16bits, mais sa valeur n'a aucune signification, car il est manipulé bits à bits. Le registre FLAG est très utiles lors des instructions effectuant un test ou une comparaison (bref toutes instruction nécéssitant une condition utilise le registre FLAG). Pour simplifier voici un petit tableau récapitulatif:
bit Signification abréviation
0 Retenue CF
2 Parité PF
4 Retenue auxiliaire AF
6 Zéro ZF
7 Signe SF
8 Trap TF
9 Interruption IF
10 Direction DF
11 Overflow OF

Les bits 1,5,12,13,14,15 du registres ne sont pas utilisés

Les opérandes en ASM :
Seules les instructions les plus courantes de l'ASM seront ici listées: CALL, CMP, JMP, JZ, JNZ, JG ..., MOV
Abréviations utilisées: reg=registre, mem=une adresse mémoire, val=une valeur hexadécimale


CALL:
syntaxe:
call mem
action:
Call force le microprocesseur à éxécuter les instructions du sous programme à l'adresse "mem" avant de continuer

CMP:
syntaxe:
cmp reg,val
cmp mem,val
cmp mem,reg
cmp reg,mem
cmp reg,reg
Action:
Cmp compare la valeur de droite avec la valeur de gauche (ie cmp A,B <=> B-A puis affectation des indicateurs)
Cmp change les indicateurs (le registre flag)

JMP:
syntaxe:
jmp reg
jmp val
action:
jmp effectue un saut inconditionel, ainsi la prochaine instruction effectué est CS:reg ou CS:val

MOV:
Syntaxe:
mov reg,val
mov mem,val
mov reg,mem
mov mem,reg
mov reg,reg
Action:
Mov transfère le contenu de l'opérande de droite dans l'opérande de gauche. Aucun identificateur n'est modifié (le registre flag)

Les sauts consitionnels (JE, JNE ...):
Les sauts conditionnels sont basées sur la valeur des indicateurs, c'est on les trouves généralement après CMP. Il existe 3 types de sauts conditionnels: les test d'indicateurs, les test concernants les nombres signés et non signés.

Les tests d'indicateurs
Instruction condition action
JZ ZF=1 jump if zero
JE ZF=1 jump if equal
JNZ ZF=0 jump if not zero
JNE ZF=0 jump if not equal
JC CF=1 jump if carry
JNC CF=0 jump if not carry
JS SF=1 jump if sign
JNS SF=0 jump if not sign
JO OF=1 jump if overflow
JNO OF=0 jump if not overflow




Les tests de nombres non signés
Instruction condition action
JNBE ou JA CF=0 et ZF=0 jump if above (A>B)
JNB ou JAE ou JNC CF=0 jump if above or equal (A>=B)
JBE ou JNA (CF=1 et ZF=1) ou (CF<>ZF) jump if not above (A<=B)
JB ou JNAE ou JC CF=1 jump if below (A<B)
JE ou JZ ZF=1 jump if zero (A=B)
JNE ou JNZ ZF=0 jump if not zero (A<>B)




Les tests de nombres signés
Instruction condition action
JG ou JNLE ZF=0 et OF=SF jump if greater (A>B)
JGE ou JNL SF=OF jump if greater or equal (A>=B)
JNG ou JLE (ZF=0 et SF=OF) ou (ZF=1 et SF=OF) ou (ZF=0 et SF<>OF) jump if less or equal (A<=B)
JNGE ou JL SF<>OF jump if less (A<B)
JE ou JZ ZF=1 jump if zero
JNE ou JNZ ZF=0 jump if not zero


ADD, SUB, OR, XOR, AND, ROLL ... : instruction dont le nom est assez clair. (see your book ;)



Les logiciels nécessaires:
Comme il a été dit dans l'introduction, il vous faut 3 logiciels:

un désassembleur : W32dasm8.93
un debugger : Soft Ice 3.25 de Numega
un éditeur hexa décimal : Hiew6.04
W32dasm8.93 et Hiew6.04 sont très simple d'emploi. Par contre Soft ICE nécessite un petit tutorial ;=).
Une fois Soft Ice installé redémarrer votre ordinateur (Votre fichier autoexec.bat a été modifié, c normal). Une fois de retour sous windows, appuyer sur CTRL+D vous passez alors en mode debugger, pour retourner à windows appuyer à nouveau sur CTRL+D.

Les touches à connaitre:
F1 = aide, équivalent à taper help en ligne de commande
F2 = active désactive la fenêtre des registres
F4 = retour à windows mais l'éxécution est stoppé (photo d'écran)
F5 = retour à Windows, équivalent à CTRL+D
F7 = éxécute les instructions jusqu'a l'endroit ou ce trouve le curseur
F8 = trace le programme (éxécution pas à pas, rentre à l'intérieur des call)
F9 = in the code windows : set a breakpoint on the instruction on/off.
F10 = éxécution pas à pas mais ne rentre pas dans les call
F12 = quitte l'éxécution des DLL de windows et retour au debuggage du prg à debugger

les instructions en ligne de commandes:
d reg, d mem ... affiche le contenu mémoire
e mem : édite la mémoire
s mem : cherche dans la memoire
r : modifie les registres
wx, wc, wl,wd: active et désactive des fenêtres, essayez ;=)

Les breakpoints:
Les breakpoints sont des points d'arrêts, c'est vous qui les posez, lorsque soft ice rencontre un BreakPoint (BP) il arrête l'éxécution et passe en mode debuggeur.
2 grands types de BP:
BPX: BP lors d'une éxécution (par ex: BPX getwindowtexta stoppera l'éxécution du prg lorsque celui ci fera appel à l'API getwindowtexta)
BPM: BP sur une adresse mémoire lorsque celle ci est lue ou modifiée

Voilà en gros le fonctionnement de SOFT-ICE, la page sera complétée à l'avenir.

Prêt? alors on est parti:
Au lieu de travailler dans le flou et dans le général, je préfère faire ce tutorial sur un exemple. Nous allons donc nous occuper du cas de CDRLABEL v4.1 que vous trouverez sur le site de l'auteur : http://www.ziplabel.com/ . N'oubliez pas que crackez un logiciel est illégal, ainsi si vous utilisez CDRLABEL v4.1 n'oubliez pas de rémunérer son auteur !
CDRLABEL v4.1 est un petit logiciel shareware permettant de créer rapidement des jaquettes pour les CDR, comme tout shareware il est protégé par un classique Sérial Number. Plusieurs solutions s'offrent à nous pour le cracker. La plus rapide est d'arriver à récupérer le S/N que le shareware demande (pour cela utiliser soft ice), la seconde et de patcher le logiciel afin qu'il soit en version complète. Cette dernière solution est de loin la moins bonne, car beaucoup plus longue à mettre en place, mais nous effectuerons celle-ci, ben oui quoi on est là pour apprendre ;=)
Qu'allons nous devoir faire ?
En version shareware, CDRlabel interdit le changement des "customize initials" (menu spine), nous allons donc devoir l'autoriser. De plus il faut afficher "Thanks for registering" dans le menu About et enlever le nag screen qui apparait aléatoirement lors de l'impression d'une jaquette.
Récapitulatif, nous devons:

autoriser le changement des "customize initials"
afficher "thanks for registering"
enlever le nag screen
1er étape:

Lancez CDRlabel, et repérez ce que l'on doit modifier. Dans le menu SPINE "customize initial" nous est interdit, une boite de message apparait "sorry ...", un nag screen apparait aléatoirement c'est aussi une messagebox, puis il faut enlever "this program is a shareware ... "dans le menu about.
Désassembler ensuite CDRlabel avec w32dasm, recherchez dans les String Data Reference, le texte des messagebox précédentes: "sorry .." "thanks for registering" "this program ..." etc ..
Regarder ensuite à quelles fonctions extérieures (les API) CDRlabel fait appel, on remarque qu'il fait appel à MESSAGEBOXA (on va s'en servir avec soft ice)

2ème étape: Activation de "customize initial"

lancer SoftIce (appuyez sur CTRL+D simultanément) et mettez un BPX sur messageboxa (taper BPX messageboxa). Lancer CDRlabel et clickez sur custmize initial. Soft Ice prend la main, vous vous trouvez dans le code de l'API, on s'en fou;) appuyez sur F12 pour aller dans le code de CDRlabel. Ok bon maintenant remontez dans le code, vous voyez ceci:

Code ASM extrait par W32DASM

* Reference To: USER32.DialogBoxParamA, Ord:008Eh
|
:004134CC FF1590664500 Call dword ptr [00456690]
:004134D2 E9CA1C0000 jmp 004151A1
:004134D7 8B150C2D4500 mov edx, dword ptr [00452D0C]
:004134DD A1082D4500 mov eax, dword ptr [00452D08]
:004134E2 8D4C2410 lea ecx, dword ptr [esp+10]
:004134E6 51 push ecx
:004134E7 52 push edx
:004134E8 50 push eax
:004134E9 E8B2B30000 call 0041E8A0
:004134EE 83C40C add esp, 0000000C
:004134F1 85C0 test eax, eax <--- c la que se fait le test
:004134F3 7518 jne 0041350D <--- suffit de remplacer le jne en je pour éviter le saut
:004134F5 6A10 push 00000010

* Possible StringData Ref from Data Obj ->"Registration Error"
|
:004134F7 68E0904300 push 004390E0

* Possible StringData Ref from Data Obj ->"Sorry, only registered users may "
->"access this function"
|
:004134FC 68A8904300 push 004390A8
:00413501 53 push ebx

* Reference To: USER32.MessageBoxA, Ord:0195h
|
:00413502 FF15A8664500 Call dword ptr [004566A8] <--- C la que Soft ICE prend la main
:00413508 E9941C0000 jmp 004151A1

c ici que cdrlable fait son test :
:004134F1 85C0 test eax, eax
là selon le résultat il envoie vers 004134F3 7518
il suffit donc de prendre la négation du jne pour activer la fonction, remplacer le jne en je !
Retouner sous Soft Ice comme décris précédement (à l'endroit de la messagebox) et taper ceci:
e 4134f3 (c pour éditer l'adresse 4134f3)
remplacer le 75 (jne) par un 74 (je)
et repasser sous cdrlabel, vous pouvez changer les initiales

Remarque: pour faire le patch il faudra donc rechercher la chaine 85 C0 75 18 et la remplacer par 85 C0 74 18

3ème étape: Affichage de "Thanks for registering"

Pour cela on utilise que le code ASM, à l'aide des string data reference localiser "thanks for registering". Vous obtenez le code suivant:

* Reference To: USER32.SetDlgItemTextA, Ord:01F2h
|
:00403AF0 FF1568664500 Call dword ptr [00456668]
:00403AF6 6820074400 push 00440720
:00403AFB 56 push esi
:00403AFC E89FE4FFFF call 00401FA0
:00403B01 A10C2D4500 mov eax, dword ptr [00452D0C]
:00403B06 8B0D082D4500 mov ecx, dword ptr [00452D08]
:00403B0C 83C408 add esp, 00000008
:00403B0F 8D542414 lea edx, dword ptr [esp+14]
:00403B13 52 push edx
:00403B14 50 push eax
:00403B15 51 push ecx
:00403B16 E885AD0100 call 0041E8A0
:00403B1B 83C40C add esp, 0000000C
:00403B1E 85C0 test eax, eax <-- le test ;)
:00403B20 7415 je 00403B37 <-- le saut, suffit donc remplacer le je(74) en jne(75)

* Possible StringData Ref from Data Obj ->"Thanks for registering!"
|
:00403B22 6804814300 push 00438104
:00403B27 6A00 push 00000000
:00403B29 6A0C push 0000000C

* Possible Reference to Dialog: DialogID_006E, CONTROL_ID:0451, "This program is SHAREWARE, please see th"
|
:00403B2B 6851040000 push 00000451
:00403B30 56 push esi

voilà, pour une petite vérification éditez 403b37 ;) et essayez

4ème étape: Le nag screen

Le nag screen est une messagebox, donc pour le localiser dans le code ASM on va utiliser softice.
Posez un bpx sur messageboxa et clickez sur le bouton imprimante de cdrlabel. Softice rend la main, apuyer sur F12 pour quitter l'API. Une fois de retour au code, noter l'adresse ou vous vous trouvez, et passez sous W32dasm

le BPX messagebox a pointe sur 414b1d qui nous envoie vers 414ae1


* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00414AE1(C), :00414AF6(C), :00414B1D(C)
|
:00414C3E 6A00 push 00000000
:00414C40 E87B94FFFF call 0040E0C0
:00414C45 83C404 add esp, 00000004
:00414C48 E954050000 jmp 004151A1
:00414C4D 8B0D082D4500 mov ecx, dword ptr [00452D08]

3 saut à modifier: :00414AE1(C), :00414AF6(C), :00414B1D(C)

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00414A9B(C), :00414AB4(C)
|
:00414AC5 8B150C2D4500 mov edx, dword ptr [00452D0C]
:00414ACB A1082D4500 mov eax, dword ptr [00452D08]
:00414AD0 8D4C2410 lea ecx, dword ptr [esp+10]
:00414AD4 51 push ecx
:00414AD5 52 push edx
:00414AD6 50 push eax
:00414AD7 E8C49D0000 call 0041E8A0
:00414ADC 83C40C add esp, 0000000C
:00414ADF 85C0 test eax, eax
:00414AE1 0F8557010000 jne 00414C3E <-- le premier saut
:00414AE7 E8E4790100 call 0042C4D0
:00414AEC 99 cdq
:00414AED 33C2 xor eax, edx
:00414AEF 2BC2 sub eax, edx
:00414AF1 3DAA2A0000 cmp eax, 00002AAA
:00414AF6 0F8C42010000 jl 00414C3E <-- le second saut
:00414AFC 8B0D803E4500 mov ecx, dword ptr [00453E80]
:00414B02 6A23 push 00000023

* Possible StringData Ref from Data Obj ->"Unregistered User"
|
:00414B04 68FC874300 push 004387FC

* Possible StringData Ref from Data Obj ->"cdrLabel is shareware. Would "
->"you like registration information?"
|
:00414B09 68B8874300 push 004387B8
:00414B0E 51 push ecx
:00414B0F FFD6 call esi
:00414B11 83F802 cmp eax, 00000002
:00414B14 0F8487060000 je 004151A1
:00414B1A 83F807 cmp eax, 00000007
:00414B1D 0F841B010000 je 00414C3E <-- le troisième saut
:00414B23 8B2D803E4500 mov ebp, dword ptr [00453E80]

Et voilà on prcède de la même manière, remplacer le saut conditionnel par sa négation, je->jne, jne->je, jl->jnl

5ème étape: Modification définitive de l'EXE avec HIEW604

bon avec Soft Ice on a modifié les sauts mais de facon temporaire, si on quitte cdrlabel et qu'on le relance les sauts ne marche plus ;(.
Récapitultaif: il faut patcher en:

4134F3 offset: 128F3
403B20 offset: 02F20
414AE1 offset: 13EE1
414AF6 offset: 13EF6
414B1D offset: 13F1D
Remarque: Pour obtenir la valeur de l'offset pointer sur l'adresse avec w32dasm, l'offset est écrit tout en bas (dans la barre d'état).

Tout d'abord lancer Hiew604 puis ouvrez le fichier exe. Une fois l'exe ouvert appuyer sur F4 puis F3 afin d'afficher l'exe en ASM. Ensuite appuyer sur F5 (goto) et entrez l'offset que vous désirez modifier. Lorsque vous pointez sur l'offset à modifier éditez le à l'aide de la touche F3. Et voilà le tour et jouer ;)

6ème étape: Création du patch ! Enfin !!

Nous allons utiliser ici Byte Hunter 2.0 (le plus joli à mon gout et très simple, byte hunter est disponible dans la section Download - Utilitaires). Lancez BH (éxécutez make.bat). Remplissez les champs textes (Crack Title et Cracked by), ensuite entrez le nom de l'exe à cracker, la chaine hexa à modifier, et la chaine hexa modifiée.

Exemple:
Pour le Thanks for registering, la chaine Hexa à modifier est : 85 C0 74 15, il faut la remplacer par 85 C0 75 15.

RAD a titre indicatif ne crackez pas de programe :roll:


♠ - ω Comment is CLOSED for This POST ω - ♠
RAD

Image La plus grande erreur que puisse faire un homme est d'avoir peur d'en faire une.
User avatar
RAD
Administrateur - Site Admin
 
Posts: 532
Joined: Thu Aug 31, 2006 12:02 am

Return to PROGRAMING

Who is online

Users browsing this forum: No registered users and 2 guests

cron