Karpoff Spanish Tutor 1999-2001

Programa: Sensible Soccer v1.1


 

PROTECCION: Burlar el ingreso del password.
Descripcion: Viejo juego de fútbol para DOS.
Dificultad: Novato, Facililla, Media, ETC.
DOWNLOAD: http://juegomania.metropoli2000.net/
Herramientas: Softice, W32dasm y Editor Hexadecimal.
CRACKER: Saccopharynx   FECHA: 02/10/2001

 

 INTRODUCCION

Hola a todos: Este es mi primer tutorial de cracking y estoy seguro que no el último. Es por eso que quiero agradecer a: Karpoff, por tanta dedicación a este sitio; Dek_Oin y Black Fenix, por sus excelentes tutoriales; Pr@FeSoR X, por el gran trabajo realizado con sus compilaciones, y también al resto de los crackers que aportan material al sitio. A ti, quién estás leyendo esto, como yo he leído por ahí, te digo: "escribe tutoriales para que el conocimiento no se pudra en tu cabeza". La información es PODER. De nosotros depende que todo esto sea posible. Basta de chachara y...

 

 AL ATAKE

INTRO

Bueno después de leer y practicar en base a varios tutoriales, decidí hacer algo por cuenta propia. Pero mi primer tutorial debería ser algo especial, por lo menos para mi, ya que no me conformaría con un simple cracking igual a cualquiera que haya leído, porqué sino demostraría que no he aprendido nada y que me estoy copiando. A la vez debería seleccionar una victima acorde a mi nivel, que por ahora esta lejos del de un experto. Entonces como dice arriba la víctma fue el Sensible Soccer v 1.1.

 

PRESENTANDO A LA VICTIMA

Es un viejo juego para DOS del año 1993. No es gran cosa pero le tengo un cariño especial. Por error una vez lo borré del disco rígido junto con el crack, y luego no lo conseguí por ningún lugar. Un día se me ocurrió buscarlo en internet y conseguí el juego en el sitio arriba mencionado. Pero había un problema, el juego lo conseguí, pero no los passwords para ingresar a él ni el crack. Entonces que mejor que crackearlo yo para ir tomando experiencia. En un principio parecía una víctima fácil, pero no fue así. Sigan leyendo y verán porqué.

 

MANOS A LA OBRA

Básicamente se me presentaron 2 problemas antes de poder crackearlo:

1) El empaquetado:

Abrí el soc.exe (ejecutable del juego) con el W32dasm, y como se trata de un juego de DOS, en lugar de las APIs de las DLLs, utiliza interrupciones. La interrupción típica para salir nuevamente al DOS es la 21, servicio 4c. Por lo tanto en el código debería econtrar las líneas:

         mov ah, 4c
       int 21

Pero no fue así. En ningún lugar del código existían estas líneas. Entonces ¿qué estaba pasando?. Ataqué por otro lado: Con el viejo y querido Norton Comander de DOS apreté F3 para ver si encontraba alguna pista en soc.exe. Y así fue. Cerca del encabezado de este ejecutable se puede leer pklite y pkware. Pkware es al empresa que desarrolló el famoso pkzip, pero hasta entonces desconocía que era el pklite.

Busqué en internet y descubrí que pklite es un compresor de EXEs que a diferencia del pkzip y del winzip comprime los ejecutables pero estos se pueden seguir ejecutando, reduciendo enórmemente su tamaño. Existen dos versiones de pklite, una para DOS y otra para Windows. Se pueden descargar de:

              www.pkware.com
o de
              ftp.pkware.com

Para este caso necesitamos la de DOS. Usamos el mismo pklite para descomprimir al archivo soc.exe y vemos que su tamaño se incrementó casi en un 300%. Ahora si, volvemos a abrir el soc.exe (ya descomprimido) con el W32dasm y buscamos donde se utiliza la interrupción 21, servicio 4c. Y siiiiiiiiii. Encontramos que se está usando en 3 lugares.

A esta altura se preguntarán porqué buscar por la interrupción 21, función 4c. Es simple: Cuando ingresamos mal el password 3 veces, salimos al DOS, entonces, mi intención es investigar el código cercano a estas líneas (las dos de arriba), en cada uno de los tres lugares en donde aparecen, para encontrar algún salto sospechoso y cambiarlo para evitar salir al DOS. Bueno, no pierdan tiempo los saltos sospechosos no están cerca de estas interrupciones. Debemos descubrir estos saltos de una forma más fácil. Luego veremos como. Programa desempacado, primer problema resuelto.

2) La memoria convencional:

La mejor forma de poder descubrir donde están los saltos que debemos parchear para burlar el ingreso del password es usando el SoftICE. Para eso debemos correr el Sensible Soccer desde Windows. El problema de este juego es que requiere mucha memoria convencional libre (aproximadamente 590 Kb.). Cuando abría una ventana de DOS desde Windows y ejecutaba mem /c/p no podía lograr tener más de 550 Kb. Tenía bien configurado el config.sys y el autoexec.bat, pero no podía saber que pasaba. De esta forma no podía debuggear el juego porque cuando ejecutaba soc.exe desde la ventana de DOS al no tener 590 Kb. de memoria, el juego volvía al DOS si poder ejecutarlo. Entonces mis alternativas eran las siguientes:

