
Uma biblioteca anti-debugging de userland em C/C++ furtiva e totalmente baseada em syscalls para Windows, projetada para proteger software contra engenharia reversa
antidbg é uma biblioteca anti-depuração em modo usuário x64 para Windows, projetada para proteger software contra depuração.
Considere a biblioteca como uma base para sua proteção anti-depuração, não como sua única defesa.
A biblioteca é:
O modelo de ameaça assume que um depurador pode interceptar software protegido por este sistema de proteção a partir de qualquer nível de privilégio, sendo as detecções menos eficazes quanto maior for o nível de privilégio.
Este software é reforçado para contornar interceptação trivial de CPL > 0, ao:
RAX ao detectar e/ou sobrescrever callbacks de instrumentação não legítimos..text monitoradas ao fazer uma comparação em disco vs em memória.VEH, SEH, LPTOP_LEVEL_EXCEPTION_FILTER) e breakpoints de software.PAGE_GUARD.TLS callbacks contra anexação de depurador, realizando inspeção do endereço de início da thread.DbgBreakPoint e DbgUiRemoteBreakin, para travar o processo ou retornar.Se a única maneira de fazer uma verificação é usar uma função exportada não syscallable, a função em questão é manualmente engenharia reversa e reconstruída para executar no espaço de endereço do módulo da thread de proteção. Todas as estruturas de memória em modo usuário são percorridas com introspecção direta de memória em vez de usar APIs.
As rotinas de proteção explicitamente deixam alguns caminhos de execução sem proteção contra hooks em modo usuário, atuando como honeypots de memória. Eles são usados para comparação de estado e para confundir atacantes.
As rotinas de proteção executam pseudo-aleatoriamente. A entropia é decidida com ASLR puramente baseado em hardware, comportamento de pilha e um pouco de matemática; sem chamar o kernel, usando APIs em modo usuário, ou emitindo instruções de saída condicional ou incondicional por hypervisors.
Quando uma violação de segurança é detectada, o sistema de proteção trava o processo atual invocando INT 29h com STATUS_SXS_EARLY_DEACTIVATION, contornando todos os handlers de exceção. Em alguns casos, também enfileira um APC para o kernel a fim de encerrar o processo atual.
Encontradas no entrypoint principal (abdg.c) desta biblioteca, explicadas em ordem.
Explicações resumidas; uma detecção específica pode realizar mais verificações extras/sub-verificações do que o explicado aqui.
Você pode encontrar mais código-fonte de outros conceitos de detecção na pasta antidebug\archived.