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