You are on page 1of 20

Trabajando con CRYPKEY

A decir verdad esta proteccin pinta para buena y dificil, no se que version
ser de crypkey la del programa del CD que tengo yo, porque el PEID no
detecta nada, lo mismo que el RDG, ya que el ejecutable no esta comprimido
pero la forma de trabajar de la proteccin complica las cosas
El programa al instalarse, paradjicamente nos instala un servicio el cual
podemos ver en la lista de SERVICIOS yendo a PANEL DE CONTROLHERRAMIENTAS ADMINISTRATIVAS-SERVICIOS.

Vamos a ver si es tan intil como el servicio de SECUROM o es necesario lo


cual implicara tener que usar otro debugger, ya que OLLYDBG no trabaja en
RING0, lo cual es imprescindible para debuggear estos servicios, tendramos
que echar mano al softice, syser o windbg, pero por ahora vamos a probar de
que la va el servicio, corramos el programa con el servicio activado.

Lo cambio a AUTOMATICO o MANUAL ambas opciones sirven aunque


automtico debera reiniciar la maquina para que arranque solo, as que de
cualquier forma lo tengo que iniciar manualmente.

Hago clic en iniciar el servicio y ya esta corriendo el mismo.


Arranco el programa a ver que pasa.

Y si, no lo compramos aun y nos sale el cartelito fatdico jeje, luego de


aceptarlo arranca el programa en modo DEMO.

Vemos que el programa tiene una opcin en FILES-CURRENT LICENSE para


ver la licencia actual, as que miremos a ver que dice.

Pues que no estamos autorizados si continuamos el programa vemos que esta


absolutamente limitado por ejemplo.

Voy a NEW a crear un nuevo proyecto

Ya me dice ah el cartel que no me va a dejar hacer casi nada (eso es el LEVEL


0) te deja hacer cero cosas jaja.

Y si no se puede GUARDAR

Por all aparece esto

Y los menues estn todos deshabilitados o sea no sirve para nada el pobre
jeje.
Volvamos a arrancarlo a ver si tiene para poder insertar algn numero para
registrar o algo asi.

Vemos en el men la opcin de autorizar el SOFT entremos all

Bueno tenemos para ingresar un numero de serie, veamos pongamos uno falso

Ahora veamos que dice

Bueno creo que todos nos salimos de la vaina para usar el OLLYDBG aqu y
ver si se puede ver algo tratemos de atachear el OLLY a ver que pasa.

Bueno no nos deja atachear, porque ser esto, tendr el servicio algo que ver
apagumoslo a ver que pasa.

Listo ya lo detuve y no aparece corriendo en la lista de procesos ahora


volvemos a intentar atachearlo

Bueno no es cosa del servicio miremos la lista de procesos a ver que vemos

Vemos un proceso que fue creado en forma temporal y que casualmente


empieza con CK (cripkey) veamos que pasa si atacheamos a ese.
Bueno ese si se dejo atachear, ser que esta debuggeando al programa
principal?

Vemos que cuando queremos usar el OLLY en ese proceso se queda como
colgado

El relojito de arena ah esperando, activemos el servicio de nuevo a ver que


pasa
No, no pasa nada el OLLY no funciona all, queda absolutamente colgado, lo
mismo si intentas destachear este proceso padre con el Process Memory
Menipulator 1.0.zip se cierran ambos.
Si corremos el programa sin el servicio corriendo se queda esperando y no
corre.
Bueno se pone difcil la cosa, cada vez mas nos llama esto a tratar con un
debugger para RING0, pero habr alguna estupidez de los programadores que
nos permite usar OLLY tranquilamente?
Jeje, por suerte si, los programadores crearon una pared terrible de temporales
que se debuggean unos a otros y van arrancando haciendo casi imposible
debuggearlo con OLLYDBG a no ser que su castillo se caiga pero como? Jeje
Y si haremos un intento de otra cosa, veamos que pasa si copiamos el
ejecutable al escritorio y lo corremos alli.

All esta en el escritorio y el servicio CRYPKEY lo dejamos corriendo,


arrancamos el programa.

ACEPTAMOS a ver que pasa

Intentemos atachear ahora

LO ATACHEA SIN PROBLEMAS y vemos que corre sin crear los temporales
malditos, pues cerrmoslo y abramos este ejecutable directamente en OLLY.

Ah esta, si abrimos con un OLLY el ejecutable que esta en la carpeta del


programa es igual pero al correr encuentra las dll de crypkey que estn en la
carpeta del programa y al crear los temporales y estos intentar debuggearlo y
no poder al estar siendo debuggeado por OLLY lo cierra.
En este caso el programa corre perfectamente en OLLY, estando en el
escritorio

Bueno corre limitado por supuesto pero nos deja debuggearlo, miremos que se
ve entre las strings referentes

