How to remove the CD protection in Balls Of Steel
XVI Comment cracker Balls Of Steel (1.0 et 1.1)
Etape 1 : lancez BOS.EXE
Etape 2 : vous remarquez que vous êtes obligé d'y jouer avec le CD . Notez le message d'erreur
Etape 3 : lancez Norton Commander et copiezBOS.EXE en BOS.ESS pour le backup et en 1.EXE pour W32Dasm
Etape 4 : lancez W32Dasm et désassemblez 1.EXE
Etape 5 : une fois désassemblez , recherchez dans DATA STRING REFERENCE , la chaîne "CD required".Cliquez 2 fois dessus et vous atterrirait au milieu de la vérif du CD .
* Referenced by a CALL at Address:
|:0043738F <-- La vérif du CD est appelé depuis cette adresse
|:00437124 55 push ebp
:00437125 8BEC mov ebp, esp
:00437127 81C4A8FEFFFF add esp, FFFFFEA8
:0043712D 53 push ebx
:0043712E 56 push esi
:0043712F 57 push edi
:00437130 33C0 xor eax, eax
:00437132 8985A8FEFFFF mov dword ptr [ebp+FFFFFEA8], eax
:00437138 8945FC mov dword ptr [ebp-04], eax
:0043713B 8945F8 mov dword ptr [ebp-08], eax
:0043713E 33C0 xor eax, eax
:00437140 55 push ebp
:00437141 684F724300 push 0043724F
:00437146 64FF30 push dword ptr fs:[eax]
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004370DF(C)
|:00437149 648920 mov dword ptr fs:[eax], esp
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00437219(C)
|:0043714C BB01000000 mov ebx, 00000001 <-- initialise le nombre d'essai
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004371FA(C)
:00437151 8D85A8FEFFFF lea eax, dword ptr [ebp+FFFFFEA8]
:00437157 8D5341 lea edx, dword ptr [ebx+41]
:0043715A 4A dec edx
:0043715B E80CC3FCFF call 0040346C
:00437160 8B95A8FEFFFF mov edx, dword ptr [ebp+FFFFFEA8]
:00437166 8D45FC lea eax, dword ptr [ebp-04]
:00437169 B968724300 mov ecx, 00437268
:0043716E E8A9C3FCFF call 0040351C
:00437173 8B45FC mov eax, dword ptr [ebp-04]
:00437176 E819C5FCFF call 00403694
:0043717B 50 push eax
* Reference To: kernel32.GetDriveTypeA, Ord:0000h <-- chaîne cherchée "GetDriveType"
:0043717C E867D8FCFF Call 004049E8
:00437181 83F805 cmp eax, 00000005 <-- 05 est un lecteur CD
:00437184 7570 jne 004371F6 <-- "pas de lecteur CD"
:00437186 8D45F8 lea eax, dword ptr [ebp-08]
* Possible StringData Ref from Code Obj ->"BOS.IDF" <-- fichier recherché par le CD
:00437189 B974724300 mov ecx, 00437274
:0043718E 8B55FC mov edx, dword ptr [ebp-04]
:00437191 E886C3FCFF call 0040351C
:00437196 8B45F8 mov eax, dword ptr [ebp-08]
:00437199 E846EBFCFF call 00405CE4
:0043719E 84C0 test al, al
:004371A0 7454 je 004371F6
:004371A2 8B55F8 mov edx, dword ptr [ebp-08]
:004371A5 8D85ACFEFFFF lea eax, dword ptr [ebp+FFFFFEAC]
:004371AB E8C5CEFCFF call 00404075
:004371B0 C6053790430000 mov byte ptr [00439037], 00
:004371B7 BA01000000 mov edx, 00000001
:004371BC 8D85ACFEFFFF lea eax, dword ptr [ebp+FFFFFEAC]
:004371C2 E835D2FCFF call 004043FC
:004371C7 E810B5FCFF call 004026DC
:004371CC 8D85ACFEFFFF lea eax, dword ptr [ebp+FFFFFEAC]
:004371D2 E87DCFFCFF call 00404154 <-- taille du fichier
:004371D7 E800B5FCFF call 004026DC
:004371DC 8BF0 mov esi, eax
:004371DE 8D85ACFEFFFF lea eax, dword ptr [ebp+FFFFFEAC]
:004371E4 E82FCFFCFF call 00404118
:004371E9 E8EEB4FCFF call 004026DC
:004371EE 81FE0400D717 cmp esi, 17D70004
:004371F4 7433 je 00437229
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00437184(C), :004371A0(C)
|:004371F6 43 inc ebx <-- augmente le nombre d'essai de lecture
:004371F7 83FB1B cmp ebx, 0000001B <-- 27 essais de lecture
:004371FA 0F8551FFFFFF jne 00437151 <-- reviens en arrière et essaye encore
:00437200 6A31 push 00000031
* Possible StringData Ref from Code Obj ->"CD required" <-- la chaîne qui nous intéresse
:00437202 B97C724300 mov ecx, 0043727C
* Possible StringData Ref from Code Obj ->"Please insert the Balls of Steel " <-- Une autre
->"CD and click OK to continue." <-- vérif du CD
:00437207 BA88724300 mov edx, 00437288
:0043720C A124964300 mov eax, dword ptr [00439624]
:00437211 E8AAC7FEFF call 004239C0
:00437216 83F802 cmp eax, 00000002 <-- Vous appuyez sur Cancel
:00437219 0F852DFFFFFF jne 0043714C <-- qui envoie l'initialisation des essais
:0043721F A124964300 mov eax, dword ptr [00439624]
:00437224 E803C7FEFF call 0042392C
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004371F4(C)
|
:00437229 33C0 xor eax, eax
:0043722B 5A pop edx
:0043722C 59 pop ecx
:0043722D 59 pop ecx
:0043722E 648910 mov dword ptr fs:[eax], edx
* Possible StringData Ref from Code Obj ->"_^["
:00437231 6856724300 push 00437256
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00437254(U)
|
:00437236 8D85A8FEFFFF lea eax, dword ptr [ebp+FFFFFEA8]
:0043723C E81BC1FCFF call 0040335C
:00437241 8D45F8 lea eax, dword ptr [ebp-08]
:00437244 BA02000000 mov edx, 00000002
:00437249 E82EC1FCFF call 0040337C
:0043724E C3 ret <-- retourne finalement au caller
Il contient sa propre vérif du CD bien qu'il ne retourne aucune valeur spéciale dans eax ou qui stocke une valeur pour passer ou sortir quelque part dans le mémoire . Ca nous laisse seulement le moyen de faire sauter cette vérif depuis la routine qui l'appel . Repartons en arrière à l'adresse 43738F et nous voyons que la routine de la vérif du CD est appelée :
:0043737A 8B06 mov eax, dword ptr [esi]
:0043737C 80B8BC01000000 cmp byte ptr [eax+000001BC], 00
:00437383 74EE je 00437373
:00437385 E802FCFFFF call 00436F8C
:0043738A E88DFCFFFF call 0043701C
:0043738F E890FDFFFF call 00437124 <-- un seul appel à la vérif du CD
:00437394 E88BFBFFFF call 00436F24
:00437399 B9F0B84300 mov ecx, 0043B8F0
:0043739E BAA8E44200 mov edx, 0042E4A8
:004373A3 8B03 mov eax, dword ptr [ebx]
:004373A5 E882C4FEFF call 0042382C
Il faut donc simplement , shootez l'appel en43738F avec 5 NOP's et vous aurez une version crackée du flipper . La version 1.0 est celle que j'ai utilisé pour faire ce tutorial . La version 1.1 est crackable exactement pareille . Avant upgrader votre version de BALLS OF STEEL , soyez sûre de n'avoir fait aucun changements dans BOS.EXE car l'installeur vérifie sur vous avez une version modifiée du jeu . vous devrais peut-être désinstaller puis réinstaller le jeu pour que l'upgrade marche .
Attention , j'ai trouvé deux fois les chaînes qui suivent . Il faut en modifier qu'une des deux et la bonne sinon le jeu plantera.
Version 1.0 :
- 1°) éditez BOS.EXE à l'offset 223,119
- 2°) cherchez
E8 90 FD FF FF
et modifiez le en90 90 90 90 90
Version 1.1
- 1°) éditez BOS.EXE à l'offset 232,917
- 2°) cherchez
E8 CA FD FF FF
et modifiez le en90 90 90 90 90