Karpoff Spanish Tutor 1999-2002

Programa:
Power Guard v1.0 (Sin Armadillo)


 

PROTECCION: Nag
Objetivo: Eliminar la Nag con un metodo propuesto por Auspex
Descripcion:
Protege archivos hechos en PowerPoint mediante contraseñas.
Dificultad: Muy Sencillo
DOWNLOAD: http://www.digitalcandle.com
Herramientas: Softice,  Editor Hexadecimal
CRACKER:
AUSPEX
  FECHA: 01/10/2002

 

 INTRODUCCION

 

Este tutorial podría ser una continuación al que he escrito sobre el programa PowerGuard. Lo he separado por que se trata de eliminar una Nag, pero por medio de un método que se me ocurrió a lo largo del crack, un método que pienso yo que puede ser algo muy interesante de ver y estudiar, y por eso me gustaría compartirlo con todo el munndo. Quizas algún dia lo llamen el Método AuspeX, jejeeejee, eso sería estupendo.

Estoy seguro de que a alguien se le habrá ocurrido alguna vez, asi que no pretendo decir que he descubierto algo nuevo y revolucionario, pero lo que si puedo decir es que jamas lo he leido en ningún tutorial, en ninguno, y creedme, he leido muchos. Por ese motivo quiero escribir este, y compartir toda la información que pueda transmitir, y si a alguno de los lectores ya se le había ocurrido la idea que voy a proponer, por favor, que no se sientan ofendidos.

 

 AL ATAKE

  

Bueno, la cosa va de eliminar una Nag, concretamente esta ventanita:

Estuve dandole vueltas a la cabeza a ver como eliminar esta sencilla nag y se me ocurrió una gran idea, os lo explicaré:

Una feliz idea

Cuando nosotros corremos un programa en Windows, que es un Sistema Operativo multitarea, éste reparte dichas tareas en el tiempo a cada aplicación que está ejecutándose en memoria (cada aplicación tendrá una prioridad u otra, Windows gestionará esto). Cuando nosotros estamos frente a una nag, el programa se encuentra en un bucle hasta que el usuario pulsa, por ejemplo, un botón de OK, entonces el programa sale del bucle y continua ejecutándose. Pues, ¿por qué no adentrarnos en dicho bucle?. Este loop se encontrará en una función, y con F12, pulsadas repetidas veces llegará un momento en el que se saldrá de dicha función principal. Una vez que nos salgamos desaparecerá Sice y estaremos de nuevo con la nag. Ahora sólo tenemos que pulsar OK, y Sice saltará él solito justo en el código que nosotros queremos. Estamos fuera de la función que provoca el bucle, y no nos ha hecho falta enganchar ninguna API ni nada por el estilo.

¿Pero cómo hacemos esto?, ¿cómo nos metemos en el bucle?, vamos a ver, cuando estamos con la nag en panatalla y nos metemos en el Sice, no se está ejecutando el código del programa, sino otro que se encuentra en el núcleo del Sistema Operativo, kernell32.dll (en el Sice nos aparece con el nombre de acpi, ¿verdad?), por lo tanto nos hemos de meter en el espacio de memoria de nuestra aplicación y una vez alli, hemos de enganchar el flujo del proceso, es decir, encontrar las instrucciones por donde se está ejecutando el bucle y detenerlo.

Para los que no hayan leido el tutorial que escribí sobre Armadillo 2.60, os diré que existen dos comandos clave para adentrarnos en la memoria de la aplicación: proc, addr CONTEXT. El primero nos dará una serie de datos sobre cada proceso que se está ejecutando, el que nos interesa a nosotros es Context. El segundo nos vale para meternos en su espacio de memoria. El proceso que lleva el asterísco es el que estamos depurando con Sice en ese momento.

Para detener el bucle sólo basta con poner un bpr INICIO FIN r. INICIO y FIN son los rangos donde ustedes penseis que está dicho bucle, por ejemplo en una sección o, si no lo sabeis, en todo el ejecutable.

Si ahora pulsais intro, al instante Sice saltará y ya estais en el bucle del proceso. Ahora pulsar F12 hasta que os salgais del Sice. Lo único que queda es pulsar el botón de continuar y listo, ya estamos fuera de la función que provoca el bucle, ahora depende de cada uno encontrar la llamada a la Nag, pero os aseguro que es sencillo, un par de F12 e ir comprobando mediante bpx donde se llama a la nag.

Con este método que os propongo podeis solucionar muchos de los problemas que se os plantean a la hora de eliminar nag, o cualquier cosa en donde querais adentraros en su código con un click de ratón y no sepais la forma de hacerlo por que no se os ocurre la API correcta para adentraros, etc... Creo que puede ser una buena idea, ¿no?.

Demostremos que el método funciona eliminado la nag de PowerGuard:

Arrancamos el programa, y esperamos a que nos salga la nag. Ahora nos metemos en el Sice y buscamos el campo Context de PowerGuard con el comando proc, me sale D37D6F10. Ahora ponemos el comando addr D37D6F10 y pulsamos intro. Ya estamos en la memoria de PowerGuard, ahora pongamos un bpr 401000 494000 r (es la primera sección, CODE). Nos salimos y vemos como al instante Sice salta. Eliminamos el bpr (bc 0) y pulsamos F12 hasta que nos salgamos de Sice. Una vez fuera, pulsamos el botón OK y Sice vuelve a saltar, ya estamos donde queremos, ahora busquemos la posible llamada. En este caso después de unos cuantos F12 me encuentro que salgo de un CALL [EDX + E8]. Se me ocurre poner un bpx en dicha llamada y volver a ejecutar la aplicación. Una vez que Sice salte, nos metemos dentro con F8 y ensamblamos un RET. Ya no volverá a salirnos nunca más la dichosa nag, pero existe un pequeño inconveniente, tampoco nos saldrán ciertas otras ventanas, aunque sin importancia. Lo que ha pasado es que hemos eliminado una función que se utiliza para sacar varias ventanas diferentes. La solución a esto es sencilla, comprobar si el programa pasa por el CALL [EDX + E8] una sola vez o varias. Sólo hemos de ejecutar y examinar la aplicación con el bpx en la llamada. Observamos que sólo pasa una vez y es para sacarnos la nag. Pués entonces sólo queda nopearla.

NOTA IMPORTANTE: Cuidado con los Push, si los hay antes del CALL también habra que nopearlos para evitar un descuadre de la pila. No se os ocurra nopear nunca una llamada de este tipo a menos que esteis completamente seguros de lo que haceis, por que llama a direcciones que dependerán de un registro, lo que quiere decir es que dicha dirección puede ir variando a lo largo de la ejecución del programa, por lo que un nopeo de dicho CALL podría provocará errores. En este caso, como hemos visto, sólo se llama una vez, por lo que podemos nopearlo sin problemas.

El tema de cambiar los bytes con el editor hexadecimal me lo voy a saltar, ¿ok?. Bueno pues se acabó lo que se daba.

Notas finales:

Espero que hayais entendido el método que os propongo, si es que me he explicado bien, por que la verdad es que soy como un libro cerrado xD. Es muy eficaz, lo he probado con diferentes programas, nag's con boton, nag's temporal, y se puede aplicar a todos dando buenos resultados. Lo mejor de todo es que ya no hay necesidad de echar mano a la API, como por ejemplo DialogBoxParamA ni a los mensajes de windows como WM_DESTROY (este es muy usado y bastante efizas tambien).

Mando un saludo a todo el mundo y hasta el proximo tuto.

auspexxx@hotmail.com

 

 

Karpoff Spanish Tutor: Pagina dedicada a la divulgacion de informacion en Castellano, sobre Ingenieria Inversa y Programacion. Email "Colabora con tus Proyectos"
www.000webhost.com