• Я зарабатываю 100 000 RUB / месяц на этом сайте!

    А знаешь как? Я всего-лишь публикую (создаю темы), а админ мне платит. Трачу деньги на мороженое, робуксы и сервера в Minecraft. А ещё на паль из Китая. 

    Хочешь так же? Пиши и узнавай условия: https://t.me/alex_redact
    Реклама: https://t.me/yougame_official

C++ Race condition anti-anti-debug bypass

ANTICHEAT_OBFUSCATE_CODEMARKER
Пользователь
Пользователь
Статус
Оффлайн
Регистрация
2 Июл 2020
Сообщения
140
Реакции
285
Всем привет.
Помимо обычным
Пожалуйста, авторизуйтесь для просмотра ссылки.
для обхода anti-anti-debug tool можно просто использовать состояние гонки, чтобы просто обойти их!
Объяснение:
Многие anti-anti-debug tool's вызывают оригинальную функцию и потом с ней что-то делают.
Вот пример кода TitanHide с ProcessDebugPort:
C++:
Expand Collapse Copy
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):

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