
Una biblioteca anti-depuración de espacio de usuario en C/C++ sigilosa y totalmente basada en llamadas al sistema para Windows, diseñada para proteger el software de la ingeniería inversa
antidbg es una librería anti-depuración en modo usuario para x64 en Windows, diseñada para proteger software contra la depuración.
Considera la librería como una base para tu protección anti-depuración, no como tu única defensa.
La librería es:
El modelo de amenaza asume que un depurador puede interceptar software protegido por este sistema de protección desde cualquier nivel de privilegio, siendo las detecciones menos efectivas cuanto mayor sea el nivel de privilegio.
Este software está endurecido para eludir la interceptación trivial con CPL > 0, mediante:
RAX detectando y/o sobrescribiendo callbacks de instrumentación no legítimos..text monitorizadas mediante una comparación en disco vs en memoria.VEH, SEH, LPTOP_LEVEL_EXCEPTION_FILTER) y breakpoints de software.PAGE_GUARD.TLS callbacks contra la conexión de depuradores, realizando inspección de la dirección de inicio de hilos.DbgBreakPoint y DbgUiRemoteBreakin, para hacer crashear el proceso o retornar.Si la única forma de hacer una comprobación es usar una función exportada no invocable por syscall, la función en cuestión es revertida manualmente y reconstruida para ejecutarse en el espacio de direcciones del módulo del hilo de protección. Todas las estructuras de memoria en modo usuario son recorridas con introspección directa de memoria en lugar de usar APIs.
Las rutinas de protección dejan explícitamente algunas rutas de ejecución sin protección contra hooks en modo usuario, actuando como honeypots de memoria. Se usan para comparación de estado y para confundir a atacantes.
Las rutinas de protección se ejecutan de forma pseudoaleatoria. La entropía se decide con puro ASLR basado en hardware, comportamiento de la pila y un poco de matemáticas; sin llamar al kernel, usando APIs en modo usuario, o emitiendo instrucciones de salida condicional o incondicionalmente por hipervisores.
Cuando se detecta una violación de seguridad, el sistema de protección hace crashear el proceso actual invocando INT 29h con STATUS_SXS_EARLY_DEACTIVATION, eludiendo todos los manejadores de excepciones. En algunos casos, también encola un APC al kernel para terminar el proceso actual.
Encontradas en el punto de entrada principal (abdg.c) de esta librería, explicadas en orden.
Explicaciones resumidas; una detección específica puede realizar más comprobaciones extra/sub-comprobaciones de las que se explican aquí.
Puedes encontrar más código fuente de otros conceptos de detección en la carpeta antidebug\archived.