A) Bootear con un diskette de arranque y debuggear el juego con un debugger de DOS.

B) Intentar de alguna manera tener más de 590 Kb.

A) Los debuggers de DOS me parecieron todos muy malos comparados con el SoftICE. Con ninguno pude lograr debuggear el juego. Ni siquiera con el SoftICE de DOS versión 2.80, porque el patch para procesadores PENTIUM no me fucionó. Resignado tuve que optar por la opción B, si o si.

B) Investigué nuevamente que pasaba. Cuando ejecutaba mem /c/p noté que el himem.sys ocupaba en la memoria 46 preciosos Kbs., los cuales me venian bárbaros. Pero lo más sorprendete es que el tamaño del himem.sys es de 33 Kb. (en disco). Entoncés ¿Por qué ocupaca más en memoria? Busqué en internet hasta llegar a una página de Microsoft, en la cual me enteré que esto que me pasaba era un BUG de Windows 95 OSR2 (versión Spanish y otras más).

Según esta página de Microsoft la versión en inglés no presenta el problema. Afortunadamente había un patch para bajar. Lo bajé, lo corrí, reinicie, y logré tener por primera vez en la historia de mi computadora, 610 Kb. libres de memoria convencional DESDE DE WINDOWS. Este patch actualiza el IO.SYS (para poder acceder a memoria alta en MS-DOS). Con este patch instalado el himem.sys solo ocupa 1 Kb. en memoria. Si alguién tiene problemas de memoria aquí les dejo mi autoexec.bat, config.sys y el link de donde bajar el patch para solucionar el problema del himem.sys.

Mi Autoexec.bat:

path=c:\borlandc\bin;c:\nc;c:\nu;c:\windows\command;c:\tc\bin;
mode con codepage prepare=((850) C:\WINDOWS\COMMAND\ega.cpi)
mode con codepage select=850
PROMPT $p$g
@echo off 
C:\WINDOWS\COMMAND\CHOICE CARGO EL SOFT-ICE /t:n,5
if errorlevel 2 goto SEGUIR
e:\SOFTICE\WINICE.EXE
:SEGUIR

Mi Config.sys:

device=c:\windows\himem.sys
devicehigh=c:\windows\emm386.exe noems I=e000-efff
dos=high,umb
devicehigh=c:\windows\command\drvspace.sys /move
devicehigh=C:\WINDOWS\COMMAND\display.sys con=(ega,,1)
Country=054,850,C:\WINDOWS\COMMAND\country.sys
Link del patch:

http://support.microsoft.com/support/kb/articles/q170/4/56.asp
(De aquí deberán bajar el archivo Iosysspa.exe si tienen la
versión en español de Windows 95).

Algunas versiones de Windows 98 presentan el mismo problema. Antes de instalar el patch asegurarase de que el himem.sys ocupa más de 1 Kb. en memoria. Problema resuelto.

Ahora por fin al cracking. Cómo dije antes, tenemos que averiguar donde están los saltos que debemos parchear para burlar el ingreso del password. Bien:

1) Abrimos una ventana de DOS y vamos al directorio donde instalamos el juego, y lo ejecutamos tipeando soc.exe seguido de enter.

2) Cuando llegamos a la pantalla de ingreso del password, tipeamos cualquier password y antes de dar enter presionamos CTRL+D para ir al SoftICE. Aparecemos cerca de las direcciones de memoria:

3ff1:0401     ec               IN AL, DX
3ff1:0402     2408             AND AL,08
3ff1:0404     74fb             JZ 0401
.
.
.
3ff1:0457     C706255F000A     MOV WORD PTR [5F25], 0A00 (*)

Quiero aclarar que estas direcciones no se corresponden directamente con las de W32Dasm. No son las mismas. No se porqué. Si alguien lo sabe por favor dígamelo. Por lo tanto para localizarlas en W32Dasm, y poder estudiar el código, busqué la cadena: MOV WORD PTR [5F25], 0A00

La cuarta aparición de esta cadena es la misma de la dirección 3ff1:0457. Como se observa, las direcciones de memoria no se ven iguales en SoftICE y W32Dasm:

SoftICE: 3ff1:0457
W32Dasm: 0004.6127

Ya localizamos el código en el W32Dasm. Ahora vamos a analizarlo. También podemos analizarlo en Softice, pero nos conviene en W32Dasm para obtener los OFFSETS donde aplicaremos los parches de forma más rápida. Un poco más abajo podemos ver el siguiente código:

En la línea 0004.616B hay una comparación contra el caracter D en hexa. D en hexa es 13, y el 13 en ascii es el ENTER. Esto quiere decir que cuando damos enter en la pantalla del password se produce un salto a la dirección 61AE:

0004.6170    743c      je 61AE

