|
|
 |
ESTUDIO COLECTIVO DE DESPROTECCIONES
Última Actualizacion:
25/10/2001
|
 |
|
Título |
Ingenieria Inversa Utilizando la función HMEMCPY |
Tipo de Tutorial |
[X]Original, []Adaptación, []Aplicación, []Traducción |
Cracker |
Mr.WhiTe |
Grupo |
Whiskey Kon Tekila |
Fecha |
15 de Mayo de 1999 |
1- ¿Que es HMEMCPY?
|
HMEMCPY es una API de Windows, que utiliza la memoria RAM para leer, manipular,
comparar y almacenar cadenas (texto que introducimos cuando un programa nos pide
el numero de serie por ejemplo). La funcion recoge la informacion que le proporcionamos y la
carga en memoria. Despues manipula esas cadenas, las mueve y las compara (por ejemplo compara
tu numero de serie con el correcto), y despues decide si la cadena es o no la correcta.
La funcion HMEMCPY devuelve esta informacion al programa en cuestion, y si has puesto el
serial correcto te lo aceptara o de lo contrario te mostrara una bonita ventana de error.
|
2- ¿Para que nos sirve a los Crackers HMEMCPY?
|
HMEMCPY se puede utilizar para "cazar" numeros de serie validos en programas shareware.
Utilizando un debugger (depurador) como el SoftIce, podemos poner un breakpoint en HMEMCPY
para que el programa se pare y nos avise cuando llama a la funcion. Muchos programas shareware utilizan HMEMCPY para comparar numeros de serie, sobre
todo cuando han sido escritos en Delphi o en Visual Basic.
|
3- ¿Como preparar el SoftIce para pararnos en HMEMCPY?
|
Cargamos nuestra "victima" y vamos a la ventana de registro, donde normalmente
se nos pedira un nombre y un numero de serie. Suele haber un boton que se debe pulsar
para validar los datos una vez introducidos. Pues bien, si existe el boton procedemos
de la siguiente forma:
Rellenamos los datos, nombre y serial cualquiera. Vamos al SoftIce y ponemos un
breakpoint en HMEMCPY, para lo cual escribimos " BPX HMEMCPY ". Lo que estamos haciendo
es indicarle al SoftIce que se pare y nos avise cuando nuestra "victima" llame a HMEMCPY.
Una vez puesto el breakpoint, pulsamos Ctrl+d para volver al programa.
Pulsamos el boton de registro y volveremos al SoftIce. Bien, ahora si suponemos que
los datos que nos pedian solo eran dos, el nombre y el numero de serie..... necesitamos
pulsar una vez Ctrl+D (o F11, es lo mismo) puesto que si no lo hacemos estaremos
siguiendole la pista al nombre y no es lo que nos interesa. :o)
Si no existe el boton de registro:
Ponemos el BPX antes de introducir el ULTIMO caracter de nuestro serial falso.
Ahora si que estamos en el camino correcto (bueno, casi). Si te fijas, en el SoftIce
veras una linea encima de la ventana de comandos que pone el nombre del programa en el
que estas. En nuestro caso lo usual sera que veas algo como: "USER(0A)" o "(USER(01)"
pues esta parte no nos interesa para nada, tenemos que llegar al codigo de nuestra "victima".
Para lo cual pulsamos F12 unas cuantas veces hasta que veamos el nombre de nuestro programa
en cuestion, lo cual nos indicara que estamos dentro. Si por ejemplo el programa se llama
"victima" veremos algo como "VICTIMA!CODE".
|
4- ¿Que podemos buscar?
|
Una vez que estamos dentro del codigo de nuestra "victima", tenemos que buscar una
comparacion (CMP, TEST) y/o un salto condicional (JE, JNE, JZ, JNZ...etc). Si encuentras
una comparacion y despues un salto, lo mas probable es que sea una zona muy muy interesante.
Un ejemplo:
CALL xxxxxxxx
MOV EAX,[EBP-14] ;EAX contiene el serial que introducimos
MOV EDX,[00463A56] ;EDX contiene el serial CORRECTO
CALL xxxxxxxx ;Llamada a una rutina para compararlos
JNZ 0047FCA4 ;Si es correcto salta a REGISTRADO (si no es cero)
MOV EAX,00466F34 ;Si es cero no estamos registrados
CALL xxxxxxxxx
JMP 0047FCCC
MOV EAX,004738D4
MOV EDX,00466F7C
CALL xxxxxxxx
Esta rutina es bastante tipica, aunque obviamente hay muchas variantes. :o)
Para "cazar" nuestro serial en este ejemplo, necesitamos situarnos sobre la linea
"MOV EDX,[00463A56]" , ahora vamos a ver que diablos contiene el registro EDX
para lo cual escribimos en el SoftIce "D EDX". NUESTRO SERIAL CORRECTO !!!
Otra rutina bastante comun seria algo similar a esto:
PUSH EAX
CALL xxxxxxxx ;Llamada a una funcion que calcula nuestro serial Correcto
ADD ESP,04 ;y lo almacena en memoria
TEST EAX,EAX ;Compara nuestro serial con el Correcto
JNZ 00440994 ;Si no es cero salta a REGISTRADO
PUSH 0047B52B ;Nuestro serial Correcto
PUSH 64
PUSH EBX
CALL xxxxxxxx
Los registros y las posiciones de memoria que tu te vas a encontrar seran
diferentes , pero la rutina sera bastante parecida. Para ver nuestro numero de serie
valido nos situamos en la linea del PUSH 0047B52B y escribimos en el SoftIce "d 0047B52B"
Para terminar nada mejor que practicar con la obra maestra de algun programador
desinformado. (Se nota que pocos programadores leen nuestros tutoriales jejeje, en fin, peor para
ellos, el que no aprende es porque no quiere).
Como obtener un Serial Valido para Talisman v1.1
*±±========-*-*-*-* P E R S O N A L G R E E T Z *-*-*-*-========±±*
Dasavant, Niabi, r00ster, ZEncrakz, Azrael, Klimpong, Zor
Conde-Vampiro, Mac-Crack, Killer_P, ASTAGA, Harvestr, Iczelion
JosephCo, Carpathia, Taylor, Tapu, Ivanopulo, EgoistE, Torn@do,
JUANDA, Leoworld, ReKiem, Neural_N, Netking, Russ97,
Mr.Pink and of course all WKT Members ;o)
|
[ Entrada | Documentos Genéricos | WkT! Web Site ]
|
[ Todo el ECD | x Tipo de Protección | x Fecha de Publicación | x Orden Alfabético ]
|
|
(c)
Whiskey Kon Tekila [WkT!] - The Original Spanish Reversers.
Si necesitas contactar con
nosotros
, lee
esto
antes e infórmate de cómo puedes
ayudarnos |
|
|
|
|
|