Pues salen miles de strings veamos si estn las de los carteles que nos
aparecieron hasta ahora.

Bueno esto es una muestra, estn todos las strings importantes, as que el
trabajo ahora se reduce a parchear el programa para obligarlo a que corra
veamos si podemos hacer esto y que quede bien.
Pongo un BP MessageBoxA y corro desde el inicio el ejecutable en el escritorio

Bueno ah tenemos el primer cartel que ocurre cuando lo corremos fuera de su


carpeta, volvamos hasta el programa a ver como fue esta llamada.

Pattico no? Un saltito a parchear jeje pero esperemos antes de hacerlo


Probemos correrlo sin el servicio.

En este caso nos sale otro cartel

Al volver de la api vemos

Que es el mismo lugar que antes por lo que es una rutina general para
cualquier cartel que quiere mostrar, as que lleguemos hasta el ret con
EXECUTE TILL RETURN.

All si vemos el salto especifico a parchear vemos que volvimos en 6D703B


006D7036 E8 D50A0000 CALL OmniWork.006D7B10
006D703B 8D4C24 30
LEA ECX,DWORD PTR SS:[ESP+30]

Por lo tanto estbamos dentro del call anterior que es la rutina general para
mostrar mensajes estuvimos bien en no parchearla dentro si no nunca nos
mostrara mas mensajes y quedaremos sin saber lo que el programa nos esta
contando de lo que va ocurriendo.

Pues alli forzamos el salto y volvemos a correr el programa con el Bp en


MessageBoxA activo.

All nos sale el otro cartelito, como sabamos luego de volver de la api y hacer
execute tiil return estamos aqu

Veo que hay dos saltos antes

Veo que si invirtiera el primer salto y saltara va a una comparacin que me


llama la atencin, ve si el valor a que apunta EDI es cero

Como ese
80000000

valor es cero no salta y machaca el valor que comparo con

Dejo el BP en el primer salto y doy RUN veo que arranca el programa pero
cuando voy a LICENSE-CURRENT LICENSE vuelve a parar all, bueno lo hago
saltar nuevamente

Cambio la palabra LEVEL 0 por OMNI SHOOT jeje, ser que all compara el
nivel de autorizacin del software? Ese cero que machaco que pasara si lo
obligo a poner 4 por ejemplo.

Esa seria una linda forma, guardemos los cambios y corrmoslo.

Vemos all que algo tiene que ver jua jua ahora puso LEVEL 4 jaja, miremos
donde esta la string SOFT-KEY Not Authorized (CONTACT SIS).

Jeje all esta y viene de aqu

Veo que debajo estn los distintos mensajes de distintos tipos de licencia

Reinicio y veo que para si pongo un BP alli

Si sigo traceando

Veo que ese salto evita los carteles del tipo de licencia que sobrescriben lo
anterior, as que lo modificare para que vaya a UNLIMITED.

Como vi de donde leyo el valor de EAX, con este parche pongo EAX a cero y lo
guardo en el lugar de donde lo haba ledo, luego lo fuerzo a saltar je-

Jeje va mejorando, veamos si tiene chequeos mas adelante


Vemos que el programa ya arranca y permite guardar aunque aun tiene
limitaciones como los menus sin activar y cuando voy a algunas opciones me
sale el cartel NOT LICENSED, sigamos este ultimo cartel.

Al querer usar esta opcin nos para en un mesageboxa de not licensed

Vuelve de la api aqu

Si busco entre las strings veo

Vemos que hay un call que verifica si estas licenciado y si no hay varios partes
del programa que te tiran a NOT LICENSED pongamos un BP en dichos calles

Alli paro al tratar de usar nuevamente la opcin anterior entro al call

Vemos que es un triste call que devuelve uno o cero veamos traceemos

All va a ir a poner EAX a cero puedo borrar ese XOR EAX,EAX a ver que pasa
o puedo cambiar el salto para que vaya a MOV EAX,.1 y regrese de all
probemos.

Vemos que al modificar ese call que verificaba la habilitacin el programa


queda todo funcional, los menues se habilitan y todo queda perfecto
funcionando, puede guardar, puede hacer cualquier cosa que no hay problema
este o no este el servicio.

Ahora como ultima prueba pongmoslo en su carpeta nuevamente y pongamos


el servicio a funcionar.
Vemos que funciona perfectamente la nica diferencia es que dentro de su
carpeta tiene que tener el servicio corriendo mientras fuera de la misma no es
necesario que corra el servicio, pero funciona perfectamente.
Otra terrible proteccin con servicio en RING0, usando la imaginacin nuestro
pequeo DAVID ha podido vencer a GOLIATH y su castillo protegido por
cientos de soldados se convirti en una carpa playera con nios jugando dentro
jaja.
Hasta la prxima
Ricardo Narvaja

You might also like