
Скрытная библиотека антиотладки для пользовательского режима Windows на C/C++, полностью построенная на системных вызовах и предназначенная для защиты программного обеспечения от обратной разработки
antidbg — это пользовательская (user-mode) библиотека антиотладки для Windows x64, предназначенная для защиты программного обеспечения от отладки.
Рассматривайте библиотеку как основу для вашей антиотладочной защиты, а не как единственную линию обороны.
Библиотека:
Модель угроз предполагает, что отладчик может перехватить программное обеспечение, защищённое этой системой защиты, с любого уровня привилегий, при этом обнаружение становится менее эффективным с повышением уровня привилегий.
Это программное обеспечение усилено для обхода тривиального перехвата на уровне CPL > 0 путём:
RAX путём обнаружения и/или перезаписи нелегитимных callback-ов инструментирования..text путём сравнения on-disk vs in-memory.VEH, SEH, LPTOP_LEVEL_EXCEPTION_FILTER) и программных точек останова.PAGE_GUARD.TLS callbacks от присоединения отладчика, выполняя проверку стартового адреса потока.DbgBreakPoint и DbgUiRemoteBreakin, для краха процесса или возврата.Если единственный способ выполнить проверку — использовать не вызываемую через системный вызов экспортируемую функцию, эта функция вручную реверс-инжинирится и реконструируется для выполнения в адресном пространстве модуля защитного потока. Все пользовательские структуры памяти обходятся с помощью прямой интроспекции памяти вместо использования API.
Защитные процедуры намеренно оставляют некоторые пути выполнения без защиты от пользовательских хуков, действуя как ловушки памяти. Они используются для сравнения состояний и для запутывания атакующих.
Защитные процедуры выполняются псевдослучайно. Энтропия определяется на основе чистого аппаратного ASLR, поведения стека и небольшой доли математики; без вызова ядра, использования пользовательских API или выполнения условно или безусловно завершающих инструкций гипервизорами.
При обнаружении нарушения безопасности система защиты вызывает крах текущего процесса путём вызова INT 29h с STATUS_SXS_EARLY_DEACTIVATION, обходя все обработчики исключений. В некоторых случаях она также ставит в очередь APC к ядру для завершения текущего процесса.
Находятся в главной точке входа (abdg.c) этой библиотеки, описаны по порядку.
Краткие пояснения; конкретное обнаружение может выполнять больше дополнительных/подпроверок, чем описано здесь.
Больше исходного кода других концепций обнаружения вы можете найти в папке antidebug\archived.