Crack de Easy CDDA Extractor 4.3.2
by fredbug
Cours n°4

Salut, me revoilà pour un nouveau tut. On vas cracker Easy Cdda Extractor 4.3.2 qui est un logiciel permettant de convertir des fichiers .cda ou .wav en Mp3.


Infection

· Programme limité à 20 utilisations
· Boite d'enregistrement à 2 champs


Méthode

Live Approach, Dead Listing


Outils

SoftIce 4.05, WinDasm 8.93, ProcDump 1.6, Hex WorkShop


How To

Bon aller go! Au démarrage il nous affiche une boîte d'enregistrement, on vas encore attaquer par la ( je sais faire que ça... lol ).
Remplissez et la vous vous appercevez qu'on peut pas valider. Merde alors!!!
Pour qu'on puisse valider, il faut que le code soit bon. Donc le prog vérifie chaque lettre entré.
Donc remplissez quand même, allez sous Softice et posez un bpx HmemCpy. Sortez de SI.
Retapez une lettre ou un chiffre ( par exemple j'avais mis 12345, en sortant j'appuie sur "6" ).
SI break!!! Cool!!!
Il y a 2 champs donc faites F5, puis F12 jusqu'à revenir dans le prog ( 12 fois exactement ).
N'oubliez pas de faire bc* pour virer le bpx HmemCpy ( fais chier celui la à breaker tous le temps ).
Tracez avec F10 ( c'est pas trés loin ) et vous arriver là:

:004632F8 E813AA0E00              call 0054DD10			> call de vérif
:004632FD 84C0                    test al, al			> al=0 ???
:004632FF 7440                    je 00463341			> saute vers Badboy si al=0
:00463301 B001                    mov al, 01			> met al à 1


On voit que le saut en 004632FF ne nous est pas favorable, il faudrait que al<>0 pour qu'il soit favorable.
Donc allons voir dans le call 0054DD10, les manips faites sur al:

:0054DD10 55                      push ebp
:0054DD11 8BEC                    mov ebp, esp
:0054DD13 53                      push ebx
:0054DD14 8B00                    mov eax, dword ptr [eax]	> un sérial ( marche pas, sûrement crypté )
:0054DD16 8B12                    mov edx, dword ptr [edx]	> notre sérial
:0054DD18 E84310FDFF              call 0051ED60			> compare les deux sérials
:0054DD1D 0F94C0                  sete al			> ces deux instructions
:0054DD20 83E001                  and eax, 00000001		> mettent al à 0
:0054DD23 5B                      pop ebx
:0054DD24 5D                      pop ebp
:0054DD25 C3                      ret				> quitte


On repére tous de suite ce qui met al à 0 ( je rappel que al fait parti de eax ).
Donc moi j'ai choisi de mettre eax à 1, comme ça al est à 1 aussi.

Donc: 		0F94C0                  sete al
     		83E001                  and eax, 00000001

devient:	B8010000000		mov eax, 00000001	> met eax à 1
		90			nop			> équilibre le code


C'est la que sa ce complique, quand vous essayer de déssassemblez pour avoir les offsets, déjà il n'y a pas de SDR et les adresses ne correspondent pas.
Ca sent le prog packed ça. Ouvrez ProcDump > PE Editor > Sections et on voit:

   Object01: UPX0     RVA: 00001000 Offset: 00000400 Size: 00000000 Flags: E0000080
   Object02: UPX1     RVA: 001AB000 Offset: 00000400 Size: 000C0E00 Flags: E0000040
   Object03: .rsrc    RVA: 0026C000 Offset: 000C1200 Size: 00002800 Flags: C0000040


Bon, on voit direct que le prog est packed avec UPX, si vous me croyez pas éditer le fichier avec un éditeur hexa et vous verrait:

Info: This file is packed with the UPX executable packer http://upx.tsx.org $..$Id: UPX 1.07 Copyright (C) 1996-2001 the UPX Team. All Rights Reserved.

Vous me croyez maintenant!!!
Bah, on vas faire un dump automatique avec ProcDump. Ouvrez ProcDump, faites Unpack, choissisez UPX, et voilà vous vous retrouvez avec un dump fonctionnel.

Maintenant faites les modifs. Redémarrez le prog, rentrez un sérial bidon, le bouton se dégrise, validez, et voilà vous êtes registered.
Mais quand on redémarre il affiche un message comme quoi le sérial est mauvais. Donc voilà un exemple où les vérifications du code ne sont pas tous dans le même call.
Par contre, ils ont fait une erreur nous afficher le message ( ils auraient directement fermer le prog ça aurait était plus chaud. )
Déssassemblez le dump ( c'est long!! fais chier!!! ).
Maintenant recherchez le message d'erreur.
Mince y'en a deux, lequel est-ce le bon? On aurait pus tenter notre chance et modifier les deux endroits mais c'est que de la chance ça.
Si on fait ça vous aurait pas compris. Donc on vas recherchez le call qui affiche le nag.
Mes tentatives de recherche ont lamentablement échoué ( bpx MessageBoxA, et Task/Hwnd/Bmsg m'ont emmené n'importe où ), sauf une.

Tout d'abord il faut modifier les caractéristiques des sections pour avoir un break à l'entry point.
Donc avec ProcDump, modifiez pour avoir ça:

   Object01: UPX0     RVA: 00001000 Offset: 00000600 Size: 001AA000 Flags: E0000020
   Object02: UPX1     RVA: 001AB000 Offset: 001AA600 Size: 000C0B80 Flags: E0000020
   Object03: .rsrc    RVA: 0026C000 Offset: 0026B200 Size: 00002784 Flags: E0000020
   Object04: .idata   RVA: 0026F000 Offset: 0026DA00 Size: 00002400 Flags: E0000020


Je n'ai fait que mettre toutes les caractéristiques des sections à E0000020.

Puis prenez le loader de Softice, et tracez avec F10 jusqu'a faire apparaître le message et à chaque fois il faut regarder si on peut pas sauter par dessus le call qui provoque l'affichage.
Si y'a pas de saut et bah vous tracer dans le call à la recherche du call suivant et ainsi de suite.

Comme c'est vachement long je met pas de listing mais voilà l'ordre de passage des calls:

00536018 > 004016B0 > 004D2739 > 004233E2 > 00406A66 > 004CB870 > 004CBBED > 00429A18

On voit que le dernier call qui affiche le message est en 00429A18, allons voir ce qui s'y passe:

:004299D6 E859F8FFFF              call 00429234			> call de vérif
:004299DB 59                      pop ecx
:004299DC 84C0                    test al, al			> test si al=0
:004299DE 751A                    jne 004299FA			> saute direct sur le message
:004299E0 8B4DF4                  mov ecx, dword ptr [ebp-0C]
:004299E3 85C9                    test ecx, ecx			> test si ecx=0
:004299E5 7408                    je 004299EF			> si oui Badboy
:004299E7 8B45F4                  mov eax, dword ptr [ebp-0C]	> rien???
:004299EA 8B50FC                  mov edx, dword ptr [eax-04]	> notre code
:004299ED EB02                    jmp 004299F1			> saute vers Goodboy

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004299E5(C)
|
:004299EF 33D2                    xor edx, edx			> Badboy

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004299ED(U)
|
:004299F1 83FA0A                  cmp edx, 0000000A		> compare la longueur de notre sérial à 10
:004299F4 0F8D8E000000            jnl 00429A88			> si <>10 vas en Badboy

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004299DE(C)
|
:004299FA 66C78550FEFFFFB000      mov word ptr [ebp+FFFFFE50], 00B0

* Possible StringData Ref from Data Obj ->"The unlock key is not valid. Program "
                                        ->"will now exit."
                                  |
:00429A03 BA80DB5500              mov edx, 0055DB80
:00429A08 8D45A4                  lea eax, dword ptr [ebp-5C]
:00429A0B E878401200              call 0054DA88
:00429A10 FF855CFEFFFF            inc dword ptr [ebp+FFFFFE5C]
:00429A16 8B00                    mov eax, dword ptr [eax]
:00429A18 E8FB110B00              call 004DAC18			> affiche le message



Voilà on a trouvé le message, si on avait regardé dans les SDR, c'est vrai que ça allait plus vite mais bon....
Déjà on voit que le jne 004299FA nous amméne directement sur le message, donc on le noppe.
Le je 004299EF et le jmp 004299F1 n'ont aucune importance, car qu'on prenne l'un ou l'autre ce satané message s'affiche.
Par contre le jnl 00429A88 ne saute pas alors qu'on voudrait qu'il saute, donc on force le saut:

Donc:		0F8D8E000000            jnl 00429A88

devient:	E98F000000		jmp 00429A88		> force le saut en 00429A88
		90			nop			> équilibre le code


Faites les modifs avec votre éditeur hexa. Relancez le programme, maintenant il nous remet la boîte d'enregistrement.
Et voilà, en faite on a bien fait de tracer avec le symbol loader car maintenant il faut trouver le call qui affiche cette boîte.
Et ce coup la pas de SDR. Donc retracez avec SI jusqu'au Jump que vous venez de modifier.
A partir de cette endroit on peut continuer à tracez, et le nag s'affichera un peu plus loin, ici exactement:

:00429ADC E847421200              call 0054DD28
:00429AE1 84C0                    test al, al			> test si al=0
:00429AE3 0F84F5000000            je 00429BDE			> si oui n'affiche pas la boîte
:00429AE9 33C9                    xor ecx, ecx
:00429AEB B201                    mov dl, 01

* Possible StringData Ref from Data Obj ->"lhN"
                                  |
:00429AED A1D0F35600              mov eax, dword ptr [0056F3D0]
:00429AF2 E8298E0300              call 00462920
:00429AF7 8BD8                    mov ebx, eax
:00429AF9 8BC3                    mov eax, ebx
:00429AFB 8B10                    mov edx, dword ptr [eax]
:00429AFD FF92D8000000            call dword ptr [edx+000000D8]	> affiche la boîte



La boîte d'enregistrement est affiché en 00429AFD, au dessus on voit un saut qui ne saute pas.

Donc on le force:	0F84F5000000            je  00429BDE

devient:		0F85F5000000		jne 00429BDE


Ce coup-ci c'est bon ce shareware est déplombé. Enfin presque!!!
Oui, presque, il reste un petit outil File Converter fournit avec le logiciel. Cet outil nous affiche encore le message "The unlock key is not valid....."
Remédions à ça. A ce moment j'ai supposé que le deuxième message dans les SDR correspondait à ce qu'on cherchait.
J'avais pas envie de tout retracer.
Donc cherchez la phrase dans les SDR et prenez la seconde occurence:

:0044F9E4 E84B98FDFF              call 00429234			> le même call que tout à l'heure!!!Arf!!!
:0044F9E9 59                      pop ecx
:0044F9EA 84C0                    test al, al			> test si al=0
:0044F9EC 0F848E000000            je 0044FA80			> si oui saute
:0044F9F2 66C785C0FEFFFF8C00      mov word ptr [ebp+FFFFFEC0], 008C

* Possible StringData Ref from Data Obj ->"The unlock key is not valid. Program "
                                        ->"will now exit."
                                  |
:0044F9FB BA53A85600              mov edx, 0056A853
:0044FA00 8D45C0                  lea eax, dword ptr [ebp-40]
:0044FA03 E880E00F00              call 0054DA88
:0044FA08 FF85CCFEFFFF            inc dword ptr [ebp+FFFFFECC]
:0044FA0E 8B00                    mov eax, dword ptr [eax]
:0044FA10 E803B20800              call 004DAC18			> affiche le message



On voit le call 00429234, le même qu'au-dessus, ha si seulement j'avais changer directement dans le call.
Mais bon ça ne fait rien, de toute façon ça n'a aucune importance pour la suite, hehehe!!!
Bon on force le saut ( je n'explique pas, voir juste au-dessus )
Il nous réaffiche la boîte d'enregistrement, fais chier ce prog!!!, ici:

:0044FA86 E89DE20F00              call 0054DD28			> encore le même, Arf!!!
:0044FA8B 84C0                    test al, al			> test si al=0
:0044FA8D 0F84EB000000            je 0044FB7E			> si oui saute
:0044FA93 33C9                    xor ecx, ecx
:0044FA95 B201                    mov dl, 01

* Possible StringData Ref from Data Obj ->"lhN"
                                  |
:0044FA97 A1D0F35600              mov eax, dword ptr [0056F3D0]
:0044FA9C E87F2E0100              call 00462920
:0044FAA1 8BD8                    mov ebx, eax
:0044FAA3 66C785C0FEFFFF5C00      mov word ptr [ebp+FFFFFEC0], 005C
:0044FAAC 8BC3                    mov eax, ebx
:0044FAAE 8B10                    mov edx, dword ptr [eax]
:0044FAB0 FF92D8000000            call dword ptr [edx+000000D8]	> affiche la boîte



Là encore on retrouve le même call ( en faite je m'en apperçoit en écrivant le tut ).
Ce coup-ci ça a une importance pour la suite.
Bon forcez le saut en l'inversant.
Voilà le prog est complètement déplombé.

Reste plus qu'à faire le patch.
Et la c'est chiant car j'ai modifié beaucoup de ligne.
Et c'est là que me vint une idée de génie lol!!!
Je me suis dit: si on vire directement la boîte d'enregistrement ça fait quoi???
J'ai essayé et ça marche, en faite on vient de faire tous ça pour presque rien!!!Arf!!!
De ce coup la il y a beaucoup moins d'octet à modifier et c'est mieux pour réaliser le patch.

La décision d'ouvrir les deux boîtes d'enregistrement est prise dans le call 0054DD28, allons voir:

:0054DD28 55                      push ebp
:0054DD29 8BEC                    mov ebp, esp
:0054DD2B 53                      push ebx
:0054DD2C 8B00                    mov eax, dword ptr [eax]
:0054DD2E 8B12                    mov edx, dword ptr [edx]
:0054DD30 E82B10FDFF              call 0051ED60
:0054DD35 0F95C0                  setne al			> méchant
:0054DD38 83E001                  and eax, 00000001		> méchant
:0054DD3B 5B                      pop ebx
:0054DD3C 5D                      pop ebp
:0054DD3D C3                      ret



Il nous faut al=0 pour avoir tout bon!!!

Donc:		0F95C0                  setne al
		83E001                  and eax, 00000001

devient:	B800000000		mov eax, 00000000	> met eax à 0, donc al à 0
		90			nop			> équilibre le code


Je sait y'a plus économique ( xor al, al par ex. )
Vous faites comme vous voulez de toute façon.

Avant de faire du "Hard-Patching" on vas déjà faire un loader avec R!SC's Process Patcher.
Avant de faire le loader, il faut veiller à enlever 2 clés de la base de registre sinon on aura le message "The unlock key is not valid....."
Enlevez la clé avec votre nom et celle avec le code. ( Normalement il lance la boîte d'enregistrement si c'est bon ).
Voilà le loader que j'ai fait:

T=2000:								> le temps donné au loader
F=ezcddax.exe:							> le fichier source
O=Loader.exe:							> le fichier crée
P=0054DD35/0F,95,C0/B8,00,00:					> remplace la première ligne
P=0054DD38/83,E0,01/00,00,90:					> remplace la seconde ligne
$								> fin


Voilà un loader est fait!!! En plus ça marche terrible!!!
Par contre je ne sais pas comment en faire un pour File Converter. Ca fait rien vous le lancerez en passant par le menu du prog principal.

Bon maintenant passons au "Hard-Patching". ( Il faut avoir les 2 clés d'enlevés ).
Voilà à quoi ressemblera notre patch:

mov word ptr [0054DD35], 00B8					\
mov byte ptr [0054DD37], 00					 \ fais les modifs
mov word ptr [0054DD38], 0000					 /
mov byte ptr [0054DD3A], 90					/
jmp 00401000							 > passe le relais


Il ne reste plus qu'à trouver de la place, et dans ce cas c'est trés facile. On en trouve juste aprés le passage du relais:

//******************** Program Entry Point ********
:0066BA00 60                      pushad			> sauvegarde les registres
:0066BA01 BE2EB05A00              mov esi, 005AB02E
:0066BA06 8DBED25FE5FF            lea edi, dword ptr [esi+FFE55FD2]
------------------------------------------------------
------------------------------------------------------		> j'ai coupé
------------------------------------------------------
:0066BB6B 61                      popad				> restore les registres
:0066BB6C E98F54D9FF              jmp 00401000			> passe le relais
:0066BB71 000000                  BYTE  3 DUP(0)



:0066BB74 8CBB6600                DWORD 0066BB8C
:0066BB78 40BC6600                DWORD 0066BC40


:0066BB7C CC                      int 03
:0066BB7D DE5700                  ficom word ptr [edi+00]
:0066BB80 00000000000000000000    BYTE 10 DUP(0)		|
:0066BB8A 00000000000000000000    BYTE 10 DUP(0)		|
:0066BB94 00000000000000000000    BYTE 10 DUP(0)		| de l'espace libre
:0066BB9E 00000000000000000000    BYTE 10 DUP(0)		|
:0066BBA8 00000000000000000000    BYTE 10 DUP(0)		|
:0066BBB2 00000000000000000000    BYTE 10 DUP(0)		|


J'ai choisit de placer mon patch en 0066BB8A.
Il faut rediriger le loader vers mon patch:

Donc  		 E98F54D9FF              jmp 00401000		> passe le relais

devient		 EB1C			 jmp 0066BB8A		> saute vers le patch
		 90			 nop			//
		 90			 nop		       // > équilibre le code
		 90			 nop		      //


Faites toutes les modifs ( le redirigage, ainsi que le patch ).

Au début je l'avais fait en mémoire, ça marche parfaitement, le prog est cracké.
Mais quand on écrit le patch ( pas en mémoire ), et bah ce coup-ci il y a un problème.
Le logiciel nous affiche une salopperie de MessageBox "EAccessViolation" et ensuite il plante.
Hum, méchant ça!!! A mon avis le prog doit vérifier si en 0066BB8A il y a des octets nuls ( dans ce cas non, il y a le patch ). > Je suis pas sur de ce que je dit là.

Bon ça fait rien, on vas rechercher quel est le call qui affiche le message. Alors tracez depuis l'entry point du prog compressé. Voici l'ordre des calls qui affiche le message:

00536018 > 004016B0 > 004D2739 > 004233E2 > 00406A66 > 004CB7ED > 005072C6 > 00507114 > 005074E3

Voilà le dernier call qui affiche le message est en 005074E3, allons voir ce qui s'y passe:

:005074D0 53                      push ebx
:005074D1 56                      push esi
:005074D2 57                      push edi
:005074D3 8BFA                    mov edi, edx
:005074D5 8BD8                    mov ebx, eax
:005074D7 8B7308                  mov esi, dword ptr [ebx+08]
:005074DA 3B730C                  cmp esi, dword ptr [ebx+0C]
:005074DD 7506                    jne 005074E5			> ne saute pas
:005074DF 8BC3                    mov eax, ebx
:005074E1 8B10                    mov edx, dword ptr [eax]
:005074E3 FF12                    call dword ptr [edx]		> affiche le message

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:005074DD(C)
|
:005074E5 8B4304                  mov eax, dword ptr [ebx+04]		// réaffiche
:005074E8 893CB0                  mov dword ptr [eax+4*esi], edi       // le message


On voit tout de suite un saut qui évite le message, donc sous Softice, faites R FL Z quand vous serez sur la ligne du saut, manque de bol, le message s'affiche avec les lignes en-dessous.

Vu que je ne trouvais pas la solution, j'ai triché, j'ai retracé tous, mais avec le fichier original, et la j'ai vu qu'on passait sur ce call mais que ça n'affichait rien du tout!!!Arf!!!

Je me suis dit que je suis peut-être descendu trop bas dans les calls, alors j'ai été voir en 00507114:

* Referenced by a CALL at Address:			> 1 seul appel
|:005072C6   
|
:005070D4 53                      push ebx
:005070D5 E866A0EFFF              call 00401140
:005070DA 83B80400000000          cmp dword ptr [eax+00000004], 00000000
:005070E1 7519                    jne 005070FC			> dans prog modifié il saute
:005070E3 B201                    mov dl, 01               > mais ne saute pas dans prog original

* Possible StringData Ref from Data Obj ->"TvP"
                                  |
:005070E5 A1BC5A5000              mov eax, dword ptr [00505ABC]
:005070EA E8156C0100              call 0051DD04
:005070EF 8BD8                    mov ebx, eax
:005070F1 E84AA0EFFF              call 00401140
:005070F6 899804000000            mov dword ptr [eax+00000004], ebx

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:005070E1(C)
|
:005070FC E83FA0EFFF              call 00401140
:00507101 8B8000000000            mov eax, dword ptr [eax+00000000]
:00507107 50                      push eax
:00507108 E833A0EFFF              call 00401140
:0050710D 8B8004000000            mov eax, dword ptr [eax+00000004]
:00507113 5A                      pop edx
:00507114 E8B7030000              call 005074D0			> affiche le message
:00507119 B201                    mov dl, 01

* Possible StringData Ref from Data Obj ->"TvP"
                                  |
:0050711B A1BC5A5000              mov eax, dword ptr [00505ABC]
:00507120 E8DF6B0100              call 0051DD04
:00507125 8BD8                    mov ebx, eax
:00507127 E814A0EFFF              call 00401140
:0050712C 899800000000            mov dword ptr [eax+00000000], ebx
:00507132 5B                      pop ebx
:00507133 C3                      ret



En faisant encore des comparaisons avec les 2 fichiers ( modifié et original ), j'ai vu qu'en 005070E1 le saut était différent suivant le fichier.
Donc j'inverse le saut dans le prog modifié, et là, miracle tout marche parfaitement.
En faite j'ai pas compris pourquoi c'est ce saut la qu'il faut modifié. Mais bon ça marche!!!

Maintenant le patch vas devenir:

mov word ptr [0054DD35], 00B8					\
mov byte ptr [0054DD37], 00					 \ fais les modifs
mov word ptr [0054DD38], 0000					 /
mov byte ptr [0054DD3A], 90					/
mov byte ptr [005070E1], 74					> inverse le saut
jmp 00401000							> passe le relais


Heu!!! Je vous ait dit que tout marchais, allez un peu dans le menu About, pof plantage.
Dans d'autre menu c'est la même chose.
Commence vraiment à m'énerver ce programme.
Je me suis dit que le programme devait passer dans cette routine plusieurs fois, mais pourtant il n'y a qu'un seul appel à cette routine ( voir listing ).
Alors j'ai posé un break dans cette routine, en allant dans le menu About, Softice break, donc le prog utilise cette routine plusieurs fois.

La première fois que le prog passe dans cette routine c'est au démarrage, et la elle sert de protection, donc à ce momment elle doit être modifié.
C'est ce qu'on a fait on l'a modifié, mais aprés quand on est dans le programme il faut que la routine soit normal sinon ça plante, donc juste aprés le premier passage il faut remettre la routine comme elle était avant.

Donc pour que la routine soit normal, on vas crée un patch qui la remettra à la normal.
Tout d'abord il faut crée le saut qui vas aller vers le patch:

Donc:		B201                    mov dl, 01
		A1BC5A5000              mov eax, dword ptr [00505ABC]

devient:	E9EA4A1600		jmp 0066BBD2		> saute vers le second patch
		90			nop			// équilibre
		90			nop		       // le code


Mais rappelez vous que nous sommes dans une zone compressé, donc on ne peut appliquer les modifs comme on veut, ce saut il faut le crée en rajoutant quelques lignes à notre premier patch:

mov dword ptr [005070E3], 164AEAE9		> commence à crée le jump
mov word ptr [005070E7], 9000			> finis de le crée et équilibre
mov byte ptr [005070E9], 90			> équilibre

Ainsi voilà la totalité du premier patch:

mov word ptr [0054DD35], 00B8			\
mov byte ptr [0054DD37], 00			 \ fais les modifs
mov word ptr [0054DD38], 0000			 /
mov byte ptr [0054DD3A], 90			/
mov byte ptr [005070E1], 74			> inverse le saut
mov dword ptr [005070E3], 164AEAE9		> commence à crée le jump
mov word ptr [005070E7], 9000			> finis de le crée et équilibre
mov byte ptr [005070E9], 90			> équilibre
jmp 00401000					> passe le relais



Maintenant que le saut pour aller au second patch est fait, faisons le patch en lui-même:

mov dl, 01					> restore ce qu'on a écrasée
mov eax, dword ptr [00505ABC]			> idem
mov byte ptr [005070E1], 75			> remet le saut à la normal
jmp 005070EA					> retourne à la suite


Ce patch est a placée en 0066BBD2, juste aprés le premier patch. Faites les modifs. Relancez, tout marchent parfaitement, tous les menus marchent.
Ce coup-ci c'est bon, on en a enfin finit avec ce logiciel. Merci à UPX de nous laisser autant de place à la fin du fichier.

Voilà ce n'était pas si dure que ça, juste un peu long. En tout cas ce crack m'auras vraiment fait voir l'avantage de faire un loader ( ça vas 10 fois plus vite!!! ). Comme vous pouvez le remarquer à la fin c'est le bordel donc si quelqu'un a une meilleure solution, alors il peut l'écrire et on la mettra à la suite de ce tut.

Bah je vous dit à bientôt pour un prochain tut qui portera sûrement sur un jeu ( faut bien changer de temps en temps ).

fredbug

Greetz: A tous ceux qui m'ont fait découvrir le Cracking ( Toutes la ShmeitCorp, Christal et plein d' autres....... )