
Una libreria anti-debugging userland C/C++ furtiva e completamente basata su syscall per Windows, progettata per proteggere il software dal reverse engineering
antidbg è una libreria anti-debugging user-mode x64 per Windows, progettata per proteggere il software dal debugging.
Considera la libreria come una base per la tua protezione anti-debugging, non come la tua unica difesa.
La libreria è:
Il modello di minaccia presuppone che un debugger possa intercettare il software protetto da questo sistema di protezione da qualsiasi livello di privilegio, essendo le rilevazioni meno efficaci quanto più alto è il livello di privilegio.
Questo software è rafforzato per aggirare l'intercettazione banale con CPL > 0, tramite:
RAX rilevando e/o sovrascrivendo callback di strumentazione non legittime..text monitorate effettuando un confronto on-disk vs in-memory.VEH, SEH, LPTOP_LEVEL_EXCEPTION_FILTER) e i breakpoint software.PAGE_GUARD.TLS callbacks dall'aggancio del debugger, eseguendo l'ispezione dell'indirizzo di avvio dei thread.DbgBreakPoint e DbgUiRemoteBreakin, per mandare in crash il processo o ritornare.Se l'unico modo per eseguire un controllo è utilizzare una funzione esportata non richiamabile via syscall, la funzione in questione viene manualmente reverse-engineered e ricostruita per essere eseguita nello spazio di indirizzi del modulo del thread di protezione. Tutte le strutture di memoria user-mode vengono attraversate con introspezione diretta della memoria invece di usare API.
Le routine di protezione lasciano esplicitamente alcuni percorsi di esecuzione senza protezione contro gli hook user-mode, fungendo da honeypot di memoria. Vengono utilizzati per il confronto dello stato e per confondere gli attaccanti.
Le routine di protezione vengono eseguite in modo pseudo-casuale. L'entropia è decisa con puro ASLR basato su hardware, comportamento dello stack e un po' di matematica; senza chiamare il kernel, usando API user-mode, o emettendo istruzioni di uscita condizionali o incondizionali da parte di hypervisor.
Quando viene rilevata una violazione di sicurezza, il sistema di protezione manda in crash il processo corrente invocando INT 29h con STATUS_SXS_EARLY_DEACTIVATION, aggirando tutti gli handler delle eccezioni. In alcuni casi, accoda anche un APC al kernel per terminare il processo corrente.
Trovate nell'entrypoint principale (abdg.c) di questa libreria, spiegate in ordine.
Spiegazioni sintetizzate; una specifica rilevazione può eseguire più controlli extra/sub rispetto a quanto spiegato qui.
Puoi trovare più codice sorgente di altri concetti di rilevazione nella cartella antidebug\archived.