Vamos hasta esta dirección y vemos:

en la línea 0004.61BD hay un OR. Este OR compara que nuestro password no sea solo un enter (o sea tenga al menos 1 caracter o el largo sea mayor a cero). Si es solo un ENTER no comprueba si el password es válido o no, y asume que no lo es produciendo u salto a 0004.5DAE (nos hace ingresar el password otra vez). Pero si ingresamos algo vemos que continua en 0004.61C4:

Entre la líneas 0004.61D4 y 0004.61E0 se compara nuestro password con el correcto. Si lo ingresamos mal saltamos al mismo lugar que si hubiésemos dado solo ENTER (jmp 5DAE) . Pero si el password es el correcto vemos que salta a: 0004.61E6. Entonces debemos invertir este último salto. ¿Cómo? Es fácil.

Primero debemos ubicar el OFFSET donde se produce el salto dentro del archivo. Para esto hacemos doble click sobre la línea 0004.61E1. Veremos abajo de todo, en el W32Dasm, que este offset es:

000361E1h

Una vez que tenemos el offset debemos abrir soc.exe con un editor hexadecimal e ir a este offset. Yo use el HexWorkShop, pero cuando fui hasta el offset indicado (Edit->goto), descubrí que el código no era el mismo. No se porqué los offsets no se corresponden de W32Dasm a HexWorkShop con este juego. Por lo tanto no recomiendo buscar por offset para crackear este juego. La mejor alternativa es buscar por código. El código es la segunda columna en el W32Dasm (la que está despues de las direcciones de memoria). Osea si queremos invertir el salto de la posición de memoria 0004.61E1 busquemos en el editor hexadecimal la cadena:

7403E9C8FBC706 (Edit->Find->Hexa)

Ahora si, lo único que nos falta es cambiar el 74 al principio de esta cadena por un EB, para saltar siempre hacia adelante a la dirección :0004.61E6. Podemos cambiar 74 (je->salta si es igual) por 75 (jne->salta si no es igual) pero si algún día ingresamos el password correcto por casualidad, lo tomará como inválido. Pero al cambiar por EB (jmp->salto incondicional) siempre entrará. Luego de hacer estos cambios los guradamos y listo.

Y para pulirlo más podemos modificar el salto para cuando le damos solamente enter sin ingresar el password. Aquí el cambio es un poco más complicado. El salto que hay que cambiar es el de la posición:

0004.61BF 7503 jne 61C4

Pero no solo debemos cambiar 75 por EB. También 03 por 25. ¿Por qué? Porque 03 es la cantidad de bytes que el salto va hacer. Si solo salta 3 bytes hacia delante caeremos justo en la rutina que compara los passwords, pero si damos solo un enter no habrá cedena para comparar contra el password y saben que sucede: Se cuelga el Windows y hay que reiniciar el equipo, porque esta rutina asume que la longitud de nuestro password es de al menos 1 caracter. Al poner 25 saltamos 37 bytes hacia delante (37 decimal = 25 en hexa), y caemos justo en el mismo lugar que en el salto anterior (después de la comparación de los passwords). En el editor hexa este salto esta una línea más arriba que el anterior. Igualmente si no se dan cuenta pueden hacer la búsqueda de código como hicimos en el salto anterior.

Para calcular que el desplazamiento es de 25 hacia delante debemos tener en cuenta que queremos saltar

desde: 0004.61BF 
hasta: 0004.61E6

Entonces tomamos una calculadora, la ponemos en modo hexadecimal y hacemos:

61E6 - (61BF + 02) = 25

El 02 es el tamaño que ocupa la instrucción de la dirección 0004.61BF, pero como la cantidad de bytes a saltar se comienza a contar a partir de la próxima instrucción, y no desde la que hace el salto, debemos incrementar 61BF en 02 para que cuente a partir de 61C1, ya que la instrucción que comienza en 0004.61BF ocupa 02 bytes.

Guardar los cambios, comprimir el soc.exe para que ocupe menos espacio con el comando pklite soc.exe, y si quieren, se pueden generar un crack con algún patcher. Ahora si, dando solo enter, o ingresando cualquier cosa ya podemos jugar al SS v1.1.

Bueno aquí se termina el tutorial. Reconozco que se hizo un poco extenso, pero valió la pena, ya que en un mismo tutorial no solo aprendimos un poco de parchear saltos, sino también de archivos empaquetados y a solucionar un gran bug que presenta el sistema operativo de Billy. Tres al precio de uno.

Ahora si, un saludo grande a Karpoff, Dek_Oin, Black Fenix y Pr@FeSoR X, que son unas bestias del cracking y a todos los que aportan conocimientos a esta página. Todos para uno y uno para todos. Hasta la próxima.

Saccopharynx.
saccopharynx@yahoo.com

 

Karpoff Spanish Tutor: Pagina dedicada a la divulgacion de informacion en Castellano, sobre Ingenieria Inversa y Programacion. Email "Colabora con tus Proyectos"
www.000webhost.com