Documente Academic
Documente Profesional
Documente Cultură
3
url: http://www.emesoft.se/files/powerrestrictor0153installer.zip
proteccion: upxkey code, nombre, serial.
Antes que nada tengo que decirles que hacia tiempo que no sacaba nada de tutes esto es por falta de
tiempo.
En algunas cosas no voy a ser muy especifico en el usio de herramientas.. ya uds. saben usarlas.
Upx lo podemos quitar con el mismo upx con la opcion d pero vamos a ensearles como quitarla a mano es
mas divertido.
Cargamos icedump (a mi me gusta mucho)
Lo primero vemos que esta empaketado con upx ( esto lo podemos ver con cualquier analizador de archivos,
fileinspector o pescan
Luego con Peditor abrimos el archivo y vemos el image base.. esta en 400000 y vemos el image size
Que esta en 135000 este dato es muy importante para dumpear.
Vamos a desempaketar upx a mano..
Sera una tarea facil
Primero ponemos el bpx getprocaddress
Le damos a ejecutar el programa.
Sice revienta
Le damos f12 y vemos si estamos dentro del codigo del empektado..
Si no estamos presionamos otra vez f5 sice revienta de neuvo y presionamos f12 otra vez.. caemos en el
programa que estamos revisando ... no?
Vovemos a presionar f5 y f12 tantas veces hasta que caemos dentro del programa que estamos chequeando en
este caso pr.exe
Ok.. ya estamos dentro del programa empaketado...
Veremos algo como esto:
Este programa tiene una proteccion que genera un instalation key unica para cada maquina y se basa en ella y
el nombre que le pongamos para generar la clave:
Ponemos cualquier cosa y antes de darle ok. Presionamos bpx hmemcpy los que no tienen windows 95/98 los
de windows 2000 pueden usar otro bpx ejemplo getwindowtexta
Ok. Traceamos un monton.. no les voy a espliacr como tracear. Verdad?.. pero bueno a mi llevo un rato tracear
asi que para facilitar el trabajo le digo que pongan el bpx y cuando entren al codigo pogan lo siguiente :
G 49BA08
Esto nos lleva hasta un call (jeje es la forma rapida.. el trabajo duro de traceo lo hice yo)
Aqu caemos en un call que si lo revisa Uds con f8 veran que lo que hace es meter en una parte de la memoria
el codigo que metimos, en estos casos debemops tener mucho cuidao cuando se trabaja con apuntadores de
memoria, pues el los usa en todas las rutinas..
Puesbien vamos a ver que hacia las rutinas y como hacemos este parche.
:0049B9FF 8D55A4
:0049BA02 8B8700030000
:0049BA08 E8C792FAFF
:0049BA0D 8B55A4
:0049BA10 8B45E8
:0049BA13 E83091F6FF
:0049BA18 741A
:0049BA1A 8D55A0
:0049BA1D A18C554B00
:0049BA22 E87DAFF6FF
:0049BA27 8B45A0
:0049BA2A E82D2AFAFF
:0049BA2F E9DC000000
ya sabemos que en
:0049BA10 8B45E8
mov eax, dword ptr [ebp-18] aqu mueve a eax el serial correcto.
Eax esta nuestro serial correcto verdad?.. pero que varia de acurdo a cada maquina.. asi que no podriamos
tener un serial unico..
Entonces vamos a tratar que nuestro codigo verdaero nos lo muestre el mismo programa.. osea combertirlo en
un keygen,.
Lo primero que hacemos es lo siguiente..
Si traceamos en estos calls vemos que eax se mueve mucho o sea no podemos conservar el valor en ese
registro asi que vamos a modificar un poco el programa. Ya tracee y vi que esi no se mueve en esos calls.. o
sea siempre retorna con el mismo valos.. vamos a agarrar ese registro.
:0049BA08 8B75E8
mov esi, dword ptr [ebp-18]
:0049BA0B 90
nop
:0049BA0C 90
nop
vieron lo que hice?
Sustitui el call por un mov a esi el serial verdadero... pero como el call tiene 8 bites y el mov 6 puse 2 nop
para que no diera error y no se alterara el archivo
:0049BA0D 8B55DC
:0049BA10 8B45E8
:0049BA13 E83091F6FF
ok. Pero que paso por que cambie tambien esa linea la 49BA0D.. se acuerdan lo que hacia el call... ponia
nuestro serial falso en edx para compararlo en el call que viene contra el que esta en eax..
pues bien lo que hice fue buscar en memoria en donde tenia mi serial falso y puse esa direccion ...
o sea sustitui
:0049BA0D 8B55A4
mov edx, dword ptr [ebp-5C]
por:
:0049BA0D 8B55DC
mov edx, dword ptr [ebp-24]
otra cosa uds. Diran por que no hacerlo dentro del call donde conmpara eax contra edx.. les dire que ese call
lo usa para validad muchas veces varias cosas del programa si modificamos adentro el programa revienta por
problemas de asignacion de memoria..
seguimos...
:0049BA13 E83091F6FF
call 00404B48 valida el serial bueno con el malo
:0049BA18 741A
je 0049BA34 si el serial es bueno salta a 49BA34
si es malo continua a la linea siguiente......
Codigo ORIGINAL.
:0049BA1A 8D55A0
:0049BA1D A18C554B00
:0049BA22 E87DAFF6FF
:0049BA27 8B45A0
:0049BA2A E82D2AFAFF
CODIGO MODIFICADO.
:0049BA1A 8D55A0
:0049BA1D A18C554B00
:0049BA22 E87DAFF6FF
:0049BA27 8BC6
bueno)
:0049BA29 90
:0049BA2A E82D2AFAFF
mov eax, esi aqu estamos mandando a eax lo que tiene esi (el serial
nop
call 0043E45C
ok. Si seguimos traceando vemos que cuando metemos un serial erroneo se va a un messagebox que trae los
parametros en eax.. osea en eax pone lo que va dentro del messagebox.. vamos a sustituir el mensaje por el
serial correcto... o sea lo que tenemos en esi.. se acuerdan que lo asignamos hae un momento.
Sutituimos en la linea 49ba27 el lea ese que esta ah por un mov a eax lo que tiene esi.. o sea nuestro serial
correcto...
La sentencia tiene 6 bytes y el mov 4 asi que tenemos que completar con ese nop.
Perfecto ya en eax en vez de estar el mensaje de error esta nuestro serial verdadero..
Si salvamos y ejectamos veremos algo asi..
Antes de parchar
jeje.. y listo..
Recordemos los tips..
Recuerden que cuando se trabajan con registros sobre todo cuando es ebp o esp hay que tener mucho cuidado
pues esos son punteros que usa para miles de operaciones.
Lo importante es tracear y ver bien que es loq ue hace cada instruccin.
.- Desemsamblen para que vean el codigo, revisen bien y chequeen lo que hice, dentro de las calls miren
como se mueven los registros.. asi le sacaran mas provecho a este tutorial que es un poco corto, pero que
espero les sirva de mucho.
Saludos a los de siempre..
Y mis nuevos amigos de ChickNcream... son greats
SiLvEr StOrM