Instalamos el juego al completo. Ahora lo que tenemos es
que ver como reacciona el programa cuando los ejecutamos sin
el CD. Lo ejecutamos y llegamos al menú principal. Ummm! Esto
me huele mal. Bueno, seguramente nos lo pedirá al empezar una
partida. Le damos a New Game y efectivamente nos sale:
"Inserta el CD de Drakan."
Lo desemsamblamos con Wdasm32 8.9 y le damos al botón de
"String References". Pero nada, no encontramos nada
interesante.
Bueno no os asustéis. Atacaremos por otro lado.
Posiblemente utilizará la función usada por el 99% de los
juegos, GetDriveTypeA
Pues la buscamos en "Imported Functions". Bingo!!! Ahí la
tenemos. Hacemos doble click y aparecemos en:
* Reference To:
KERNEL32.GetDriveTypeA, Ord:0104h
:0040961A FF157C504700 Call dword
ptr [0047507C]
:00409620 83F805 cmp eax, 00000005
:00409623 0F8577010000 jne 004097A0
:00409629 8D54241C lea edx, dword
ptr [esp+1C]
:0040962D 8D442410 lea eax, dword
ptr [esp+10]
:00409631 52 push edx
:00409632 8D4C2410 lea ecx, dword
ptr [esp+10]
:00409636 50 push eax
:00409637 8D54241C lea edx, dword
ptr [esp+1C]
:0040963B 51 push ecx
:0040963C 8D442434 lea eax, dword
ptr [esp+34]
:00409640 52 push edx :00409641 50
push eax
* Reference To:
KERNEL32.GetDiskFreeSpaceA, Ord:0100h
:00409642 FF1578504700 Call dword
ptr [00475078]
:00409648 85C0 test eax, eax
:0040964A 0F8450010000 je 004097ª0
:00409650 837C241410 cmp dword ptr
[esp+14], 00000010
:00409655 0F8545010000 jne 004097A0
:0040965B 817C240C00080000 cmp
dword ptr [esp+0C], 00000800
:00409663 0F8537010000 jne 004097A0
:00409669 8B442410 mov eax, dword
ptr [esp+10]
:0040966D 85C0 test eax, eax
:0040966F 0F852B010000 jne
004097A0
..... (El esquema de protección sigue con funciones como
GetVolumeInformationA, entre otras, pero no es cuestión de
aburrir a la gente)
Bueno, sin fijarnos mucho en el código de arriba vemos un
salto que se repite hasta la saciedad: jne 004097A0. Me suena
a que en caso de error salta a esa dirección. Vamos a ver que
hay en 0040970:
:0040978F 5E pop esi
:00409790 5D pop ebp
* Possible Reference to String
Resource ID=00001: "MainWindow"
:00409791 B801000000 mov eax,
00000001 <= eax = 1
:00409796 5B pop ebx
:00409797 81C49C000000 add esp,
0000009C
:0040979D C20C00 ret
000C
* Referenced by a (U)nconditional
or (C)onditional Jump at Addresses:
:004097A0 5E pop esi
<=
Nos manda aquí
:004097A1 5D pop ebp
:004097A2 33C0 xor eax, eax
<= eax = 0
:004097A4 5B pop ebx
:004097A5 81C49C000000 add esp,
0000009C
:004097AB C20C00 ret
000C
Pero bueno, como uno no es todavía un experto en esto del
cracking, forzamos el salto. Sin complicarnos la vida nos
vamos a Hiew. Pulsamos F4 (Mode) y le damos a decode. F5 y
escribimos: .00409623. F3 para editar y le damos al tabulador
y cambiamos JNE por JMP. Ejecutamos el juego y nada, nos pide
el CD. Pero si nos fijamos un par de líneas más abajo en
004097A0, vemos un "xor eax, eax" que nos pone eax a 0. A ver,
vamos a buscar alguna instrucción que nos ponga EAX=1. Cuatro
líneas más arriba vemos:
:00409791 B801000000 mov eax, 00000001
Esta vez en 00409623 ponemos JMP 0040978F. Ejecutamos el
juego y para nuestro asombro el juego nos pide el CD. De nuevo
analizamos el código:
:004097AE 90 nop
:004097AF 90 nop
:004097B0 8B442404 mov eax, dword ptr [esp+04]
:004097B4 56 push esi
:004097B5 50 push eax
:004097B6 E8C5790500 call 00461180
:004097BB 8BF0 mov esi, eax
:004097BD 85F6 test esi, esi
:004097BF 7504 jne 004097C5
:004097C1 5E pop esi
:004097C2 C20400 ret 0004
:004097C5 57 push edi
:004097C6 56 push esi
:004097C7 E864770500 call 00460F30
:004097CC 56 push esi
:004097CD 8BF8 mov edi, eax
:004097CF E89C790500 call 00461170
:004097D4 8BC7 mov eax, edi
:004097D6 5F pop edi
:004097D7 5E pop esi
:004097D8 C20400 ret 0004
En "Call 00461180" entre otras cosas, diría que
comprueba las pistas de audio del CD. Y en 4097BF salta
si hay error. Sin persarlo demasiado NOPeamos el salto
en cuestión. Vamos a Hiew y en 4097BF cambiamos 7504 por
9090. Ejecutamos el juego y ENTRA!!!
| |