Karpoff Spanish Tutor

Programa:

Talisman 1.7.0.4


 

PROTECCION: Trial de 30 días, con código de registro.
Descripcion: Escritorio Alternativo.
Dificultad: Newbie
DOWNLOAD: http://www.lighttek.com
Herramientas: Softice, Regmon, Api Spy 2.4, Editor Hexa.
CRACKER:

KuaTo_ThoR

  FECHA: 28/01/2001

 

 INTRODUCCION

Muy Buenas, nuevamente estoy aquí, esta vez la víctima, a penas opondrá resistencia. ;-)

Al menos podremos utilizar una herramienta poco usual, Api Spy, veremos que es muy útil para situarnos en el lugar adecuado.

El cálculo del código válido, es bastante vergonzoso, no se han roto la cabeza al programarlo.

 

 AL ATAKE


 

Preliminares. Obtener Información


Lo primero como siempre es saber de que va el tema. Ejecutamos el programa, y desaparece nuestro escritorio convencional win por otro más bonito, pero en inglés, mmm.... Seleccionamos la opción de ver la barra de herramientas normal, y junto al reloj, está el icono del programa, botón secundatio y pulsamos Quit. Nos aparece una ventana de registro, donde ya nos rellenan el nombre y el código con "User name" y "User Code", pulsamos Aceptar, y nos salta una ventana diciendo que el serial no es un entero válido, mmm..., error nº1. Cambiamos el código por cualquier número, metemos uno de unos 12 dígitos (todo unos p.ej.), y nos dice que 'invalid integer value', ponemos uno de once, 'invalid...', uno de diez, y nos dice que el código no es el correcto. Por tanto ya sabemos que el tamaño del código correcto no será mayor de diez.

Si no tenéis cargado Sice, ya podéis ir cargándolo...

BUSCANDO ALGO

Bien, nos situamos nuevamente en la ventana de registro (mejor acceder a ella por el menú 'Help'). Metemos un código menor de diez cifras, y antes de pulsar, vamos a Sice (F5). Ponemos los típicos breaks, bpx getwindowtexta, bpx getdlgitemtexta, bpx getdlgitemint, volvemos al programa damos a aceptar y nada de nada, no salta Sice. Por tanto, para no volvernos locos, usamos el comodín de Hmemcpy. Ponemos el breakpoint (bpx hmemcpy), nuevamente pulsamos Aceptar, y esta vez sí salta Sice. Pulsamos F12 hasta aparecer en el código de Talisman. Lo malo del hmemcpy, es que no aparecemos muy bien situados, así que trazamos con F10, pasando Ret tras Ret. Seguimos trazando mirando si esta nuestro código por algún sitio, hasta que llegamos aquí:

:00484B74 8975EC mov dword ptr [ebp-14], esi
:00484B77 DB45EC fild dword ptr [ebp-14]
:00484B7A E8FDDDF7FF call 0040297C
:00484B7F 69C009030000 imul eax, 00000309
<- Caliente, caliente.
:00484B85 8BF0 mov esi, eax
:00484B87 3B75FC cmp esi, dword ptr [ebp-04]
<- ¿Una comparación?
:00484B8A 0F84BF000000 je 00484C4F
<- ¿Un Salto lejos de aquí?
:00484B90 B201 mov dl, 01
:00484B92 A120614500 mov eax, dword ptr [00456120]
:00484B97 E88016FDFF call 0045621C
:00484B9C 8BF0 mov esi, eax
:00484B9E B101 mov cl, 01

Justo antes de este trozo de código hay un bucle, donde se calcula un número con el nombre. Después del Call que vemos en 00484B7A, hay una multiplicación, ...¡¡¡¡¡¡ Estamos en zona caliente !!!!!! Que curioso, después de hacer unos calculos hay una comparación, y dependiendo de el resultado de ésta, nos quedamos por aquí, o nos manda muy lejos, mmm... ¡¡¡¡ QUE DISIMULO !!!! Vamos a probar que pasa si invertmos el salto. Una vez sobre 00484B8A, metemos en Sice R FL Z, que cambia la flag cero, es decir, que 'invierte el salto'. Damos F5 y registrados. Pulsamos OK, y volvemos a ver si estamos registrados,... Sí, lo estamos. Reiniciamos el programa, volvemos a mirar, ... No, ya no lo estamos.

¿Qué quiere decir esto? simplemente, que vuelve a comprobar si el código es correcto. Sólo hay que localizar la rutina donde lo comprueba y se terminó.

EN BUSCA DE LA COMPROBACIÓN INICIAL

 

Para poder hacer la comprobación, necesita guardar la información de registro en algún sitio, usualmente en el registro de windows, otras en un archivo.

Bueno, para esto vamos a utilizar Regmon y Api Spy. Estas herramientas son básicas, así que las podréis encontrar en cualquier web de cracking.

Abrimos Regmon, y ponemos algo como esto:

Ahora iniciamos Talisman, vemos como el Regmon se va llenado de información. Vamos a la ventana de registro, y metemos los datos, nuevamente invertimos el salto en el Sice, y vemos que en el Regmon, han aparecido cosas nuevas, ya podemos pulsar el botón de la lupa para pararlo, y podemos ver cosas tan interesantes como que hay unas claves en el registro llamadas 'usercode' y 'username'.

Es la hora de utilizar Api Spy. No me voy a extender mucho en su modo de uso, porque es muy sencillo de utilizar. Lo que hace este programa es localizar las llamadas que realiza nuestro programa víctima a las distintas funciones que hay dentro de cada librería. En este caso lo que nos interesan son las llamadas al registro, es decir RegQueryValueExa, RegCreateKeyExa y compañía. Todas estas funciones estás el la librería ADVAPI32, por tanto pulsamos el botón Add y seleccionamos ADVAPI32.fnl. Podéis ver que no lee directamente del archivo dll, pero con el programa viene una utilidad que transforma las dll a fnl, que no viene al caso, pero puede resultar útil saberlo para otra ocasión. En resumen, el programa tiene que quedar tal que así:

Pulsamos Run y se ejecutará nuestro programa a la vez que aparece una nueva ventana de Api Spy, volvemos a cerrar el programa y Api Spy nos dice que ha terminado, pulsamos el botón 'Save LOG', y se creará en el direccorio de Talisman, un archivo .log que podemos abrir con el worpad, por ejemplo. Una vez aquí buscamos 'usercode' y nos aparece por primera vez aquí:

004566AA:RegQueryValueExA (HANDLE:C89BBAD0,LPSTR:004905A4:"path",LPDATA:00000000,LPDATA: 0075FB00,LPDATA: 00000000,LPDATA:0075FB1C)
004566AF:RegQueryValueExA = 2
004566AA:RegQueryValueExA(HANDLE:C89BBAD0,LPSTR:004905D8:"usercode",LPDATA:00000000,LPDATA:0075FB00,LPDATA :00000000,LPDATA:0075FB1C)
004566AF:RegQueryValueExA = 0
004569A0:RegQueryValueExA(HANDLE:C89BBAD0,LPSTR:004905D8:"
usercode",LPDATA:00000000,LPDATA:0075FAEC,LPDATA :0075FB04,LPDATA:0075FB00)
004569A5:RegQueryValueExA = 0
004566AA:RegQueryValueExA(HANDLE:C89BBAD0,LPSTR:004905EC:"username",LPDATA:00000000,LPDATA:0075FAE0,LPDATA :00000000,LPDATA:0075FAFC)

Lo que nos interesa es la dirección de memoria que nos da, que es: 004566AA. Pero podemos ver que justo encima aparece la misma dirección, pero para "path". Para saber cual es la nuestra, nos situamos al principio del documento, y esta vez buscamos la dirección, es decir, 004566AA. Podemos comprobar que es la cuarta llamada.

Después de este coñazo, vamos al Symbol Loader, cargamos Talisman, ponemos el bpx 4566aa y nos saltamos las tres primeras rupturas de Sice. Pasamos del Ret para ver de donde nos llamaron y vemos esto:

:00490239 E88A67FCFF call 004569C8
:0049023E 84C0 test al, al
:00490240 0F8484000000 je 004902CA
:00490246 BAD8054900 mov edx, 004905D8
:0049024B 8BC3 mov eax, ebx

Continuamos buscando algo interesante con F10, hasta que llegamos a esto otro:

:0049028A 89B594FEFFFF mov dword ptr [ebp+FFFFFE94], esi
:00490290 DB8594FEFFFF fild dword ptr [ebp+FFFFFE94]
:00490296 E8E126F7FF call 0040297C
-> Sacamos un número
:0049029B 69C009030000 imul eax, 00000309
-> Una multiplicación
:004902A1 8BF0 mov esi, eax
:004902A3 3B75FC cmp esi, dword ptr [ebp-04]
-> Una comparación
:004902A6 7514 jne 004902BC
-> Un salto
:004902A8 B8A82C4A00 mov eax, 004A2CA8

¿Qué es esto? ¡¡¡ es un calco de la comprobación anterior !!! Así que invertimos nuevamente el salto (004902A6), y registrados para siempre. Para hacerlo permanente, utilizamos el editor hexadecimal, sólo tenemos que encontrar el offset, ya sea con el kracPE, el FileinsPEctor o cualquier otro.

GENERADOR DE CLAVES

 

Finalmente he decidido hacer un Keygen, puesto que es muy fácil y llevará poco tiempo. Vamos a por él.

Cómo pudimos ver antes:

:00484B32 E8892DF8FF call 004078C0 <- Eax= código falso
:00484B37 8945EC mov dword ptr [ebp-14], eax
:00484B3A DB45EC fild dword ptr [ebp-14]
:00484B3D E83ADEF7FF call 0040297C
:00484B42 8945FC mov dword ptr [ebp-04], eax
:00484B45 8D55F8 lea edx, dword ptr [ebp-08]
:00484B48 8B83FC010000 mov eax, dword ptr [ebx+000001FC]
:00484B4E E8E1C8F9FF call 00421434
:00484B53 33F6 xor esi, esi
:00484B55 8B45F8 mov eax, dword ptr [ebp-08]
:00484B58 E8DFF0F7FF call 00403C3C
<- eax=longitud del nombre
:00484B5D 85C0 test eax, eax
:00484B5F 7E13 jle 00484B74
:00484B61 BA01000000 mov edx, 00000001
<- edx=1
:00484B66 8B4DF8 mov ecx, dword ptr [ebp-08]
<- Comienza el Bucle
:00484B69 0FB64C11FF movzx ecx, byte ptr [ecx+edx-01]
<- ecx= valor ASCII de la letra correspondiente a la posición edx de nuestro nombre en hexadecimal por supuesto
:00484B6E 03F1 add esi, ecx
<- esi= esi+ecx (la primera vuelta esi=0+ecx)
:00484B70 42 inc edx
<- edx=edx+1
:00484B71 48 dec eax
<- eax=eax-1
:00484B72 75F2 jne 00484B66
<- Volvemos al principio del bucle que calcula el "Número Mágico"(NM) a partir e nuestro nombre
:00484B74 8975EC mov dword ptr [ebp-14], esi
:00484B77 DB45EC fild dword ptr [ebp-14]
:00484B7A E8FDDDF7FF call 0040297C
<- eax=esi=NM
:00484B7F 69C009030000 imul eax, 00000309
<- eax=eax*309
:00484B85 8BF0 mov esi, eax
<- esi=eax= Código Correcto (en hexa).
:00484B87 3B75FC cmp esi, dword ptr [ebp-04]
<- Compara el código falso con el correcto.
:00484B8A 0F84BF000000 je 00484C4F

FIN. Así de fácil, suma los caracteres de nuestro nombre y los multiplica por 309h, es decr, por 777 decimal. Bonito número.

Un ejemplo: Nombre=Pedro;

NM= P+e+d+r+o = 50+65+64+72+6F (en hexa) = 1FA = 80+101+100+114+111 (en decimal) = 506

Código = 1FA*309 = 506*777 = 393162. Se acabó.

Este es el Keygen más sencillo que tendremos la oportunidad de hacer, jejeje.

En Pascal:

Program KeyTalisman;

uses crt;

var
nombre : string[30];
codigo:longint;


{Función de calculo del numero "magico" del nombre}

function magico(nomb: string):integer;
var
long,numagic:integer;
ecx:char;
ascii:byte;
begin
long:=length(nomb); {eax}
numagic:=0; {esi}
repeat
ecx:=nomb[long];
ascii:=ord(ecx);
long:=long-1;
numagic:=ascii+numagic;
until long=0;
magico:=numagic;
end;


begin {PP}
clrscr;
writeln;writeln;
textbackground(white);
textcolor(blue);
Write(' ':10,'Generador de claves para Talisman v1.7 por ');
textcolor(lightblue+blink);
writeln(' ':5, 'KuaTo_ThoR',' ':5);
textcolor(black);
textcolor(lightgray);
textbackground(black);
writeln;
Write('Tu nombre (max. 30 caracteres): ');
readln(nombre);
codigo:=magico(nombre);
codigo:=codigo*777;
writeln;writeln;
write('Tu PassWord es: ', codigo);
writeln;writeln;
writeln('Pulsa Enter para Salir');
readln;
end.{PP}

Y en C++: (este sin florituras ;)

#include <iostream.h>
#include <string.h>

void main()
{
char Nombre[32];
cout << "Tu Nombre: ";
cin.getline (Nombre, 32); //Leemos el nombre
int lon = strlen(Nombre); //Longitud del nombre

int suma = 0;
for (int i = 0; i <= lon; i++)
{
suma = suma + Nombre[i]; //Sumamos los caracteres del Nombre
}

unsigned long codigo = suma*777; // Calculamos el código

cout << "Tu codigo es: " << codigo << '\n' << '\n';
cout << "Pulsa Enter para Salir";
cin.get();
}

FINALIZANDO

 

Nos lo han puesto muy fácil, a pesar de que hace dos comprobaciones, son las dos exactamente iguales, podría haberlo disimulado un poco mejor creo yo.

Bueno esto ha sido todo por esta vez, espero no haberme equivocado mucho, si encontráis cualquier error, o tenéis alguna pregunta no dudéis en decírmelo. Espero que os haya resultado útil este tute. No olvidéis que nuestro objetivo sólo es aprender. Sin contar con la diversión que esto supone por supuesto ;-))

Un Gran Saludo para todos los miembros de [K-FoR], para los amigos de Tutoriales 2000. Y para el resto de vosotros, en especial para mi buen amigo B@nks.

Hasta la próxima... 

« »~~~=*=~~~« »

Mi correo: kuato_thor@hotmail.com

La página de [K-FoR]: http://pagina.de/kfor

« »~~~=*=~~~« »

" En un lugar de La Mancha, de cuyo nombre no quiero acordarme, no ha mucho tiempo que vivía un hidalgo caballero de los de lanza en astillero, adarga antigua, rocín flaco y galgo corredor. Una olla de algo más vaca que carnero, ... "

El Ingenioso Hidalgo Don Quijote de la Mancha

Miguel de Cervantes Saavedra

 

 

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