Foros Club Delphi

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

aguml 04-01-2021 08:57:19

Problemas con NtSetInformationThread
 
Buenas, estoy intentando aplicar unos trucos antidebug relacionados con esa Api de Windows pero no consigo que me funcionen.
Tengo esto:
Código PHP:

void __fastcall TForm1::QueryNtSetInformationThread(RETURN_DETECTION *Detection)
{
    
HMODULE NtDll;
    
NTSTATUS ntStat;
    
bool check false;
    
int ThreadHideFromDebugger 0x11;

    
Detection->NtSetInformationThread.isDebugger false;

    
NtDll LoadLibrary(L"ntdll.dll");
    
LONG (WINAPI *NtSetInformationThread)(HANDLE ThreadHandleULONG ThreadInformationClassPVOID ThreadInformationULONG ThreadInformationLength);

    *(
FARPROC *)&NtSetInformationThread GetProcAddress(NtDll"NtSetInformationThread");

    
//invalid parameter
    
ntStat NtSetInformationThread((HANDLE)Application->HandleThreadHideFromDebugger, &checksizeof(ULONG));
    if (
ntStat >= 0//it must fail
    
{
        
Detection->NtSetInformationThread.cadena "Detectado con SetInformationThread con parámetro inválido";
        
Detection->NtSetInformationThread.isDebugger true;
        return;
    }

    
//invalid handle
    
ntStat NtSetInformationThread((HANDLE)0xFFFFFThreadHideFromDebugger00);
    if (
ntStat >= 0//it must fail
    
{
        
Detection->NtSetInformationThread.cadena "Detectado con SetInformationThread con HANDLE inválido";
        
Detection->NtSetInformationThread.isDebugger true;
        return;
    }

    
ntStat NtSetInformationThread((HANDLE)Application->HandleThreadHideFromDebugger00);

    if (
ntStat >= 0)
    {
        
Detection->NtSetInformationThread.cadena "SetInformationThread pasado con éxito";
    }
    else
    {
        
Detection->NtSetInformationThread.cadena "Detectado con SetInformationThread con tercer método";
        
Detection->NtSetInformationThread.isDebugger true;
        return;
    }
}
//--------------------------------------------------------------------------- 

Se supone que cuando falla tiene que ocultar el hilo indicado por el Handle a esta Api del debugger con lo que el debugger falla.
La cosa es que por ejemplo en el primero me da la salida 0x80000002 que se supone que es lo que debe dar pero no oculta el hilo o algo hago mal porque el debugger lo sigue depurando sin problema.
En los 3 casos tendría que tener el mismo comportamiento pero en ninguno hace lo que se espera.

escafandra 06-01-2021 02:33:45

Application->Handle no es el Handle del hilo actual ni el de la aplicación, es Handle de la ventana principal.


Saludos.

aguml 06-01-2021 09:14:47

Probé también usando desde el método del hilo tanto hilo->Handle como this->Handle y no hizo lo que espero que haga. Sobre el handle del proceso ¿Como lo obtengo?

escafandra 06-01-2021 11:56:56

ZwCurrentThread, GetCurrentThread

Saludos.

aguml 06-01-2021 14:30:52

GetCurrentThread la intenté usar y el builder me decía que era una función privada de Clases::TThread o algo así.

escafandra 06-01-2021 14:57:21

Cita:

Empezado por aguml (Mensaje 539617)
GetCurrentThread la intenté usar y el builder me decía que era una función privada de Clases::TThread o algo así.

Es una API de Windows y devuelve -2 (FFFFFFFEh) mientras no lo modifiquen.


Saludos.

aguml 06-01-2021 17:07:45

Pues con -2 tampoco funciona.


La franja horaria es GMT +2. Ahora son las 22:38:54.

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