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