Karpoff Spanish Tutor 2001

Programa: Crackeando NAGs


Cracker: Dek_Oin Fecha: 01/01/2001

 

 

 al atake

crackeando nags

oh, si. aquí lo que muchos de ustedes buscaban. ahora olvidémonos de esas nags que tanto trabajo dan, verán como en solo 2 minutos o menos (a veces) podemos crackear casi cualquier tipo de nag. hay varias formas de hacerlo pero aquí les contaré las que yo conozco y las que pienso que son más efectivas.

introducción

 

las nags son una de las peores cosas que hay. nada peor que al iniciar un programa que usamos frecuentemente ver mensajes de registreme!, compreme!, pague por mí!, está cometiendo un delito!, esta es una versión de evaluación!, etc. las nags se pueden crackear de las siguientes maneras(las que yo conozco por ahora :-d)

 

anticiparnos a la creación de la nag

bien. esto podemos hacerlo poniendo los famosos break points en las apis que utiliza windows para la creación de ventanas. las más comunes son:

createdialogindirectparama ; recuerden que les añadimos la a al final ya que estamos trabajando en 32 bits
createdialogparama
createdialogparamw
dialogboxindirect
dialogboxparama ; una de las más comunes que hay
messageboxa
messageboxexa

algunas de estas son para cuadros de diálogo y no para ventanas en sí. hay que diferenciar los cuadros de diálogo de las nags. los cuadros de diálogo a veces podemos crackearlos directamente con el w32dasm buscándolo en las string references y modificando ese je a ese jne, nop o eb. además son usados muy a menudo por los programadores para "molestar" al usuario del software.

poniendo estos break points en las apis para creación de ventanas, deberemos tracear con el sice hasta llegar hasta el famoso salto je xxxxxx o jne xxxxxxx o tal vez una call y hacer los respectivos cambios.

 

windows messages

 

esta es una de las técnicas más efectivas que conozco. se trata de utilizar los windows messages. ¿qué son los windows messages?. son los mensajes generados por windows y sus aplicaciones. windows genera un mensaje por cada evento, por ejemplo cuando el usuario escribe, mueve el mouse, o hace clic en un menú desplegable. windows también genera mensajes de respuesta a los cambios en el sistema que hacen las aplicaciones, como cuando un programa cambia la configuración del sistema o cualquier otra cosa. una aplicación puede generar mensajes para dirigir sus propias ventanas, para realizar tareas o para comunicar con ventanas de otras aplicaciones. 

windows envía un mensaje a una ventana con un set de cuatro parámetros: un handle de la ventana, un identificador del mensaje, y dos valores de 32-bit llamados parámetros del mensaje. el handle identifica la ventana para la que el mensaje es enviado. windows lo usa para determinar qué procedimiento usa para enviar el mensaje.

un identificador de un mensaje es una constante que identifica el propósito de un mensaje. cuando una ventana recibe un mensaje, usa un identificador del mensaje para determinar cómo procesar el mensaje. por ejemplo, el identificador de mensajes wm_paint le dice a la ventana que si una aplicación quiere pintarla de algún color, que debe repintarse.

los parámetros del mensaje especifican datos o la ubicación de los ellos, usados por una ventana al procesar un mensaje. el significado y valor de los parámetros del mensaje dependen del mensaje que se envíe. 

(la mayoría extraído de la win32 programmer's reference)


tenemos varias acciones de los windows messages como wm_enable, wm_destroy, wm_clear, wm_activate, etc. para buscar el nombre de la tarea en el sice debes escribir "task". aparecerá algo más o menos así:

taskname   ss:sp      stacktop  stackbot  stacklow  taskdb  hqueue  events
panic      0000:0000  006bc000  006c0000            1356    18bf    0000   ;esta es la tarea
blackice   0000:0000  0068b000  00690000            3dae    3d1f    0000   ;para más info
getright   0000:0000  0082b000  00830000            3e8e    3d97    0000   ;consulta mi tutorial
trayicon   0000:0000  0067b000  00680000            4006    3ee7    0000   ;sobre este programa
wmiexe     0000:0000  0056d000  00570000            410e    0000    0000
togglemo   0000:0000  006cd000  006d0000            42ae    411f    0000   ;estos otros son los 
webshots   0000:0000  0066d000  00670000            353e    348f    0000   ;programas que se están 
cd_load    0000:0000  0065c000  00660000            425e    3457    0000   ;ejecutando en este momento
msmsgs     0000:0000  006fc000  00700000            367e    33ef    0000
winampa    0000:0000  0063d000  00640000            3436    340f    0000
instanta   0000:0000  006bd000  006c0000            34de    4217    0000
gmnet      0000:0000  0064d000  00650000            33be    33a7    0000
systray    0000:0000  0063d000  00640000            35e6    34ff    0000

 

aquí vemos la lista de las tareas en ejecución. sí, la misma que vemos con el procdump j). ahora deberemos escribir hwnd + tarea en el sice para que se muestren los datos de las ventanas del programa. en este caso escribimos hwnd panic y apareció esto:

window handle   hqueue  sz  qowner    class name            window procedure
 06c8(1)        19f7    32  panic     #32770 (dialog)       178f:000050b1   ;esta es la nag
  06cc(2)       19f7    32  panic     edit                  177f:00000cc6   ;ya que dice que 
  06d0(2)       19f7    32  panic     edit                  177f:00000cc6   ;es un cuadro de
  06d4(2)       19f7    32  panic     edit                  177f:00000cc6   ;diálogo
  06d8(2)       19f7    32  panic     button                178f:00001040
  06dc(2)       19f7    32  panic     button                178f:00001040
  06e0(2)       19f7    32  panic     static                3aef:0000025e
  06e4(2)       19f7    32  panic     static                3aef:0000025e
  06e8(2)       19f7    32  panic     static                3aef:0000025e
  06ec(2)       19f7    32  panic     static                3aef:0000025e
  06f0(2)       19f7    32  panic     static                3aef:0000025e
  06f4(2)       19f7    32  panic     static                3aef:0000025e
 06c4(1)        19f7    32  panic     dontpanic             3aef:0000028a
 06bc(1)        19f7    32  panic     oleddewndclass 0x     1427:000003a8
 06b8(1)        19f7    32  panic     olemainthreadwndc     1427:00000248

ahora a poner los famosos break points!. éstos son diferentes cuando usamos los windows messages. deberemos escribir bmsg + handle + window message. como ya dije entre los windows messages están wm_enable, wm_destroy, etc. en este caso escribiríamos bmsg 06c8 wm_destroy. esta vez usaremos wm_destroy. a mi me parece que es el más efectivo, además es el que más utilizo. recuerda que los handles de ventanas siempre serán diferentes en mi ordenador y en el suyo y además cambian cada vez que cerramos y volvemos a abrir el programa.

también para simplificar todo esto podemos usar un programa llamado win identifier de black fénix. nos brindará todo tipo de datos sobre una ventana. si lo usamos, ya podemos poner el bmsg directamente en el sice.

el 50% de las veces que trabajo con wm_destroy y pulso el botón de siguiente en la nag, ya es muy fácil encontrar la llamada o el salto que decide si se muestra o no la nag. solo hay que darles a unos cuantos f12 hasta llegar a la llamada de la nag (lo más común es que sea una dialogboxparama) y entonces subir unas líneas hasta llegar a un salto o a una call.

(si no quieres escribir "task" ni hwnd+tarea puedes poner hwnd directamente, pero estarás perdido entre todos los windows messages)

 

jugando con el código de algunas nags

 

este método solo funciona con algunas nags, con esas horripilantes que no habilitan el botón de evaluar después de 10 o 15 segundos. también funciona con aquellas que se cierran automáticamente después de algunos segundos. se trata de modificar los intérvalos de tiempo de las nags como para hacer que se cierren automáticamente después de 0 segundos, o sea se abra y se cierra o no se abre directamente (en algunos programas). tomaremos como ejemplo este programa:

víctima:

cd-r diagnistic

url:

http://usuarios.tripod.es/tutoriales2000t2/cdrdiag.exe

descripción:

un explorador de cds que nos dirá más que el de windows

tamaño del ejecutable:

460 kb

tipo de protección:

nag y 30 días

es un programa que no he probado mucho y que la descripción que puse arriba la saqué de la ayuda del programa. muy bien. ahora ejecutamos el programa y ya nos viene esa nag. si contamos bien, desaparece sola en 5 segundos. vemos que nos aparece un mensaje que dice "warning: your copy of cd-r diagnostic will expire in 30 days". para que no nos moleste lo buscamos en las string references y esto es lo que obtenemos:

:0040fa1b 7c02 jl 0040fa1f
:0040fa1d 8bc2 mov eax, edx
|  
* referenced by a (u)nconditional or (c)onditional jump at address:
|:0040fa1b(c)
|
:0040fa1f 3bc1 cmp eax, ecx
:0040fa21 7f0d jg 0040fa30
:0040fa23 50 push eax
|
* possible reference to string resource id=00157: "warning: your copy of cd-r diagnostic will 
expire in %d days"
:0040fa24 689d000000 push 0000009d
:0040fa29 e8d4e5ffff call 0040e002
:0040fa2e 59 pop ecx
:0040fa2f 59 pop ecx

como ven, inmediatamente arriba del mensaje hay un salto jg. parece interesante ya que estamos con una limitación de tiempo así que lo cambiamos por eb para que salte sin importar el valor que tenga. ok, todo bien, ya no aparecen más los mensajes. para los que les moleste, pueden buscar con el editor hexadecimal la palabra "demo" que aparece por todos lados y borrarla y sacarle con el exescope ese texto que aparece cuando pulsamos el botón about ("demo version this demo version is not fully functional"). muy bien, ahora solo nos queda la nag que es nuestro propósito. recuerdan que la nag desaparecía en 5 segundos. el tiempo en la programación se mide en milisegundos por lo tanto la nag desaparece en 5000 milisegundos. ahora tenemos que 5000 en hexadecimal = 1388.

pues eso buscaremos en el w32dasm a ver que aparece. podemos llegar hasta esta parte del código buscando 1388 con search o sino haciendo clic en la api de la user32, settimer, cuya utilización es crear un "cronómetro" fijando intervalos de tiempo. lo encontramos y aquí aparecemos:

:0040119c 83c40c add esp, 0000000c
:0040119f 53 push ebx
* possible reference to string resource id=05000: "inquiry failed, no information available"
|
:004011a0 6888130000 push 00001388 ;aquí lo que buscábamos,
:004011a5 6a01 push 00000001 ;nuestro cronómetro :)
:004011a7 ff7508 push [ebp+08]
* reference to: user32.settimer, ord:0252h ;ohhh, settimer, por aquí hay 
| ;algo raro
:004011aa ff1550434400 call dword ptr [00444350]
* referenced by a (u)nconditional or (c)onditional jump at address:
|:00401189(u)
|
:004011b0 8d45cc lea eax, dword ptr [ebp-34]

tenemos las puertas abiertas. aquí podemos decidir en cuanto tiempo queremos que se cierre la nag. como no nos gustan las nags lo ponemos a 0. en otras palabras cambiamos 6888130000  push 00001388 por 6a00909090 push 00000000 (los nops los ponemos para llenar los bytes que nos quedan). vamos al hex editor, el offset de mi pc es 11a0 y cambiamos los bytes correspondientes. y sí!!!, funciona!!!, la nag se cierra automáticamente!.

esta fácil alternativa, a veces no funciona. ya verán por que digo fácil :-). tomaremos como ejemplo el muy conocido ultra-edit v 8.00 disponible en la página de karpoff. recuerden que solo crackearemos la nag, todavia tienen el límite de tiempo.

víctima:

ultra-edit32 v8.00

url:

http://karpoff.welcome.to/

descripción:

editor hexa

dificultad:

newbie++ - aficionado - avanzado - experto - élite

herramientas:

exescope, resource hacker, file inspector, procdump, w32intro, unaspack, anti-aspack, cerebro. (todas estas herramientas menos una :) las puedes encontrar en las protools)

tipo de protección:

nag y tiempo límite

antes que nada intentamos utilizar el programa sin cerrar la nag y si podemos. este método que describiré a continuación solo sirve si podemos usar el programa mientras está la nag. lo único que haremos con esa nag será hacerla invisible. ok, abrimos el exescope, vamos a resource/dialog y ahí empezamos a buscar.

  • primera sorpresa, el exescope no reconoce los recursos

no hay problema, probemos con el resource hacker. abrimos el ejecutable de ultra-edit y...

  • segunda sorpresa, el resource hacker tampoco los reconoce

hmm, aquí hay algo raro. posiblemente el ejecutable está empakado o comprimido. para quitarnos esta duda de encima analizamos el ejecutable con el file inspector y vemos que hay una sección llamada aspack. ya sabemos por que los 2 manipuladores de recursos no reconocian el archivo. corremos al procdump y vamos probando las versiones de aspack para desempakar.

  • tercera sorpresa, el procdump no lo desempaka de ninguna forma

viendo como van las cosas, podemos deducir que nos quedan pocas opciones. intentémoslo con el unaspack, este descompresor para aspack es uno de los mejores que hay. intentamos desempakarlo....

  • cuarta sorpresa, el unaspack no reconoce el aspack

ahora si, no se me ocurre nada. pensemos un momento, mmmm, podríamos hacer un desempakado manual no muy difícil, pero estamos crackeando nags y no aprendiendo desempakados, así que nos quedan 2 opciones.

  • podemos usar el win32intro, un desempakador universal que puede desempakar archivos sin conocer el empakador usado

  • la más segura, seria esta: lutin noir hizo un anti-aspack que solo funciona con la versión 2.11, la más reciente. el ultra-edit no es tan viejo, por lo que podemos deducir que lo más probable sería que esté empakado con esta versión del aspack.

intentémoslo con cualquiera de los dos. funcionan!!, pero el que lo hace más rápido, lógicamente es el anti-aspack :-). ahora si, cuando cargamos el programa en el exescope reconoce los recursos.busquemos.... aquí está!, creo que es la  110. miremos con el resource hacker, quien también nos brindará información "gráfica" a cerca de los cuadros de diálogo, sí, efectivamente, es esta. lo que haremos a continuación será cambiar algunas cosas de ese cuadro de diálogo:

en x debes poner algún número grande (por ejemplo 99999) y ahora en width y height debes poner 0 (ya sabes por qué ;-)). ahora salvamos los cambios y ejecutamos el ultra-edit. wow!, no más nag!, eso parece jeje, en realidad, la nag sigue estando ahí, pero modificamos sus propiedades para que no se vea, por lo tanto para que no moleste. con esta misma técnica puedes crackear la nag de un programa llamado find it, lo puedes encontrar en http://www.skylarkutilities.com/. pero recuerden, aquí solo crackeamos nags, el tiempo límite se lo dejo a ustedes...


 

palabras finales de mi último tutorial del milenio :-)

 

eso es todo por ahora. espero que este tutorial les haya ayudado. este tutorial lo voy a ir ampliando a medida que reciba ideas, sugerencias, y a medida que aprenda yo :-). me gustaria saludar a las siguientes personas:

  • metamorfer

  • demian

  • pr@fesor x

  • karpoff

  • blaz

  • txotxo

  • act mago

  • [xasx]

  • zaiote

  • ni2

  • skuater

  • turbop

  • todo el equipo de [k-for]

  • txeli

  • crkviz

  • code_mex

  • gádix

  • jarunet

  • todos los newbies que hacen preguntas inteligentes por mail así como a los que me bombardean con agradecimientos :)

nos vemos en el próximo tutorial!,

astalavista

 

karpoff spanish tutor: pagina dedicada a la dibulgacion de informacion en castellano, sobre ingenieria inversa y programacion. email "colabora con tus proyectos"
www.000webhost.com