Crack de ZipMagic 1.0

By Nody

Intro.  

 

Logiciel : ZipMagic 1.0

Source : Beaucoup de mag. récents (Windows News, etc..)

Outils : W32Dasm, Soft-Ice et un éditeur hexa

Commentaires :

ZipMagic permet d'utiliser différement les fichiers Zip comme utiliser les fichiers zippés sans décompresser l'archive (enfin, ça c'est ce qu'ils disent ...)

 

Le Crack.

 

Je ne suis pas sur que ce tutorial s'adresse vraiment aux débutants, enfin, c'est à vous de voir si vous comprenez ou pas (encore).

Avancez votre horloge système de quelques jours, démarrez ZipMagic (zipmagic.exe pas la connerie de la barre des tâches) et obervez ... Ouah ! Quoi de plus simple, une MessageBoxA "The system date is not properly set" . Donc sous SI (SoftIce), mettez un 'bpx messageboxa' et retournez sous Windows. Redémarrez ZM (ZipMagic ;-) ), on tombe (normalement) sous SI, un petit coup de F12 et on a l'adresse qui est : 004415D1. On va donc désassemblez zipmagic.exe pour trouver l'adresse. Je vous attends le temps de désassembler. C'est bon, c'est fait ? Allez recherchez l'adresse 004415D1 et on tombe sur :

BYTE 10 DUP(0)

Evidement, c'est pas vraiment ce qu'on attendait.....ne cherchez pas ailleurs on est dans le bon programme mais seulement, les données de cette partie du programme ne sont pas (encore) écrites. Réfléchissons une minute, .... est-ce qu'il y a une API qui permet d'écrire dans une zone mémoire ? Je dirais WriteProcessMemory (kernel32), aller, on va chercher cette API. Bingo, elle est dedans, et en plus elle n'y ait qu'une fois, ce qui peut faciliter la tâche. Sous SI, mettez un 'bpx writeprocessmemory', puis démarrez ZM. On tombe sous SI. AVANT de faire l'habituel F12, tapez : d 4415D1 et s'affichent que des 0. Maintenant, tapez F12, et refaites un 'd 4415D1' et là on voit autre chose que des 0, ça commence par FF 15, les octets habituels pour appeler une API (comme MessageBoxA).

Donc, on sait maintenant à partir de quand sont inscrites les données. Le problème est : comment patcher les octets du programme, alors qu'ils ne sont écrits qu'à partir de l'offset 00430273 (WriteProcessMemory) ??  On pourrait récupérer les octets que l'API WriteProcessMemory écrit dans le prog. à l'aide du logiciel softdump, les ré-inscire, virer l'API et patcher ? Mouais, bôf c'est assez lourd comme méthode .... On va faire autre chose : juste après l'API, on va écrire les "bons" octets au bon offset.

Problème : W32Dasm ne nous servira plus beaucoup, il faudra utiliser uniquement SI. Bon, c'est parti : la MessageBoxA est en 004415D1. Sous SI, on observe ce qu'il y a au-dessus : ah! En 004415A3 on a un jz qui fait passer au-dessus de l'appel de la DBoxParamA. Faites un 'd 4415A3' et on a : 74. Alors pour patcher ça il faut remplacer 74 par EB.

On va d'abord tester pour voir si c'est le bon saut (on ne sait jamais, toujours vérifier !) :

- Mettez un  'bpx writeprocessmemory' sous SI, démarrez ZM, et sous SI, faites un F12 pour sortir de l'API.

- tapez 'db 4415A3' et vous verrez un 74.

- tapez 'e' changez le 74 en EB, puis Entrer et Ctrl-D.

Ouaip ! Ça marche !!

Mais bon, ne vous réjouissez pas trop : si vous avancez un peu plus la date, il y a une DialogBoxParamA "The evaluation Period of ZM has ended", si vous reculez la date, il y a d'autres nags pas vraiment dur à virer (comme la MessageBoxA ci-dessus) MAIS il reste à savoir comment virer en direct les octets.

Je vous donne les autres adresses des nags : (que vous devriez être capable de trouver facilement avec SI en posant des bpx messageboxa et dialogboxparama) :

004415A3 -> mettre un EB

00441769 -> mettre un 90

0044176A -> mettre un E9

00441795 -> mettre un EB

004416F3 -> mettre un 90

004416F4 -> mettre un E9

0044168F -> mettre un EB

0044061C -> mettre un EB

0044165D -> mettre un EB

Voilà c'est tout.

On ne change que des octets donc il faudra utiliser la commande :

mov byte ptr [adresse], octet

Il faut aussi rechercher un petit bout de code dans zipmagic.exe pour nous permettre d'écrire notre petite routine. C'est bon je l'ai fait pour vous : on a ça en 0043F16B.

On va se rendre à cette adresse de cette manière (après le WriteProcessMemory of course) :

 

Original :

 

* Reference To: KERNEL32.WriteProcessMemory, Ord:0285h

|

:00430273 FF15C0B64400 Call dword ptr [0044B6C0]

:00430279 8B542418 mov edx, dword ptr [esp+18]

:0043027D 8B3D48894400 mov edi, dword ptr [00448948]

:00430283 83C214 add edx, 00000014   <= ICI on va implanter le saut qui

:00430286 33C0 xor eax, eax             envoie à notre routine

:00430288 8BCA mov ecx, edx

:0043028A C1E902 shr ecx, 02

:0043028D F3 repz

:0043028E AB stosd

:0043028F 8BCA mov ecx, edx

ETC....

 

La Notre : ( les octets en bleu sont ceux à changer !)

 

* Reference To: KERNEL32.WriteProcessMemory, Ord:0285h

|

:00430273 FF15C0B64400 Call dword ptr [0044B6C0]

:00430279 8B542418 mov edx, dword ptr [esp+18]

:0043027D 8B3D48894400 mov edi, dword ptr [00448948]

:00430283 E9E3EE0000 jmp 0043F16B             <= goto notre routine

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:0043F1A1(U)                         <= retour de notre routine

|

:00430288 8BCA mov ecx, edx

:0043028A C1E902 shr ecx, 02

:0043028D F3 repz

:0043028E AB stosd

:0043028F 8BCA mov ecx, edx

 

ET

 

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:00430283(U)

|

:0043F16B C605A3154400EB mov byte ptr [004415A3], EB

:0043F172 C6056917440090 mov byte ptr [00441769], 90

:0043F179 C6056A174400E9 mov byte ptr [0044176A], E9

:0043F180 C60595174400EB mov byte ptr [00441795], EB

:0043F187 C605F316440090 mov byte ptr [004416F3], 90

:0043F18E C605F4164400E9 mov byte ptr [004416F4], E9

:0043F195 83C214 add edx, 00000014         / code original

:0043F198 33C0 xor eax, eax                /

:0043F19A C6058F164400EB mov byte ptr [0044168F], EB / je les avais

:0043F1A1 C6051C064400EB mov byte ptr [0044061C], EB / oublié ceux

:0043F1A8 C6055D164400EB mov byte ptr [0044165D], EB / là !!

:0043F1AF E9D410FFFF jmp 00430288     <= retour au prog.

:0043F1B4 00000000000000000000 BYTE 10 DUP(0)

 

Et voilà !!! C'est fait. Il y a encore le fichier zm32.exe a cracker, mais bon c'est exactement de la même façon, donc je vous laisse le faire ;-).

 

 

Et voilà, Zip Magic 1.0 version version d'essai n'est plus. Faîtes en bonne usage mais d'oublier que ce que vous êtes en train de lire est une AIDE pour les crackers débutants !! Si vous vous en servez à un autre usage, allez sur un moteur de recherche, cherchez un patch pour Zip Magic 1.0, mettez-y votre nom et soyez heureux mais vous n'êtes pas cracker alors mais simple copieur.

 

nodless@usa.net