Anti breakpoint?

Iniciado por x64core, 4 Junio 2012, 01:11 AM

0 Miembros y 1 Visitante están viendo este tema.

x64core

Hola a todos bueno e escuchado mucho hablar y me han mencionado de la tecnica anti break point... que es antidebug
para poder proteger un programa y este elimina los breakpoint si detecta que esta siendo depurado...
pero no sé como es ni sé en que consiste para hacer alguna implementacion en algun lenguaje... alguien sabe como
consiste?

The Swash

Hola,

Algún día leí algo al respecto y constaba y verificar que determinadas partes de tu "memoria" no tuviesen un 'CC = INT 3' que es lo que ponen los breakpoints. En lenguajes como C o Pascal se haría muy fácil puesto que tienes punteros.
Ahora pueda que se trate de otra cosa así que espera más opiniones.

Un saludo,
Iván Portilla.

Иōҳ

#2
La manera más clásica es usar un algoritmo de comprobación de integridad por ejemplo CRC, si ha cambiado algún byte de la sección código por ejemplo, es decir si se ha seteado un soft breakpoint, será detectado porque las operaciones del algoritmo darán otro resultado.

Este tipo también puede servir para evitar los BPM... si los tomas en cuenta los permisos de las páginas y/o secciones en las operaciones del algoritmo.

Una forma de evitar los soft breakpoints por ejemplo en las apis, es emular parcial o completamente, así cuando se setee un soft breakpoint, nunca parará.

El límite es tu imaginación.

Saludos,
Nox.
Eres adicto a la Ing. Inversa? -> www.noxsoft.net

x64core

hey muchas gracias, ya comprobe y funciono, no sabia que de esa forma ponian los brk los depuradores :)

.:UND3R:.

Recuerda que también se pueden eliminar los Breakpoint on memory, cambiando los permisos de memoria con la API VirtualProtect.

Es decir si un cracker poner BPM estando en el OEP, podrías cambiar los permisos del segmento .CODE, algunas funciones antes que las funciones importantes de validación o comprobación del serial, de esta manera los BPM se eliminan.

Para los Hardware Break Point, puedes generar excepciones forzadas en tu programa una vez generada podrías verificar la estructura CONTEXT  (apuntada por la API KiUserExceptionDispatcher) la cual al principio almacena los HBP y borrarlos, por lo que lo que no funcionarán

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

Иōҳ

#5
Se pueden hacer muchas cosas jeje, hay formas que desde ring3 puedes inhabilitar los soft breakpoints por ejemplo ejecutando instrucciones privilegiadas (ring0) cambiando la dirección contenida en el vector  de la IDT de la INT3, jeje..

Agregando a lo que te dijo Under para los BPM también puedes usar la api VirtualQuery + la struct MEMORY_BASIC_INFORMATION, para saber los permisos actuales de las páginas de memorias :).


Saludos,
Nox.
Eres adicto a la Ing. Inversa? -> www.noxsoft.net


Karman

sin entrar al modo kernel... en modo usuario tenes varias formas, algunas ya descriptas... para los bp comunes tenes la opción de generar un hash del code y cada x tiempo comprobar que sea igual, para los MBP puedes comprobar (como ya dijeron) los permisos sobre los espacios de memoria, y para los HBP comprobar el registro CONTEXT, fuera de eso, creo que lo mejor para evitar intrusiones es evitar que ocurran (es mejor prevenir que curar... :P ) por lo que el tema sería evitar que puedan abrir tu programa con un depurador...

S2