Trabajando Con CRYPKEY

23
Trabajando con CRYPKEY A decir verdad esta protección 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 protección complica las cosas El programa al instalarse, paradójicamente nos instala un servicio el cual podemos ver en la lista de SERVICIOS yendo a PANEL DE CONTROL-HERRAMIENTAS ADMINISTRATIVAS-SERVICIOS. Vamos a ver si es tan inútil como el servicio de SECUROM o es necesario lo cual implicaría tener que usar otro debugger, ya que OLLYDBG no trabaja en RING0, lo cual es imprescindible para debuggear estos servicios, tendríamos 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 automático debería reiniciar la maquina para que arranque solo, así que de cualquier forma lo tengo que iniciar manualmente.

description

Trabajando Con CRYPKEY

Transcript of Trabajando Con CRYPKEY

Page 1: Trabajando Con CRYPKEY

Trabajando con CRYPKEY

A decir verdad esta protección 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 protección complica las cosasEl programa al instalarse, paradójicamente nos instala un servicio el cual podemos ver en la lista de SERVICIOS yendo a PANEL DE CONTROL-HERRAMIENTAS ADMINISTRATIVAS-SERVICIOS.

Vamos a ver si es tan inútil como el servicio de SECUROM o es necesario lo cual implicaría tener que usar otro debugger, ya que OLLYDBG no trabaja en RING0, lo cual es imprescindible para debuggear estos servicios, tendríamos 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 automático debería reiniciar la maquina para que arranque solo, así que de cualquier forma lo tengo que iniciar manualmente.

Page 2: Trabajando Con CRYPKEY

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 fatídico jeje, luego de aceptarlo arranca el programa en modo DEMO.

Vemos que el programa tiene una opción en FILES-CURRENT LICENSE para ver la licencia actual, así que miremos a ver que dice.

Page 3: Trabajando Con CRYPKEY

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

Page 4: Trabajando Con CRYPKEY

Y los menues están todos deshabilitados o sea no sirve para nada el pobre jeje.

Volvamos a arrancarlo a ver si tiene para poder insertar algún numero para registrar o algo asi.

Vemos en el menú la opción de autorizar el SOFT entremos allí

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

Page 5: Trabajando Con CRYPKEY

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.

Page 6: Trabajando Con CRYPKEY

Bueno no nos deja atachear, porque será esto, tendrá el servicio algo que ver apaguémoslo 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?

Page 7: Trabajando Con CRYPKEY

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 difícil 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.

Page 8: Trabajando Con CRYPKEY

Allí esta en el escritorio y el servicio CRYPKEY lo dejamos corriendo, arrancamos el programa.

ACEPTAMOS a ver que pasa

Intentemos atachear ahora

Page 9: Trabajando Con CRYPKEY

LO ATACHEA SIN PROBLEMAS y vemos que corre sin crear los temporales malditos, pues cerrémoslo 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 están 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

Page 10: Trabajando Con CRYPKEY

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

Bueno esto es una muestra, están 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.

Patético no? Un saltito a parchear jeje pero esperemos antes de hacerlo

Probemos correrlo sin el servicio.

Page 11: Trabajando Con CRYPKEY

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.006D7B10006D703B 8D4C24 30 LEA ECX,DWORD PTR SS:[ESP+30]

Page 12: Trabajando Con CRYPKEY

Por lo tanto estábamos 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 sabíamos luego de volver de la api y hacer execute tiil return estamos aquí

Veo que hay dos saltos antes

Page 13: Trabajando Con CRYPKEY

Veo que si invirtiera el primer salto y saltara va a una comparación que me llama la atención, ve si el valor a que apunta EDI es cero

Como ese valor es cero no salta y machaca el valor que comparo con 80000000

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 autorización del software? Ese cero que machaco que pasara si lo obligo a poner 4 por ejemplo.

Page 14: Trabajando Con CRYPKEY

Esa seria una linda forma, guardemos los cambios y corrámoslo.

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 están los distintos mensajes de distintos tipos de licencia

Page 15: Trabajando Con CRYPKEY

Reinicio y veo que para si pongo un BP alli

Si sigo traceando

Page 16: Trabajando Con CRYPKEY

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 había leído, 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 opción nos para en un mesageboxa de not licensed

Vuelve de la api aquí

Page 17: Trabajando Con CRYPKEY

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

Page 18: Trabajando Con CRYPKEY

Alli paro al tratar de usar nuevamente la opción 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 habilitación 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.

Page 19: Trabajando Con CRYPKEY

Ahora como ultima prueba pongámoslo 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 protección con servicio en RING0, usando la imaginación nuestro pequeño DAVID ha podido vencer a GOLIATH y su castillo protegido por cientos de soldados se convirtió en una carpa playera con niños jugando dentro jaja.

Hasta la próximaRicardo Narvaja

Page 20: Trabajando Con CRYPKEY