C++ Race condition anti-anti-debug bypass

✊Rot Front✊
Пользователь
Статус
Оффлайн
Регистрация
2 Июл 2020
Сообщения
132
Реакции[?]
257
Поинты[?]
85K
Всем привет.
Помимо обычным
Пожалуйста, авторизуйтесь для просмотра ссылки.
для обхода 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):

Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Сверху Снизу