Bueno, esta función nos permite conocer si nuestra
aplicación está siendo depurada o ejecutada aunque se suele usar para impedir
la depuración de aplicaciones como veréis no es una solución muy efectiva ya
que es bastante simple saltarse esta restricción. En este post explicare como
se puede saltar dicha validación.
Vale para comenzar voy a crear una pequeña aplicación en C++ que utilice esa función
para impedir la depuración de nuestro ejecutable.
Este es el código de mi aplicación:
#include
<cstdlib>
#include
<iostream>
#include
<windows.h>
using namespace std;
int main(int argc,
char *argv[])
{
bool depuradorActivo;
depuradorActivo =
IsDebuggerPresent();
if(depuradorActivo)
{
printf("Depurando...\n\n");
}
else
{
printf("Ejecutando...\n\n");
}
system("PAUSE");
return EXIT_SUCCESS;
}
Como vemos si lo probamos a ejecutar normalmente nos aparece el
siguiente mensaje.
En cambio sí lo intentamos depurar mediante un programa de depuración, en este ejemplo he utilizado el OllyDbg nos aparecerá este otro mensaje.
Ahora para saltarnos esta restricción
lo que aremos será abrir el ejecutable con el depurador OllyDbg. Buscaremos la línea de código donde se encuentra la llamada
a la función “IsDebuggerPresent()” y
pondremos un punto de ruptura justo hay.
Si miramos el EIP vemos que efectiva mente está apuntando a
dicha función.
A continuación avanzaremos hasta la siguiente línea después
de ejecutar esta función en el programa principal para ello podremos ir a 'Debug' y en 'Execute till
user code' o pulsamos ALT+F9.
Como vemos la siguiente orden que se va ejecutar es:
TEST EAX, EAX
Lo que hará que se compare el valor que existe en EAX con EAX el
resultado de dicha operación tendrá efecto sobre el registro “Z”. Esta comparación
hará que registro “Z” acabe valiendo cero. Por los que se está dando a entender que se cumple la condición.
Ahora lo que podemos hacer es modificar el registro “Z” y cambiarlo por
“1”. Esto lo aremos haciendo doble clic sobre el registro “Z”.
Para terminar continuamos con la ejecución del programa pero
esta vez el mensaje que nos aparecerá es distinto.
Fuente: securitybydefault.com
No hay comentarios:
Publicar un comentario