Исходник Race condition via anti-anti-debug tool bypass

Ahora57

Участник
Автор темы
4
29
Всем привет.
Помимо обычным злоупотреблением багов для обхода anti-anti-debug tool можно просто использовать состояние гонки, чтобы просто обойти их!
Объяснение:
Многие anti-anti-debug tool's вызывают оригинальную функцию и потом с ней что-то делают.
Вот пример кода TitanHide с ProcessDebugPort:

C++:
static NTSTATUS NTAPI HookNtQueryInformationProcess(
    IN HANDLE ProcessHandle,
    IN PROCESSINFOCLASS ProcessInformationClass,
    OUT PVOID ProcessInformation,
    IN ULONG ProcessInformationLength,
    OUT PULONG ReturnLength)
{
    NTSTATUS ret = Undocumented::NtQueryInformationProcess(ProcessHandle, ProcessInformationClass, ProcessInformation, ProcessInformationLength, ReturnLength);
    {
        if(NT_SUCCESS(ret) &&
        ProcessInformation &&
        ProcessInformationClass != ProcessBasicInformation) //prevent stack overflow
        {
            else if(ProcessInformationClass == ProcessDebugPort)
            {
                if(Hider::IsHidden(pid, HideProcessDebugPort))
                {
                    Log("[TITANHIDE] ProcessDebugPort by %d\r\n", pid);
                    __try
                    {
                        BACKUP_RETURNLENGTH();
                   
                        *(ULONG_PTR*)ProcessInformation = 0;
                   
                        RESTORE_RETURNLENGTH();
                    }
                    __except(EXCEPTION_EXECUTE_HANDLER)
                    {
                        ret = GetExceptionCode();
                    }
                }
            }
        }
    }
    return ret;
}
Однако, есть маленький промежуток времени, благодаря которому мы может просто узнать реальный результат функции и мы злоупотребляем этим!
Единственное требование и недостаток :создать поток/потоки, постоянно вызывать функцию и смотреть был ли изменён наш входной буфер на интересующий нас результат.
Пример обнаружение TitanHide(DebugPort & HideThreadHideFromDebugger):
Code
 
Последнее редактирование: