Nom : Le Mans 24 Hours Version : 1.0 FRENCH Editeur : Infogrames Protection : CD-checks Tools : Softice 4.0 Le cd original du jeu Brain/ganja/coca ARf! Ca faisait longtemps que j'avais poa cracker un jeu... En plus celui là n'est poa très dure et le jeu plutot pas mal (thx Sdogfighter!) ... La protection du soft est un malheureux CD-check qu'on va peter en 2 secondes... Step 1 Pour cracker les CD-checks, 'y a un breakpoint vachement cool : BPX GetdrivetypeA . Avant de lancer le jeu, on fait surgir SI : CRTL D . On entre notre breakpoint : BPX getdrivetypeA et on relance le tout avec F5 . Now on lance le gamez . SI ne tarde poa à se mettre en route . Il se bloque au début de l'API Getdrivetypea. Il faut donc remonter avec F11 pour se retrouver dans le code principal du proggy . Une fois sur F11 et on arrive ici : 015F:10018453 ADD ESP,0C 015F:10018456 LEA EDX,[ECX*8+1024EDE0] 015F:1001845D PUSH EDX 015F:1001845E CALL EDI 015F:10018460 CMP EAX,05 ---- 1 fois F11 et on arrive ici avec SI 015F:10018463 JNZ 1001846B 015F:10018465 INC DWORD PTR [101E28E4] 015F:1001846B INC ESI 015F:1001846C CMP ESI,1A 015F:1001846F JL 10018424 015F:10018471 MOV EAX,[101E2900] 015F:10018476 TEST EAX,EAX 015F:10018478 JNZ 10018589 015F:1001847E MOV EBP,[KERNEL32!GetVolumeInformationA] 015F:10018484 MOV EAX,[101E28E4] 015F:10018489 MOV DWORD PTR [ESP+10],00000000 015F:10018491 TEST EAX,EAX 015F:10018493 JLE 1001854C 015F:10018499 MOV EBX,1024EDE0 015F:1001849E MOV EDI,EBX 015F:100184A0 OR ECX,-01 015F:100184A3 XOR EAX,EAX 015F:100184A5 MOV EDX,[10092EAC] 015F:100184AB REPNZ SCASB 015F:100184AD NOT ECX 015F:100184AF SUB EDI,ECX 015F:100184B1 MOV EAX,ECX 015F:100184B3 MOV ESI,EDI 015F:100184B5 MOV EDI,1024EFA0 015F:100184BA SHR ECX,02 015F:100184BD REPZ MOVSD 015F:100184BF MOV ECX,EAX 015F:100184C1 AND ECX,03 015F:100184C4 REPZ MOVSB 015F:100184C6 MOV ECX,[10092EB0] 015F:100184CC PUSH ECX 015F:100184CD PUSH 1024F040 015F:100184D2 PUSH 1024F024 015F:100184D7 PUSH 1024EBC0 015F:100184DC PUSH 1024ED1C 015F:100184E1 PUSH EDX 015F:100184E2 PUSH 1024ED40 015F:100184E7 PUSH 1024EFA0 015F:100184EC CALL EBP 015F:100184EE TEST EAX,EAX 015F:100184F0 JZ 10018532 015F:100184F2 PUSH 10092FDC 015F:100184F7 PUSH 1024ED40 015F:100184FC CALL 1005E840 015F:10018501 ADD ESP,08 015F:10018504 TEST EAX,EAX 015F:10018506 JNZ 10018532 015F:10018508 MOV EDI,EBX 015F:1001850A OR ECX,-01 015F:1001850D REPNZ SCASB 015F:1001850F NOT ECX 015F:10018511 SUB EDI,ECX 015F:10018513 MOV DWORD PTR [101E2900],00000001 015F:1001851D MOV EAX,ECX 015F:1001851F MOV ESI,EDI 015F:10018521 MOV EDI,1024EEC0 015F:10018526 SHR ECX,02 015F:10018529 REPZ MOVSD 015F:1001852B MOV ECX,EAX 015F:1001852D AND ECX,03 015F:10018530 REPZ MOVSB 015F:10018532 MOV EAX,[ESP+10] 015F:10018536 MOV ECX,[101E28E4] 015F:1001853C INC EAX 015F:1001853D ADD EBX,08 015F:10018540 CMP EAX,ECX 015F:10018542 MOV [ESP+10],EAX 015F:10018546 JL 1001849E 015F:1001854C MOV EAX,[101E2900] -- 1er test du bon CD 015F:10018551 TEST EAX,EAX -------- Bon CD ? 015F:10018553 JNZ 10018589 -------- oui! on saute 015F:10018555 MOV ECX,[1024ED24] 015F:1001855B PUSH 05 015F:1001855D PUSH 1009223C-------- sinon messagebox, veuillez inserer le CD 015F:10018562 PUSH 10092FAC 015F:10018567 PUSH ECX 015F:10018568 CALL [USER32!MessageBoxA] 015F:1001856E CMP EAX,02 015F:10018571 MOV [1024ED18],EAX 015F:10018576 JZ 1001861F 015F:1001857C MOV EAX,[101E2900] 015F:10018581 TEST EAX,EAX 015F:10018583 JZ 10018484 015F:10018589 MOV EDX,[1024ED24] 015F:1001858F PUSH EDX 015F:10018590 CALL [USER32!SetFocus] 015F:10018596 MOV EDI,1024EEC0 015F:1001859B OR ECX,-01 015F:1001859E XOR EAX,EAX 015F:100185A0 LEA EDX,[ESP+14] 015F:100185A4 REPNZ SCASB 015F:100185A6 NOT ECX 015F:100185A8 SUB EDI,ECX 015F:100185AA PUSH 10084B54 015F:100185AF MOV EAX,ECX 015F:100185B1 MOV ESI,EDI 015F:100185B3 MOV EDI,EDX 015F:100185B5 LEA EDX,[ESP+18] 015F:100185B9 SHR ECX,02 015F:100185BC REPZ MOVSD 015F:100185BE MOV ECX,EAX 015F:100185C0 XOR EAX,EAX 015F:100185C2 AND ECX,03 015F:100185C5 REPZ MOVSB 015F:100185C7 MOV EDI,10092FA0 015F:100185CC OR ECX,-01 015F:100185CF REPNZ SCASB 015F:100185D1 NOT ECX 015F:100185D3 SUB EDI,ECX 015F:100185D5 MOV ESI,EDI 015F:100185D7 MOV EBX,ECX 015F:100185D9 MOV EDI,EDX 015F:100185DB OR ECX,-01 015F:100185DE REPNZ SCASB 015F:100185E0 MOV ECX,EBX 015F:100185E2 DEC EDI 015F:100185E3 SHR ECX,02 015F:100185E6 REPZ MOVSD 015F:100185E8 MOV ECX,EBX 015F:100185EA LEA EAX,[ESP+18] 015F:100185EE AND ECX,03 015F:100185F1 PUSH EAX 015F:100185F2 REPZ MOVSB 015F:100185F4 CALL 1005DCF1--- le 2ème test du CD 015F:100185F9 ADD ESP,08 015F:100185FC TEST EAX,EAX 015F:100185FE JNZ 10018626 015F:10018600 MOV ECX,[1024ED24] 015F:10018606 PUSH EAX 015F:10018607 PUSH 1009223C 015F:1001860C PUSH 10092F74 015F:10018611 PUSH ECX 015F:10018612 CALL [USER32!MessageBoxA] 015F:10018618 PUSH 00 015F:1001861A CALL 1005D8AB 015F:1001861F PUSH 00 015F:10018621 CALL 1005D8AB 015F:10018626 PUSH EAX 015F:10018627 CALL 1005DC29 015F:1001862C ADD ESP,04 015F:1001862F POP EDI 015F:10018630 POP ESI 015F:10018631 POP EBP 015F:10018632 POP EBX 015F:10018633 ADD ESP,00000084 015F:10018639 RET Bon, je sais , c'est assez long... Mais j'ai mis des commentaires aux endroits interressants .L'API GetdriveTypeA est appelée via le call EDI de l'addresse 1001845E . Normalement vous allez etre pris dans une boucle qui va durer assez longtemps . Alors soit vous la tracez pas-à-pas avec la touche F10, soit vous tapez BPX 1001854C et relancez avec F5 pour passer la boucle d'identification du CD . En 1001854C il y a un premier test de verif du CD . Si EAX=0 , le saut n'est poa effectué (en 10018553 JNZ 10018589 ) . Bon on va forcer le prog a sauter : on fout un jump en 10018553 : sous SI, E 10018553 et on met EB . Now le prog va sauter en 10018589 . On continue la trace avec F10, et on arrive en 100185F4 , CALL 1005DCF1 . C'est ce call qui retest le CD (c un peu + compliké que cela...) . Si vous exécutez ce call, voici à quoi vont etre egal les registres : EAX=00000000 EBX=00000009 ECX=FFFFFFFF EDX=00000001 ESI=10092FA9 EDI=00B8FCE5 EBP=BFF77C20 ESP=00B8FCC0 EIP=100185F9 o d I s z a p c CS=015F DS=0167 SS=0167 ES=0167 FS=3777 GS=0000 On remarke le EAX=0 et le ECX=FFFFFFFF . Bon, maintenant on refait la meme opération que pécédement mais AVEC LE CD dans le Lecteur . Et quand on execute le CALL 1005DCF1, voici à quoi sont egals les registres : EAX=101E0AA8 EBX=00000009 ECX=00000003 EDX=BFFC9490 ESI=10092FA9 EDI=00B8FCE8 EBP=BFF77C20 ESP=00B8FCC0 EIP=100185F9 o d I s z a p c Cette fois EAX=101E0AA8 et ECX=00000003 ...héhéh... Et bien on refait encore l'opération précédente, SANS LE CD, et après avoir executé le CALL 1005DCF1, on tape sous SI : R EAX 101e0aa8 (entrée) R ECX 3 (entrée) N'oubliez de mettre un jmp en 10018589 , sinon le premier test du CD ne passera poa :) Et on relance avec F5 . BinGo ! le jeu se lance sans demander le CD ;;;héhéh... Step : comment patcher ? Arf ! Facile de patcher le prog ! Après le Call 1005DCF1 on a : 015F:100185F9 ADD ESP,08 015F:100185FC TEST EAX,EAX 015F:100185FE JNZ 10018626 Il faut que le JNZ 10018626 soit executé et que EAX=101E0AA8 et ECX=00000003... Bah...Sous SI, quand on est à l'addresse 100185f9 on tape A . Now on est dans l'éditeur ASm de SI . On entre notre code : Mov eax,101e0aa8 mov ecx,3 jmp 10018626 Escape pour kitter l'editeur ASM . On note les octets qu'on a modifié : E 100185F9 pour les voir . On relance avec F5 pour voir si le code que l'on a implanté tourne . oui, ça work sans problème ... TaMaMBoLo/CC