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!!! |
|