Karpoff Spanish Tutor

Programa: Kyodai v 11.42x


 

PROTECCION: Empaquetado, Número de Serie
Descripcion: Entretenida colección de solitarios
Dificultad: Principiante
DOWNLOAD: http://kyodai.com (PcWorld Junio2000)
Herramientas: GetTyp , ProcDump , Wdasm 8.93 y Softice
CRACKER: KuaTo_ThoR   FECHA: 16/08/2000

 

 INTRODUCCION

Muy bien ya estamos aquí otra vez.

Como he puesto arriba se puede pillar en el cd de pcwolrd de junio de 2000, lo curioso es que al instalarlo aparecen dos versiones, la 10.21 (OpenGL) y la 11.42 (DirectX).

Sobre la versión 10.21 he visto un tutorial del gran Mr_WhiTe, que supongo podréis encontrar en su página personal, http://www.misterwhite.com/.

Bueno a lo que vamos, ejecutamos el programa (me referiré siempre al de DirectX), (recomiendo que pongáis el idioma en inglés, ya que las cadenas de texto en el programa estarán en inglés, aunque realmente da igual) todo muy bonito, hasta que nos salta el nag diciéndonos que nos registremos que él es casi pobre :-( , cómo si nosotros fuésemos ricos, no te jode.

 

 AL ATAKE


 Bueno, después de este acaloramiento, probamos a jugar a algún juego, si no habéis jugado antes a este juego (mi caso) antes de que os hayáis enterado como va, os aparecerá otro asqueroso nag pidiendo que nos registremos, ¡¡Así no hay quien juegue!!, así que nos disponemos a registrarnos, pero sin conectarnos a internet, jeje.

Vamos a la Ayuda, a Registro, y metemos lo que sea, por ejemplo: Nombre: Perico; Serial: eldelospalotes, y como era de esperar nos dice que no cuela, en concreto dice lo siguiente: "Sorry, wrong password. Please check out if you entered the user name and password exactly as I gave them to you." Como siempre nos quedamos con la frase, y supongo que todos sabemos donde vamos ahora.

Vamos a Wdasm, abrimos el archivo Kyodai.exe .... y se nos quedo colgado el Wdasm. ¿Qué pasa? Pues que nuestro programador pobre se ha gastado su dinero en un compresor ( un programa compresor , no un compresor de los de aire :-)). La pregunta es, ¿en cuál de ellos se ha gastado los cuartos?. Para responderla probamos con GetTyp, lo ejecutamos, vamos a 'open' y seleccionamos kyodai.exe, ahí está nuestra respuesta, ASPack 2000 .

Podríamos ir al ProcDump y probar a ver que pasa, pero he decidido desempaquetarlo a mano, que es más divertido, practicamos un poco y de paso vemos si esta versión es igual que las anteriores.

Desempaquetado Manual

NOTA: Voy a hacerlo de manera totalmente práctica, no voy a entrar en explicaciones de los encabezados PE porque por desgracia para mi no tengo mucha idea y no quiero volver loco a nadie, quien quiera verlo con un poco más de profundidad, le recomiendo la magnífica traducción de Frantic, del artículo de Volatility sobre desempaquetado del ASPack 1.083 y os animo a buscar otros textos relacionados con el tema en el site del magnífico n u M I T_o r.

A lo que vamos, lo primero que tenemos que hacer es entrar en el programa antes de que se desempaquete para localizar el punto donde termina dicho desempaquetado. Para ello vamos al Symbol Loader, seleccionamos nuevamente el archivo kyodai.exe, le damos al icono de las ruletitas y ... ¡¡no pasa nada!!, el programa está ahí, y no ha saltado Softice. Que no cunda el pánico, cerramos el kyodai, y abrimos ProcDump, vamos a PE-Editor, seleccionamos nuestro archivo, damos a OK y nos aparece:

Ahora pulsamos Sections y aparece lo siguiente:

Lo que nos interesa es la primera fila, CODE, podemos ver que en Characteristics pone C0000040, pues bien no nos interesa que ponga eso, pinchamos con en botón derecho sobre Code y en el menú seleccionamos Edit Section y cambiamos el C0000040 por E0000020. Con esto le estaremos diciendo al softice que esta zona contiene código ejecutable, y como podremos comprobar a continuación, el Symbol Loader saltará. Damos todo OK y continuamos.

Como he dicho vamos al Symbol Loader, y cargamos kyodai.exe, damos a las ruletas, y .... ¡¡salta Softice!!, ahora no nos queda más que buscar el final del código del empaquetador. Vamos pulsando F10, muy atentos a los saltos (jmp, jnz, jz...), cada vez que veamos un salto que vaya para atrás, le metemos un breakpoint a la instrucción siguiente (para evitar los bucles), por ejemplo:

Si tenemos: > 0068523F jmp 006851FC (salta para atrás)
	   > 00685244 xx xxxxx (siguiente instrucción)

En este caso al llegar a 0068523F nos pararíamos y meteríamos un breakpoint a 00685244, para meter el breakpoint yo he utilizado el comando 'g' del softice, luego meteríamos g 685244 daríamos a F5 y listo, apareceríamos en 685244.

Para abreviar os voy a decir donde he tenido que ponerlos: 0068528E, 006852AB, 006852EB, 006854C7, 006854DD. (Hacedlo vosotros mismos que no es muy largo)

Mucha atención una vez llegados a este último punto (6854DD), que ya casi se ha terminado. Un par de F10 más y nos encontramos en:

006854F3         61 POPAD
006854F4       7508 JNZ  006854FE    <---- Salta para abajo.
006854F6 B801000000 MOV  EAX, 0000001
006854fb     C20C00 RET  000C
006854FE 6848CA4C00 PUSH 004CCA48    <---- Apuntamos este valor.
00685503         C3 RET              <---- Salimos del compresor.

Una vez que llegamos a la altura del RET final anotamos lo siguiente en el softice:

a eip (pulsad enter)
jmp eip

y pulsad un par de veces Enter. Ahora F5 para salir del Softice.

¿No notáis algo raro?, ¿dónde está el programa? Lo que pasa es que con este ultimo comando que hemos metido, hemos creado un bucle infinito, de forma que el programa original (kyodai.exe) está desempaquetado en memoria.

Sólo nos queda recogerlo y ponerle un lacito, para ello vamos otra vez al ProcDump y en la tabla de tareas activas seleccionamos kyodai.exe, pulsamos con el botón derecho sobre ella, y seleccionamos en el menú Dump (Full), como en la imagen:

Le ponemos un nombre, por ejemplo kyodai_des y ya está. Podemos comprobar el tamaño del nuevo archivo y ver que es mucho mayor que el original.

Vamos a probar nuestro nuevo archivo, pulsamos un par de veces .... y nada. ¿Qué pasa? Espero que apuntaseis la dirección de antes (4CCA48) porque la necesitamos. Abrimos ProcDump, vamos a PE-Editor, seleccionamos el ejecutable que hemos creado antes (kyodai_des.exe) y apuntamos el valor que pone en Image Base (400000), restamos 4CCA48-400000 = CCA48. Donde pone Entry Point le metemos esa dirección (CCA48), salimos con OK, probamos el ejecutable y perfecto, ahora si que está.

Ha costado, pero ahora tendremos nuestra recompensa, jeje.

A por el registro:

Bueno después de descansar un poco, cambiar el CD e ir a por otra cervecita bien fresquita, vamos a por el código.

Abrimos nuestro archivo, kyoday_des.exe, con Wdasm, buscamos en String References la frase que anotamos al principio y aparecemos en:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004951BA(C)
|
:004951E0 8D4DF8 lea ecx, dword ptr [ebp-08]
:004951E3 A174F04C00 mov eax, dword ptr [004CF074]
:004951E8 8B00 mov eax, dword ptr [eax]
:004951EA 8B803C050000 mov eax, dword ptr [eax+0000053C]

* Possible StringData Ref from Code Obj ->"Sorry, wrong password. Please "
				->"check out if you entered the user "
				->"name and password exactly as I "
				->"gave them to you."
|
:004951F0 BA64524900 mov edx, 00495264

Buscamos un poco más arriba 004951BA y después de ver una bonita frase de exito dandonos las gracias llegamos a :

:004951AC A174F04C00 mov eax, dword ptr [004CF074]
:004951B1 8B00 mov eax, dword ptr [eax]
:004951B3 E8FCCF0000 call 004A21B4 <- call bastante sospechoso
:004951B8 84C0 test al, al
:004951BA 7424 je 004951E0

Nos ponemos sobre la llamada y pulsamos el icono Call, aparecemos obviamente en 4A21B4, seguimos mirando a ver que hay por ahí, hasta que llegamos a una curiosa lista de nombres, que deben ser "Los 28 Más Buscados" ;-) si por curiosidad miramos donde va uno de esos saltos después de un nombre, vemos aparecer la acojonante frase: "We erase your hard disk only for evaluation purposes...". Joder como se las toman algunos. A lo que iba, justo antes de llegar a la lista aparece:

:004A21EB E8D0C8FFFF call 0049EAC0
:004A21F0 8B45FC mov eax, dword ptr [ebp-04] <- Prepara eax
:004A21F3 8B96802B0500 mov edx, dword ptr [esi+00052B80] <- Prepara edx
:004A21F9 E8921CF6FF call 00403E90  <- Compara eax y edx
:004A21FE 0F85E8020000 jne 004A24EC  <-- Si hacemos el salto pasamos la lista
:004A2204 8B867C2B0500 mov eax, dword ptr [esi+00052B7C]
... Lista de los Más Buscados...

Bueno, como podemos ver, si hacemos ese salto, nos saltamos los nombres, y cualquiera se da cuenta de que los nombres se comparan cuando has metido el código correcto, si no para que los ibas a poner.

Sólo nos queda saber que hay en eax y en edx. Para ello ejecutamos el programa, intorducimos un nombre y un código y antes de dara Register, vamos a Softice y ponemos un breakpoint, por ejemplo bpx getwindowtexta, pulsamos F5, y damos a Register. Salta Softice, pulsamos F12 hasta llegar al código del programa; una vez allí, ponemos nuestro breakpoint, bpx 4A21F9 y pulsamos F5. Ahí están eax y edx, ponemos d edx y vemos nuestro código chungo, ponemos d eax, y aparece algo que mosquea pero que realmente es nuestro código correcto. No lo voy a poner, porque este no es nuestro objetivo, pero os voy a decir que el segundo caracter del código el la letra N, y el último una D.

Metemos el código obtenido, y ya está, nos da las gracias y podemos ver arriba "Registered to Perico".

Para volver a ser ciudadanos no registrados, sólo tenéis que volver a Register y meter un código que no sea el correcto, no olvidéis que nuestro objetivo sólo es aprender. Si el juego os gusta compradlo, que el tio se lo ha currao.

-------------------------

Bueno, esto ha sido todo por esta vez, si hay algo que no he dejado sufientemente claro, si me queréis contar cualquier cosa, lo que sea, ya sabéis: kuato_thor@hotmail.com

 

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