Sunteți pe pagina 1din 6

Programa a a Analizar: Power restrictor 0.1.5.

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:

Ponemos un bpx en ese jmp


Osea BPX 531E33 y le damos f5
Sice salta de nuevo ah.
Ah presionamos f8 y estamoes en el entrypoint,
Ok. Perfecto.. dumpeamos..
/dump imagebase size archivo
o sea /DUMP 400000 135000 C:\DUMP.EXE
listo con esto lo tenemos dumpeado en c con el nombre de dump.exe
ok. Salimos de sice.. cerramos el programa.
Si vemos el archivo dumpeado aun no corre por que ahora tenemos que reparar los tamaos de las secciones,
pues el ejecutable es mas grande y debemos adecuar el tamao a ese ejecutable. Esto lo hacemos con Peditor.
Abrimos el archivo con peditor.. nos vamos a secciones.. boton derecho del mouse sobre cada seccion le
damos dumpfixer.. y salimos de las secciones..
Luego ponemos el entry piont real..
Esto seria: el adrress que tiene el jmp menos la base
4B2518-400000=B2518
ponemos eso en el entry piont
y salvamos salimos de peditor
Listo archivo desempaketado..
Ahora vamos con la proteccion...

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

lea edx, dword ptr [ebp-5C]


mov eax, dword ptr [edi+00000300]
call 00444CD4 ---< aqu pone en ebp-5c el serial falso
mov edx, dword ptr [ebp-5C] aqu lo mueve a EDX
mov eax, dword ptr [ebp-18] aqu mueve a eax el serial correcto.
call 00404B48
je 0049BA34
lea edx, dword ptr [ebp-60]
mov eax, dword ptr [004B558C]
call 004069A4
mov eax, dword ptr [ebp-60]
call 0043E45C
jmp 0049BB10

* Referenced by a (U)nconditional or (C)onditional Jump at Address:


|:0049BA18(C)
|
:0049BA34 B201
mov dl, 01
:0049BA36 A1985D4600
mov eax, dword ptr [00465D98]
:0049BA3B E858A4FCFF
call 00465E98
:0049BA40 8BD8
mov ebx, eax
:0049BA42 BA02000080
mov edx, 80000002
:0049BA47 8BC3
mov eax, ebx
:0049BA49 E8EAA4FCFF
call 00465F38
:0049BA4E 33C9
xor ecx, ecx
vamos a analizar esas 3 lineas. Y les comento que quiero hacer..

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

mov edx, dword ptr [ebp-24]


mov eax, dword ptr [ebp-18]
call 00404B48

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

lea edx, dword ptr [ebp-60]


mov eax, dword ptr [004B558C]
call 004069A4
mov eax, dword ptr [ebp-60]
call 0043E45C

CODIGO MODIFICADO.
:0049BA1A 8D55A0
:0049BA1D A18C554B00
:0049BA22 E87DAFF6FF

lea edx, dword ptr [ebp-60]


mov eax, dword ptr [004B558C]
call 004069A4

: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

Despues del parche.

anotan ese numerito y lo meten de nuevo y

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

S-ar putea să vă placă și