Test Foro de elhacker.net SMF 2.1

Programación => Ingeniería Inversa => Mensaje iniciado por: sasske en 15 Marzo 2014, 19:21 PM

Título: Anti-Debugging
Publicado por: sasske en 15 Marzo 2014, 19:21 PM
MUY buenas a todos, sigo programando el crackme, y cada vez voy mejor, últimamente ando con lo del cifrado (ya casi lo tengo aunque me haya dado problemas) y quisiera si alguien sabe alguna recompilacion de herramientas anti-cracking, que me las pase, para proteger la aplicación, la idea seria que sea en C++, ya que estoy seguro de que no sabre adaptarlo :rolleyes:, desde ya, muchas gracias :)

PD: Obviamente lo mejor seria en español, pero si no se puede, acepto ingles xD
Título: Re: Anti-Debugging
Publicado por: .:UND3R:. en 15 Marzo 2014, 19:47 PM
Las únicas que conozco son empaquetadores o packers son herramientas que encapsulan al ejecutable compilado con un packer, este se ejecuta antes que el programa original, y lanza una serie de sistemas anti-debug, una vez echo esto descifra y repara el ejecutable y comienza con la ejecución. Si intentas utilizar un packer te recomiendo que tu hagas uno ya que en Internet hay muchos tutoriales o herramientas que automatizan el desempaquetado, aun así digamos que si publicas un crackme con un packer, esto se llamaría unpackme y no crackme aunque podría ser mixto, pero dudo que alguien se anime a desarrollarlo si sobre todo el crackme no es provechoso (solo POF), saludos y suerte.
Título: Re: Anti-Debugging
Publicado por: sasske en 15 Marzo 2014, 20:02 PM
Cita de: .:UND3R:. en 15 Marzo 2014, 19:47 PM
Las únicas que conozco son empaquetadores o packers son herramientas que encapsulan al ejecutable compilado con un packer, este se ejecuta antes que el programa original, y lanza una serie de sistemas anti-debug, una vez echo esto descifra y repara el ejecutable y comienza con la ejecución. Si intentas utilizar un packer te recomiendo que tu hagas uno ya que en Internet hay muchos tutoriales o herramientas que automatizan el desempaquetado, aun así digamos que si publicas un crackme con un packer, esto se llamaría unpackme y no crackme aunque podría ser mixto, pero dudo que alguien se anime a desarrollarlo si sobre todo el crackme no es provechoso (solo POF), saludos y suerte.

Si, pero los packers tienen alguna forma de Anti-Debugging, por eso digo, eso quiero aprender, mi pregunta es sin tienen alguna re compilación o distintos lugares donde haya tutoriales sobre protecciones de este estilo.

S2
Título: Re: Anti-Debugging
Publicado por: .:UND3R:. en 16 Marzo 2014, 03:36 AM
Lo que ocurre es que los packers tienen las mismas técnicas anti-debuggers que una aplicación, sigue siendo un PE, ahora como veo que quieres técnicas antidebugging quizás esto te ayude:
http://www.symantec.com/connect/articles/windows-anti-debug-reference

Debes tener nociones de ASM para entender los ejemplos, aunque es tan simple como copiar el código y luego ensamblar y con un depurado ver como lo interpreta, es decir ver las bifurcaciones, a ver que tal, saludos.
Título: Re: Anti-Debugging
Publicado por: sasske en 16 Marzo 2014, 03:47 AM
Cita de: .:UND3R:. en 16 Marzo 2014, 03:36 AM
Lo que ocurre es que los packers tienen las mismas técnicas anti-debuggers que una aplicación, sigue siendo un PE, ahora como veo que quieres técnicas antidebugging quizás esto te ayude:
http://www.symantec.com/connect/articles/windows-anti-debug-reference

Debes tener nociones de ASM para entender los ejemplos, aunque es tan simple como copiar el código y luego ensamblar y con un depurado ver como lo interpreta, es decir ver las bifurcaciones, a ver que tal, saludos.

La guarde en favoritos y nivien tenga tiempo la leeré, exactamente lo que me diste es lo que pedía, lo que agradecería es que si alguien encuentra algo así en C++, ya que entiendo como usar IsDebuggerPresent en C++ y en ASM, pero yo de ASM se poco, y de C++ maso, entonces, pasarlo ni idea tengo, osea, puedo o bien agarrar y poner __asm { CopyPaste } o no se... ajajaajja

S2
Título: Re: Anti-Debugging
Publicado por: nomdeusuari en 17 Marzo 2014, 03:13 AM
Cita de: sasske en 15 Marzo 2014, 19:21 PM
MUY buenas a todos, sigo programando el crackme, y cada vez voy mejor, últimamente ando con lo del cifrado (ya casi lo tengo aunque me haya dado problemas) y quisiera si alguien sabe alguna recompilacion de herramientas anti-cracking, que me las pase, para proteger la aplicación, la idea seria que sea en C++, ya que estoy seguro de que no sabre adaptarlo :rolleyes:, desde ya, muchas gracias :)

PD: Obviamente lo mejor seria en español, pero si no se puede, acepto ingles xD

Para "evitar" el debugging del programa, puedes utilizar el código en ensamblador "int3" (CC en hexadecimal) que tanto gusta a los que hacen programas en lampiweb y auditorias wireless. (El Pin Calculator 28 Diciembre del 2012 tiene 815 instrucciones int3.)

Pero afortunadamente hay otras opciones, como por ejemplo:
- Detectar si se "debuggea" en un entorno virtualizado
- Ocultar los hilos de ejecución
- Hacer que la propia aplicación se "debugee" a sí misma
- Manipular la pila (Stack Segment)

Pero vamos a los más específico:
Si buscas algo para evitar el debugging en OllyDBG, algo por este estilo serviria:

HANDLE hOlly = FindWindow(TEXT("OLLYDBG"), NULL);

if(hOlly)
    ExitProcess(0);


O, quizás busques algo para WinDBG:

HANDLE hWinDbg = FindWindow(TEXT("WinDbgFrameClass"), NULL);

if(hWinDbg)
    ExitProcess(0);


...
Título: Re: Anti-Debugging
Publicado por: Mad Antrax en 17 Marzo 2014, 11:26 AM
El anti-debuggin me apasiona, pero ya te aviso que no hay nada 100% infalible. Puedes complicar más o menos las cosas, pero siempre habrá un plug-in que destroce tus tecnicas anti-debug.

Si te interesa éste tema, contruí hace tiempo un anti-debug-test:

(http://i.imgur.com/lmRhCG1.png)

Son un total de 17 tecnicas anti-debug (bastante comunes). Prueba a ver si puedes ocultar ollydbg de los 17 métodos. Viene con el source por si quieres exportar alguna función a tu proyecto.

http://foro.elhacker.net/buscador-t381144.0.html

Saludos!

Título: Re: Anti-Debugging
Publicado por: sasske en 17 Marzo 2014, 21:39 PM
Cita de: nomdeusuari en 17 Marzo 2014, 03:13 AM
Para "evitar" el debugging del programa, puedes utilizar el código en ensamblador "int3" (CC en hexadecimal) que tanto gusta a los que hacen programas en lampiweb y auditorias wireless. (El Pin Calculator 28 Diciembre del 2012 tiene 815 instrucciones int3.)

Pero afortunadamente hay otras opciones, como por ejemplo:
- Detectar si se "debuggea" en un entorno virtualizado
- Ocultar los hilos de ejecución
- Hacer que la propia aplicación se "debugee" a sí misma
- Manipular la pila (Stack Segment)

Pero vamos a los más específico:
Si buscas algo para evitar el debugging en OllyDBG, algo por este estilo serviria:

HANDLE hOlly = FindWindow(TEXT("OLLYDBG"), NULL);

if(hOlly)
   ExitProcess(0);


O, quizás busques algo para WinDBG:

HANDLE hWinDbg = FindWindow(TEXT("WinDbgFrameClass"), NULL);

if(hWinDbg)
   ExitProcess(0);


...

Esas tecnicas las uso, son MUY simples de ocultar, busco hacer eso de bloquear los INT3, y que se debugee a si misma, son las 2 primeras que quiero lograr antes de seguir con algo mejor si es que encuentro, pero la cosa seria como, :p

Cita de: ||MadAntrax|| en 17 Marzo 2014, 11:26 AM
El anti-debuggin me apasiona, pero ya te aviso que no hay nada 100% infalible. Puedes complicar más o menos las cosas, pero siempre habrá un plug-in que destroce tus tecnicas anti-debug.

Si te interesa éste tema, contruí hace tiempo un anti-debug-test:

Son un total de 17 tecnicas anti-debug (bastante comunes). Prueba a ver si puedes ocultar ollydbg de los 17 métodos. Viene con el source por si quieres exportar alguna función a tu proyecto.

http://foro.elhacker.net/buscador-t381144.0.html

Saludos!



EXELENTE, EXELEEEEEENTE, te amo :p, ya se que ninguna es infalible, con debugear con mucha paciencia, y entrar a los calls y bloquearlas, o desde OllyDbg se puede ver que funciones usa, en fin, vos sabras, es bloqueable todo, pero hay cosas que son REALMENTE DIFICILES.

Muchas gracias por el post, ya mismo me lo estoy mirando y te cuento como me va.

S2

EDIT: Bueno, andube testeando, y intente pasarlo a C++ para poder usarlo en mi app, pero tengo un problema, al dividir por 0 para causar la excepcion, la app crashea, no se que hiciste pero la tuya no crashea, hace las mil operaciones de 1 ._., talvez hiciste algo que seteaste en algun lado para que el manejo de excepciones sea distinto, pero no se mucho de VB por eso no veo :/

EDIT2: Ya encontre, "On Error Resume Next", pero no logro hacer nada en C++ que evite que la app crashee con un error de windows, alguien me dice? :p

Agradezco todo tipo de ayudas :p
Título: Re: Anti-Debugging
Publicado por: Mad Antrax en 18 Marzo 2014, 10:25 AM
Puesssss, no tengo ni idea como traducir el "On Error Resume Next" para C++

Básicamente lo que hago cno los timming methods es tomar el tiempo antes de una función crítica. Si hablamos de un software comercial sería:

myTime = GetTickCount()

Call GenerarSerialCode{

.........................
.........................
.........................

}

MyTime2 = GetTickCount()

If MyTime2 - MyTime > 1 then DbgDetected()


La idea es detectar si un cracker tracea con F8 dentro de una función critica (como la de generar un serialnumber), así la diferencia de Tick's será > 1 y lo podrás detectar. En mi ejemplo no tengo ninguna función crítica, así que puse un bucle explosivo de excepciones DIV/0.

En resumen, no necesitas lanzar DIV/0 para chekear un timmer. Simplemente pon el inicio y final del contador entre una función critica de tu software.

Espero que te sirva. Saludos.
Título: Re: Anti-Debugging
Publicado por: tincopasan en 18 Marzo 2014, 14:25 PM
ssaske:
           te recomiendo que leas: http://msdn.microsoft.com/es-es/library/ms173160.aspx
éxitos.
Título: Re: Anti-Debugging
Publicado por: sasske en 19 Marzo 2014, 00:45 AM
Cita de: ||MadAntrax|| en 18 Marzo 2014, 10:25 AM
Puesssss, no tengo ni idea como traducir el "On Error Resume Next" para C++

Básicamente lo que hago cno los timming methods es tomar el tiempo antes de una función crítica. Si hablamos de un software comercial sería:

myTime = GetTickCount()

Call GenerarSerialCode{

.........................
.........................
.........................

}

MyTime2 = GetTickCount()

If MyTime2 - MyTime > 1 then DbgDetected()


La idea es detectar si un cracker tracea con F8 dentro de una función critica (como la de generar un serialnumber), así la diferencia de Tick's será > 1 y lo podrás detectar. En mi ejemplo no tengo ninguna función crítica, así que puse un bucle explosivo de excepciones DIV/0.

En resumen, no necesitas lanzar DIV/0 para chekear un timmer. Simplemente pon el inicio y final del contador entre una función critica de tu software.

Espero que te sirva. Saludos.

Ya se, pero tu idea es mejor de lo que pensas, el OllyDbg se traba hasta con todas las protecciones por el Div 0, pero, no tira error por ese coso que pusiste, el programa controla la excepción, pero pasa por el OllyDbg, y eso lo traba, y hasta lo deja bugeado, esta buena la protección, porque sin pasar por adentro de alguna parte con F8, igual detecta el debugger, eso me gusto! ajajaj

S2

Cita de: tincopasan en 18 Marzo 2014, 14:25 PM
ssaske:
          te recomiendo que leas: http://msdn.microsoft.com/es-es/library/ms173160.aspx
éxitos.

Ahi lo leo en detalle, pero ya hice todo, y solo me falta saber como des habilitar en ese programa el manejo de excepciones de windows, vi que en algunos IDES se hace desde su config, pero buscaba si se podia por codigo, si alguien sabe, me dice, ahi leo la guia y edito si es que dice algo al respecto.

S2
Título: Re: Anti-Debugging
Publicado por: .:UND3R:. en 19 Marzo 2014, 02:00 AM
Si mal no me equivoco es imposible des-habilitar el manejador de excepciones de Windows de un ejecutable, ya que como tengo entendido todo programa posee una estructura llamada SEH, la cual está compuesta por dos argumentos o parámetros de valor DWORD cada uno. El primero apunta al siguiente manejador de excepciones y el segundo parámetro apunta al manejados de excepciones actual. Debes tener en cuenta que el último manejados su primer parámetro apunta a 0xFFFFFFFF y el segundo al manejador por defecto de Windows, el cual estás intentando desactivar, dentro de las protecciones actuales del SO hay un mecanismo llamado SEHOP el cual traza toda la cadena SEH y si la última estructura no apunta a la que te he comentado el programa deja de funcionar, saludos.
Título: Re: Anti-Debugging
Publicado por: sasske en 19 Marzo 2014, 20:13 PM
Cita de: .:UND3R:. en 19 Marzo 2014, 02:00 AM
Si mal no me equivoco es imposible des-habilitar el manejador de excepciones de Windows de un ejecutable, ya que como tengo entendido todo programa posee una estructura llamada SEH, la cual está compuesta por dos argumentos o parámetros de valor DWORD cada uno. El primero apunta al siguiente manejador de excepciones y el segundo parámetro apunta al manejados de excepciones actual. Debes tener en cuenta que el último manejados su primer parámetro apunta a 0xFFFFFFFF y el segundo al manejador por defecto de Windows, el cual estás intentando desactivar, dentro de las protecciones actuales del SO hay un mecanismo llamado SEHOP el cual traza toda la cadena SEH y si la última estructura no apunta a la que te he comentado el programa deja de funcionar, saludos.

Pero se debería de poder, porque si yo pongo:


try
{
   tmp = 10 / 0;
}
catch(...)
{
   printf("mal");
   continue;
}


No va a funcionar, porque el manejo de excepciones de windows me lo va a bloquear como que es división por 0, y me lo va a cerrar en ves de continuar, debería de tener alguna cosa de poner para que funcione.

S2