TUTORIAL POUR CRACKER GIF Movie Gear 3
Voici un autre programme tout simple à cracker que vous pourrez trouver à l'adresse suivante: http://www.visic.com, http://www.telecharger.com. Gif Movie Gear est un petit programme permettant de créer des gifs animés. La protection reste plutôt classique et notre objectif sur le crack de se programme, est de s'enregistré avec un faux serial.
Tout d'abord, on lance GIF Movie Gear et on essaye de s'enregistrer avec un faux serials mais le programme nous retourne le message suivant: "Renseignements d'enregistrement invalides..."
Donc, on lance Windasm et on désassemble movgear.exe (par défaut: C:\Program Files\Visicom Media\GMG3\movgear.exe). Ensuite, on va chercher dans les "String Data Réference le message : "Renseignements d'enregistrement invalides...", et une fois celle ci trouvé, on double clique dessus, et on atterrit la :
1ère Phase de Désassemblage
:00431C27 8D8424C4000000 | lea eax, dword ptr [esp+000000C4] | Le nom en esp+000000C4 |
:00431C2E 8D4C2460 | lea ecx, dword ptr [esp+60] | Le serial en esp+60 |
:00431C32 50 | push eax | Sauvegarde de |
:00431C33 51 | push ecx | eax et ecx |
:00431C34 E8E7FAFFFF | call 00431720 | Test du serial |
:00431C39 83C408 | add esp, 00000008 | |
:00431C3C 85C0 | test eax, eax | Verifie si eax=0 |
:00431C3E 0F84AD000000 | je 00431CF1 | Si eax=0, on saute à : "Les renseignements..." |
:00431C44 8D542410 | lea edx, dword ptr [esp+10] | |
:00431C48 8D44240C | lea eax, dword ptr [esp+0C] | Sinon, ecriture nom/serial dans le registre |
:00431C4C 52 | push edx | |
:00431C4D 50 | push eax | |
:00431C4E 6A00 | push 00000000 | |
:00431C50 683F000F00 | push 000F003F | |
:00431C55 6A00 | push 00000000 | |
:00431C57 6894FE4400 | push 0044FE94 | |
:00431C5C 6A00 | push 00000000 |
* Possible StrinData Ref from Data Obj
->"Software\gamani\GIFMovieGear\2.0"
:00431C5E 68D0C44400 | push 0044C4D0 | |
:00431C63 6801000080 | push 80000001 |
* Reference To: ADVAPI32.RegCreateKeyExA, Ord:015Fh
:00431C68 FF1510904400 | Call dword ptr [00449010] | |
:00431C6E 8D7C2460 | lea edi, dword ptr [esp+60] | |
:00431C72 83C9FF | or ecx, FFFFFFFF | |
:00431C75 33C0 | xor eax, eax | |
:00431C77 8B54240C | mov edx, dword ptr [esp+0C] | |
:00431C7B F2 | repnz | |
:00431C7C AE | scasb | |
:00431C7D F7D1 | not ecx |
* Reference To: ADVAPI32.RegSetValueExA,
Ord:0186h
:00431C7F 8B1D18904400 | mov ebx, dword ptr [00449018] | |
:00431C85 51 | push ecx | |
:00431C86 8D4C2464 | lea ecx, dword ptr [esp+64] | |
:00431C8A 51 | push ecx | |
:00431C8B 6A01 | push 00000001 | |
:00431C8D 50 | push eax |
* Possible StringData Ref from Data Obj ->"RegName3"
:00431C8E 68FCE54400 | push 0044E5FC | |
:00431C93 52 | push edx | |
:00431C94 FFD3 | call ebx | |
:00431C96 8DBC24C4000000 | lea edi, dword ptr [esp+000000C4] | |
:00431C9D 83C9FF | or ecx, FFFFFFFF | |
:00431CA0 33C0 | xor eax, eax | |
:00431CA2 F2 | repnz | |
:00431CA3 AE | scasb | |
:00431CA4 F7D1 | not ecx | |
:00431CA6 8D8424C4000000 | lea eax, dword ptr [esp+000000C4] | |
:00431CAD 51 | push ecx | |
:00431CAE 8B4C2410 | mov ecx, dword ptr [esp+10] | |
:00431CB2 50 | push eax | |
:00431CB3 6A01 | push 00000001 | |
:00431CB5 6A00 | push 00000000 |
* Possible StringData Ref from Data Obj ->"RegCode3"
:00431CB7 6808E64400 | push 0044E608 | |
:00431CBC 51 | push ecx | |
:00431CBD FFD3 | call ebx | |
:00431CBF 8B54240C | mov edx, dword ptr [esp+0C] | |
:00431CC3 52 | push edx |
* Reference To: ADVAPI32.RegCloseKey, Ord:015Bh
:00431CC4 FF1514904400 | Call dword ptr [00449014] |
* Possible StringData Ref from Data Obj ->"Software\Loani\MG3t"
:00431CCA 6814E64400 | push 0044E614 | |
:00431CCF 6802000080 | push 80000002 |
* Reference To: ADVAPI32.RegDeleteKeyA,
Ord:0162h
:00431CD4 FF1504904400 | Call dword ptr [00449004] | |
:00431CDA 6A01 | push 00000001 | |
:00431CDC 56 | push esi |
* Reference To: USER32.EndDialog, Ord:00B9h
:00431CDD FF1594944400 | Call dword ptr [00449494] | |
:00431CE3 5F | pop edi | |
:00431CE4 5E | pop esi | |
:00431CE5 33C0 | xor eax, eax | |
:00431CE7 5B | pop ebx | |
:00431CE8 81C41C010000 | add esp, 0000011C | |
:00431CEE C21000 | ret 0010 |
* Referenced by a (U)nconditional or
(C)onditional Jump at Address:
|:00431C3E(C)
|
:00431CF1 6A30 | push 00000030 | Le NagScreen |
* Possible Reference to String Resource ID=40213: "Renseignements d'enregistrement invalides"
:00431CF3 68159D0000 | push 00009D15 |
* Possible Reference to String Resource
ID=40212: "Les renseignements que vous venez d'entrer sont
erronés.
Vér"
Fin de la 1ère Phase de Désassemblage
En partant d'une logique assez simple, on pense tout d'abord à virer le saut conditionnel. On prend donc son éditeur hexadécimal préféré, et on se rend à l'offset 31C3Eh, et l'on place 6 nops (c'est à dire : 90 90 90 90 90 90). On relance le prog, on s'enregistre, et la....magie, ça marche, mais si vous voulez vous contentez de ça, n'éteignez plus jamais votre machine et ne fermez plus jamais le prog, car à la prochaine réouverture, le prog sera à nouveau bridé. Donc, il y a un problême quelque part. On désassemble encore une fois, et en regardant bien, on s'aperçoit que juste avant le saut conditionnel, il y a un petit "Call" qui pourrait bien être l'objet de nos soucis. On clique donc dessus, et sur quoi on tombe :
2ème Phase de Désassemblage
* Referenced by a CALL at
Adresses:
|:00431979 , :00431C34
:00431720 8B442408 | mov eax, dword ptr [esp+08] | |
:00431724 8B4C2404 | mov ecx, dword ptr [esp+04] | |
:00431728 50 | push eax | |
:00431729 51 | push ecx | |
:0043172A E811000000 | call 00431740 | |
:0043172F 83C408 | add esp, 00000008 | |
:00431732 C3 | ret |
Fin de la 2ème Phase de Désassemblage
Il ne faut pas sortir de science po pour s'apercevoir que le "Call" est appelé à deux endroits différents dans le code, penchons nous la dessus. On vient de l'adresse 00431C34, donc, il nous faut aller faire un tour du coté de l'adresse 00431979. C'est ce que l'on fait :
3ème Phase de Désassemblage
:0043196F 8D4C2478 | lea ecx, dword ptr [esp+78] | on retrouve la même chose dans le premier désassemblage |
:00431973 8D542414 | lea edx, dword ptr [esp+14] | |
:00431977 51 | push ecx | |
:00431978 52 | push edx | |
:00431979 E8A2FDFFFF | call 00431720 | Notre call |
:0043197E 83C408 | add esp, 00000008 | |
:00431981 85C0 | test eax, eax | Encore un test |
:00431983 745D | je 004319E2 | Si eax=0 on saute (comme désassemblage 1) |
:00431985 8B9424E0000000 | mov edx, dword ptr [esp+000000E0] | |
:0043198C BB01000000 | mov ebx, 00000001 | |
:00431991 85D2 | test edx, edx | |
:00431993 7421 | je 004319B6 | |
:00431995 8D7C2414 | lea edi, dword ptr [esp+14] | |
:00431999 83C9FF | or ecx, FFFFFFFF | |
:0043199C 33C0 | xor eax, eax |
Fin de la 3ème Phase de Désassemblage
Etant donné que nous sommes tous des bons crackers, on s'est tous rendu compte que le "call 00431720" est suivi d'un saut conditionnel en 00431983, et on va s'occupé de son cas tout de suite. On regarde son adresse hexadécimale, qui est : l'Offset 00031991h, on relance l'éditeur hexa, on va à l'offset que l'on vient de noté, et on place deux nops (90 90). On enregistre, et voila, on relance le programme, on s'enregistre avec un numéro de son choix, et miracle, il n'y a plus de NagScreen.