Nom : 3D Mark 99 Protection : Limitations Disponibilité : http://www.3dmark.com Objectif : Trouver son serial correspondant à son nom Outil : Softice 3.24/Windasm 8.93 Cible : 3Dmark.exe (889 Ko) Difficulté : crack de niveau A 3D MArk 99 est un petit benchmark sympathique vous permettant de tester les performances de votre carte video . Il est limité dans la version demo (certaines options sont désactivées).Le soft possède une option register permettant de nous enregistrer auprès de l'auteur.C'est ça que nous allons cracker.On va trouver le numéro de série correspondant à notre nom . On lance le soft et on va dans l'option register et on tape un serial bidon . Vous devriez voir un écran avec un nag affichant 'incorrect registration information' .On prend windasm et on desassemble l'exécutable . On clique sur 'string data reference' et on cherche une chaine 'incorrect registration information' .On la trouve ,ce qui en cliquant deux fois dessus nous donne ceci : :00405C80 53 push ebx :00405C81 56 push esi :00405C82 57 push edi :00405C83 8BF9 mov edi, ecx :00405C85 6A01 push 00000001 * Reference To: MFC42.Ordinal:18BE, Ord:18BEh :00405C87 E856E30800 Call 00493FE2 :00405C8C 8B4F64 mov ecx, dword ptr [edi+64]----- on met notre nom dans le registre ECX :00405C8F 8B41F8 mov eax, dword ptr [ecx-08]----- on met la longueur du nom dans eax (pour toto,eax=4) :00405C92 85C0 test eax, eax------------------- Test si on a entré quelque chose dans le nom :00405C94 0F8493000000 je 00405D2D--------------------- Non ? on saute vers 'invalid...' :00405C9A 8B4760 mov eax, dword ptr [edi+60]-----met notre serial dans EAX :00405C9D 8B40F8 mov eax, dword ptr [eax-08]-----met la longueur de notre serial dans eax :00405CA0 85C0 test eax, eax------------------- on a entre un serial ? :00405CA2 0F8485000000 je 00405D2D--------------------- non : on saute :00405CA8 83F811 cmp eax, 00000011--------------- le serial a-t-il plus de 18 caractères ? (11h en hexa = 18 en décimal) :00405CAB 741D je 00405CCA--------------------- oui ! on continue à traiter le serial :00405CAD 6A00 push 00000000 :00405CAF 6A00 push 00000000------------------- sinon on affiche le nag * Possible Reference to String Resource ID=61598: 'Incorrect registration information. Please enter the correct' :00405CB1 689EF00000 push 0000F09E :00405CB6 B950D44B00 mov ecx, 004BD450 :00405CBB E8E04E0400 call 0044ABA0 :00405CC0 50 push eax En cliquant deux fois dessus on s'apperçoit qu'elle est référencée deux fois dans le code (2 endroits différents).C'est la première référence qui nous interresse (en 405c80 ,voir ci-dessus). Maintenant que l'on a l'addresse où l'encodage du serial se fait , on va se servir de softice . On prend symbol loader et on charge 3dmark99. Sous softice on met un BPX en 405c80 : BPX 405c80 (entrée). On relance 3dmark99 en appuyant sur F5 . On va à l'option register et on tape notre nom et un serial bidon (123456789 par exemple) . On valide et normalement softice a du se mettre en route et bloquer le prog à l'addresse 405c80 . Vous remarquez qu'il y a un call (call 493fe2) suivit de plusieurs sauts conditionnel . Les deux premiers nous balance vers une boite 'invalid registration' alors que le troisième continue à traiter le serial. Lisez les commentaires , ils sont assez parlant .Il faut donc entrer plus de 17 caractères pour que le prog continue à traiter le serial . On relance le soft et ce coup-ci on entre comme serial :0123456789abcdef1 . Je sais , ça fait que 17 caractères mais le 18ème sert au prog pour lui signaler la fin du serial(il met un 0 au 18ème caractères).Donc cette fois le soft continue à encoder le serial et on arrive à cette routine : :00405CCA E8D1FBFFFF call 004058A0--------------------- ici on encode le serial :00405CCF 8B7760 mov esi, dword ptr [edi+60]------- on met le serial bidon dans le registre esi * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:00405CF4(C) :00405CD2 8A10 mov dl, byte ptr [eax]------------ le bon serial (E EAX pour le voir) dans dl :00405CD4 8A1E mov bl, byte ptr [esi]------------ serial bidon dans bl :00405CD6 8ACA mov cl, dl------------------------ bon serial dans cl :00405CD8 3AD3 cmp dl, bl------------------------ et on compare le serial bidon avec le bon ... :00405CDA 751E jne 00405CFA---------------------- on test le résultat de la comparaison :00405CDC 84C9 test cl, cl :00405CDE 7416 je 00405CF6 :00405CE0 8A5001 mov dl, byte ptr [eax+01] :00405CE3 8A5E01 mov bl, byte ptr [esi+01] :00405CE6 8ACA mov cl, dl :00405CE8 3AD3 cmp dl, bl :00405CEA 750E jne 00405CFA :00405CEC 83C002 add eax, 00000002 :00405CEF 83C602 add esi, 00000002 :00405CF2 84C9 test cl, cl :00405CF4 75DC jne 00405CD2 * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:00405CDE(C) :00405CF6 33C0 xor eax, eax------------------- mauvais serial ,on met eax à 0 :00405CF8 EB05 jmp 00405CFF * Referenced by a (U)nconditional or (C)onditional Jump at Addresses: |:00405CDA(C), :00405CEA(C) :00405CFA 1BC0 sbb eax, eax :00405CFC 83D8FF sbb eax, FFFFFFFF * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:00405CF8(U) :00405CFF 85C0 test eax, eax----------------- et on test eax :00405D01 750D jne 00405D10------------------ eax = 0 ? oui,on saute vers le nag 'invalid ...' :00405D03 6A01 push 00000001 :00405D05 8BCF mov ecx, edi------------------ sinon tout va bien ... * Reference To: MFC42.Ordinal:0A55, Ord:0A55h :00405D07 E8CAE20800 Call 00493FD6 :00405D0C 5F pop edi :00405D0D 5E pop esi :00405D0E 5B pop ebx :00405D0F C3 ret * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:00405D01(C) :00405D10 6A00 push 00000000----------------- le nagscreen :00405D12 6A00 push 00000000 * Possible Reference to String Resource ID=61598: 'Incorrect registration information. Please enter the correct' :00405D14 689EF00000 push 0000F09E :00405D19 B950D44B00 mov ecx, 004BD450 :00405D1E E87D4E0400 call 0044ABA0 :00405D23 50 push eax En 405cd2 on trouve dans le registre EAX le bon serial et en ESI le serial bidon qu'on a rentré .Pour le voir sous softice vous faites :E EAX pour le bon serial et E ESI pour le mauvais . Voilà ! Pas compliqué ?Si un peu quand même ? Dites-vous que le plus dur , c'est de trouver la routine d'encodage du serial .Généralement la suite coule de source ... Donc pour moi : TaMaMBoLo avec comme serial :LW2SA-5FY9W-XVND5 Note : il y a une nouvelle version de 3DMark99 qui est sortit : c'est EXaCTeMEnT la même démarche que la version qu'on a cracké ...De plus la routine d'encodage du serial est la même que dans la version précédente ( Le numéro de la version précédente marche avec la nouvelle)... TaMaMBoLo