Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Truco Antidebug con NtSetInformationThread no funciona (https://www.clubdelphi.com/foros/showthread.php?t=94709)

aguml 01-06-2020 12:36:00

Truco Antidebug con NtSetInformationThread no funciona
 
Hola amigos, estoy intentando añadir ese truco a un proyecto mio pero no detecta el debugger nunca. Estoy en Windows 10 x64 y lo tengo así:
Código PHP:

bool __fastcall TMyThread2::QueryNtSetInformationThread(void)
{
    
HMODULE NtDll;
    
NTSTATUS ntStat;
    
bool check false;
    
bool retval=false;
    
int ThreadHideFromDebugger 0x11;

    
NtDll LoadLibrary(L"ntdll.dll");
    
LONG (WINAPI *NtSetInformationThread)(HANDLE ThreadHandleULONG ThreadInformationClassPVOID ThreadInformationULONG ThreadInformationLength);
    
LONG (WINAPI *NtQueryInformationThread)(HANDLE ThreadHandleULONG ThreadInformationClassPVOID ThreadInformationULONG ThreadInformationLengthPULONG ReturnLength);
    *(
FARPROC *)&NtSetInformationThread GetProcAddress(NtDll"NtSetInformationThread");
    *(
FARPROC *)&NtQueryInformationThread GetProcAddress(NtDll"NtQueryInformationThread");

    
//invalid parameter
    
ntStat NtSetInformationThread(NULLThreadHideFromDebugger, &checksizeof(ULONG));
    if (
ntStat >= 0//it must fail
    
{
        
//Detectado con metodo 1
        
return true;
    }

    
//invalid handle
    
ntStat NtSetInformationThread((HANDLE)0xFFFFFThreadHideFromDebugger00);
    if (
ntStat >= 0//it must fail
    
{
        
//Detectado con metodo 2
        
return true;
    }

    
//En x32 si estamos depurandolo se cerrará directamente el proceso
    
ntStat NtSetInformationThread(NULLThreadHideFromDebugger00);

    
//only available >= VISTA
    
ntStat NtQueryInformationThread(NULLThreadHideFromDebugger, &checksizeof(bool), 0);
    if (
ntStat >= 0)
    {
        if (!
check)
        {
            
//Detectado con metodo 4
            
return true;
        }
        else
        {
            return 
false;
        }
    }
    return 
retval;


¿Que hago mal?

aguml 01-06-2020 15:18:47

El original era así:
Código PHP:

bool __fastcall TMyThread2::QueryNtSetInformationThread(void)
{
    
HMODULE NtDll;
    
NTSTATUS ntStat;
    
bool check false;
    
bool retval=false;
    
int ThreadHideFromDebugger 0x11;

    
NtDll LoadLibrary(L"ntdll.dll");
    
LONG (WINAPI *NtSetInformationThread)(HANDLE ThreadHandleULONG ThreadInformationClassPVOID ThreadInformationULONG ThreadInformationLength);
    
LONG (WINAPI *NtQueryInformationThread)(HANDLE ThreadHandleULONG ThreadInformationClassPVOID ThreadInformationULONG ThreadInformationLengthPULONG ReturnLength);
    *(
FARPROC *)&NtSetInformationThread GetProcAddress(NtDll"NtSetInformationThread");
    *(
FARPROC *)&NtQueryInformationThread GetProcAddress(NtDll"NtQueryInformationThread");

    
//invalid parameter
    
ntStat NtSetInformationThread(NULLThreadHideFromDebugger, &checksizeof(ULONG));
    if (
ntStat >= 0//it must fail
    
{
        
//Detectado con metodo 1
        
return true;
    }

    
//invalid handle
    
ntStat NtSetInformationThread((HANDLE)0xFFFFFThreadHideFromDebugger00);
    if (
ntStat >= 0//it must fail
    
{
        
//Detectado con metodo 2
        
return true;
    }

    
//En x32 si estamos depurandolo se cerrará directamente el proceso
    
ntStat NtSetInformationThread(NULLThreadHideFromDebugger00);

    if (
ntStat >= 0)
    {
        
//only available >= VISTA
        
ntStat NtQueryInformationThread(NULLThreadHideFromDebugger, &checksizeof(bool), 0);
        if (
ntStat >= 0)
        {
            if (!
check)
            {
                
//Detectado con metodo 4
                
return true;
            }
            else
            {
                return 
false;
            }
        }
    }else{
        
//Detectado por metodo 3
        
return true;
    }

    return 
retval;


Pero siempre me decía que me había detectado con el método 3 aunque no hubiese depurador :confused:


La franja horaria es GMT +2. Ahora son las 04:55:45.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi