|
|
 |
ESTUDIO COLECTIVO DE DESPROTECCIONES
Última Actualizacion:
25/10/2001
|
 |
|
Programa |
Quitanag
1.00 |
W95 / W98 / NT |
Descripción |
Cargador para eliminación
de nags con fuentes comentadas. |
Tipo |
Tutorial técnicas de cracking. |
Tipo de Tutorial |
[X]Original, []Adaptación, []Aplicación, []Traducción |
Url |
|
Protección |
Nag Screen |
Dificultad |
1) Principiante, 2) Amateur, 3) Aficionado, 4) Profesional, 5) Especialista |
Herramientas |
Compilador de C para Windows, Spy++
y un editor gráfico. |
Objetivo |
Eliminar Nag Screens. |
Cracker |
Mr.Blue |
Grupo |
Whiskey Kon Tekila |
Fecha |
2 de Abril de 2000 |
INTRODUCCION
|
De todos es conocida la manía de los programadores shareware
de recordanos continuamente que la versión que estamos utilizando
no está registrada. Debe aterrorizarles que los usuarios se olviden
de que están utlizando versiones shareware.
Quién haya leído mi tutorial
para crackear el Cuentapasos
3.75 rev 372, recordará como nos deshacíamos de la nag
inicial del programa. En ese tutorial se describía, de manera
muy somera la manera de simular pulsaciones del ratón desde código,
para pulsar "virtualmente" el botón de 'Aceptar' sin
necesidad de intervención del usuario.
En este tutorial profundizaremos en esta versátil técnica
que nos permitirá hacer muchas otras cosas, aparte de simular
clics de ratón. Se presentará una pequeña aplicación,
escrita en C para que nadie tenga excusa de que no se entera, que leerá
los datos necesarios de un fichero .INI, datos que necesita el programa
para localizar el botón que debemos pulsar. Esta facilidad permitirá
configurar el programa según la aplicación "vícitma"
y las características de su nag.
|
Vistazo general
|
Nuestro objetivo serán las nagscreens que aparecen
en casi cualquier programa shareware nada más arrancarlo, y que
obligan al usuario a pulsar un botón determinado. El diseño
de las nags es muy variado, pero en todas hay un botón que es
el que usuario debe pulsar.
Variaciones más comunes:
- Algunos programadores "malévolos" inhabilitan dicho
botón durante uno o más segundos para intentar obligar
al usuario a que se lea la nag.
- Otros programadores, aún más "malvados",
aleatorizan la posición del botón a pulsar, cambiándolo
de sitio entre ejecución y ejecución y obligando igualmente
al usuario a echarle un vistazo a la nag.
- Finalmente, otros programadores que hacen sus "deberes"
y que conocen como las gastan algunos crackers, "ocultan"
la funcionalidad del botón deseado. Para ello, en lugar de
colocar en el botón el texto adecuado, 'Ok' o 'Aceptar', incrustan
una imagen de ese mismo texto. Esto, como se verá más
adelante, lo único que logra es complicarnos un poquito más
la tarea de localizar el botón a pulsar.
Ejemplo de estas "complicaciones" es la nag del Cuentapasos,
que a partir de la revisión 379 de la versión 3.75 incorpora
simultáneamente todas estas complicaciones.
Nuestro QuitaNag, deberá en primer lugar arrancar la aplicación
"víctima", localizar la nag cuando ésta aparezca,
localizar el botón correcto dentro de la nag y finalmente pulsarlo.
La aplicación QuitaNag debe encontrarse en el mismo directorio
que el ejuctable "víctima", en donde también
debe encontrarse el fichero de configuración "QuitaNag.ini"
con todos los datos correspondientes a la aplicación víctima.
Aquí teneis el QuitaNag 1.00 con
el código fuente.
|
Buscando ventanas
|
Para abreviar me salto toda la inicialización del programa
durante la cual localizará el fichero "QuitaNag.ini",
que debe estar presente en el mismo directorio de la aplicación,
cargará los datos de configuración y arrancará
a la "víctima". Todo esto viene convenientemente
comentado en los fuentes del programa.
Para distinguir la nag del resto de ventanas que puede abrir la aplicación,
utilizaremos el caption o título de la ventana, para
lo que examinaremos todas la ventanas que correspondan a la aplicación
y nos quedaremos con aquella en la que muestre en su título
una cadena determinada, utilizada para distinguirla de las restantes
ventanas.
Necesitamos una función que nos liste las ventanas que creadas
por un determinado proceso. Esto lo realizará EnumThreadWindows.
Los parámetros son los siguientes:
- Identificardor del proceso.
- Dirección de la función de callback.
- Parámetro para la función de callback.
El primer parámetro no es más que el identificador
del proceso del cual queremos obtener la enumeración de sus
ventanas. Este identificador nos lo devuelve la función CreateProcess
tras arrancar la aplicación.
El segundo parámetro es la dirección de la función
que se encargará de distinguir "nuestra" ventana
de las restantes. Por cada una de las ventanas de la aplicación,
EnumThreadWindows invocará a esta función de
callback pasándole como parámetros el handle
de la ventana y los parámetros que le pasamos en tercer lugar.
La enumeración finalizará cuando se hayan enumerado
todas las ventanas creadas por el proceso "objetivo", o
bien cuando la función de callback desee finalizar la
enumeración. En nuestro caso, la función de callback
abortará la enumeración cuando haya encontrado la ventana
que busca.
La función de callback puede ser más o menos
complicada según la complejidad que entrañe la localización
de la nag. En nuestro caso será sencillito ya que vamos a suponer
que con el título de la ventana ya es suficiente. En otros
casos, puede que el título no nos baste para distinguir la
nag de otras ventanas.
El título que buscamos es el que hemos leído del fichero
de configuración, y la función encargada de devolvernos
el título de una ventana es GetWindowText. Nuestra función
de callback, que he bautizado como BuscaVentana, solo
tiene que verificar si el título que le devuelve GetWindowText
contiene la cadena que buscamos o no.
Se ha incluído en QuitaNag un temporizador también
configurable que evita que el programa se quede buscando indefinidamente
una ventana. El valor de este temporizador debe ser ligeramente superior
al tiempo que tarda la aplicación en crear y mostrar la nagscreen
desde que se comienza a ejecutar, lo cual también depende de
lo rápida que sea la máquina en donde se ejecuta...
|
Buscando botones
|
Una vez localizada la ventana, nos queda buscar el botón que
debemos cliquear para que la nag deje de darnos la tabarra...
Al igual que existen funciones para enumerar ventanas padre como
la nagscreen, también hay funciones para enumerar ventanas
hijas como nuestro botón. El botón que buscamos es una
de las ventanas hija de la nagscreen que hemos localizado. La función
adecuada es EnumChildWindows que tiene un funcionamiento idéntico
a EnumThreadWindows, con la salvedad que en este caso se usa
el hadle de la ventana padre que contiene los controles que nos interesan,
en lugar del identificador del proceso.
En este caso la búsqueda del botón es algo más
compleja, ya que vamos a suponer que el botón cambia de sitio
(por lo que no podremos localizarlo por sus coordenadas) y que el
botón no contiene texto, sino una imagen (no podremos localizarlo
por su caption). La identificación del botón
será por el color de uno sus píxeles... y me explico
con un ejemplo. Si en la nag hay dos botones, cada uno con la imagen
de un texto distinto como 'Aceptar' y 'Salir', buscamos con un editor
gráfico en qué pixel se diferencian ambos botones, anotamos
las coordenadas relativas a la esquina superior izquierda del botón
y el color RGB de ese pixel en el botón que nos interesa...
Las coordenadas del pixel "identificativo" y su color serán
la tarjeta de identidad de nuestro botón. Y esto se hace así
porque tampoco es cuestión de hacerse un OCR para distinguir
entre dos o tres botones ;-)
La callback correspondiente a EnumChildWindows, que
aparece en las fuentes como BuscaBoton, lo primero que comprueba
es que el handle actual corresponde a un botón, ya que en una
nag pueden haber muchos más controles aparte de los botones.
Esta discriminación entre botón y no botón la
realiza usando la clase de la ventana hija...¿ y cuál
es la clase de un botón? Esto dependerá de la aplicación
y del lenguaje que se haya utilizado para crearla. Por ejemplo, los
botones de aplicaciones realizadas en Visual Basic son por defecto
de la clase ThunderRT5CommandButton. El nombre de la clase
puede determinarse con cualquier espía de Windows, como el
Spy++ de Microsoft, que nos muestre información relativa a
las ventanas existentes en todo momento y de los controles de las
mismas. En el código, la función utilizada para verificar
la clase de un determinado control o ventana es GetClassName.
Si el handle que le ha llegado a la función de callback
es un botón, debe comprobar si el pixel "identificativo"
es del color que debe ser. Antes de capturar color del pixel del botón
debe traerlo a primer plano, ya que si no capturaríamos el
color del pixel de la ventana que se pudiera encuentrar en primer
plano, solapada a nuestra nag. SetForegroundWindow nos servirá
para este propósito. El uso de EnableWindow permitirá
(en algunos casos) habilitar el botón sin tener que esperar
a que lo habilite el temporizador dispuesto por el programador para
obligarnos a tragarnos la nagscreen durante varios segundos...
Una vez que nos hemos asegurado que nuestro botón se encuentra
en primer plano y habilitado, sendas llamadas a GetDC y GetPixel
nos devolverán el color del pixel que queramos, en formato
RGB.
Si el botón es el que buscamos, finalizamos la enumeración
y lo pulsamos enviándole un mensaje BM_CLICK con la
función PostMessge.
|
QuitaNag
|
El funcionamiento del QuitaNag es muy sencillo. Lo ilustraremos con
un ejemplo como el Cuentapasos... y si alguien piensa que le tengo
manía al Cuentapasos, lo uso porque es uno de los pocos ejemplos
en los que el autor ha incluído todas las "complicaciones"
imaginarias... y además es todo un clásico nacional
que hay que promocionar... ;-)
Qué datos necesitamos:
- Nombre del ejecutable: 'cpasos32.exe'
- Subcadena del título de la nag que usaremos para identificarla:
'Versión de Evaluación'
Nos quedan los datos relativos a la identificación del botón...
Arrancamos el Cuentapasos y una vez mostrada la nag, con el Spy++
(o equivalente) visualizamos la información correspondiente
al botón etiquetado como 'Aceptar'. Ya tenemos otro de los
parámetros:
- Clase del botón: 'ThunderRT5CommandButton'
Y para localizar el pixel "identificativo" del botón,
capturamos la nag en el portapapeles con 'Alt' + 'Imp Pant.'. Con
nuestro editor gráfico preferido visualizamos la captura de
la ventana y buscamos un pixel que nos permita distinguir el botón
con la imagen 'Aceptar' de los otros dos. Por ejemplo, el pixel de
coordenadas (22,15) es de color negro (0 en RGB) solo en el botón
'Aceptar'. Ya tenemos lo que nos falta:
- Coordenadas: (22,15)
- Color: 0
Para el temporizador colocamos un tiempo holgado, que asegure que
no salta error aunque tengamos el Windows muy sobrecargado y tarde
mucho el Cuentapasos en mostrar la nag.
El fichero 'quitanag.ini' para el Cuentapasos quedaría así:
; QuitaNag 1.00 por Mr.Blue/[WkT!2000]
;
; Ejemplo Cuentapasos 3.75
[Nag]
titulo=Versión de Evaluación
fichero=cpasos32.exe
clase=ThunderRT5CommandButton
coordx=22
coordy=15
colorRGB=0
Milisec=15000
Este fichero .INI y el ejecutable del QuitaNag los colocamos en el
directorio de instalación del Cuentapasos. Cambiamos los accesos
directos para que apunten al ejecutable del QuitaNag y... podemos
disfrutar de nuestros 30 días de evaluación olvidándonos
de la molesta nag... ;-)
|
Conclusiones
|
El QuitaNag, a pesar de sus limitaciones,
puede funcionar con la gran mayoría de nag-screens que se pueden
encontrar; otras más retorcidas precisarán alguna modificación
en el código. Modificando convenientemente las fuentes pueden
crearse programitas mucho más complejos. BM_CLICK no
es el único mensaje que puede enviarse a un control o ventana...
La técnica explicada no es nueva, ya ha sido ampliamente utilizada.
Señal de este uso es que el propio Cuentapasos complica la
nagscreen para evitar que esta tarea no sea tan sencilla.
Lo interesante que ofrece esta técnica es la posibilidad de
automatizar tareas rutinarias, simulando acciones del usuario ahorrándole
al mismo tareas repetitivas, o incluso la posibilidad de utilizar
un programa antiguo que no dispone de interfaz DDE o similar, desde
otra aplicación diseñada por nosotros... o incluso gastarle
una broma a algún amigo abriéndole el bloc de notas
y simulando pulsaciones sobre el mismo... XDDD
En fin, infinitas posibilidades que pueden solucionarnos más
de un problema sin aparente solución. Para que luego digan
por ahí que lo que se aprende crackeando un programa no tiene
otras utilidades más variadas....
Agradecimientos especiales a Manuel Tobarra.... gracias a él
y a sus desvelos a la hora de proteger su Cuentapasos
he aprendido estas "maravillas".... ;-)
Mr.Blue [WkT!]
|
[ Entrada | Documentos Genéricos | WkT! Web Site ]
|
[ Todo el ECD | x Tipo de Protección | x Fecha de Publicación | x Orden Alfabético ]
|
|
(c)
Whiskey Kon Tekila [WkT!] - The Original Spanish Reversers.
Si necesitas contactar con
nosotros
, lee
esto
antes e infórmate de cómo puedes
ayudarnos |
|
|
|
|
|