He probado esto:
Código PHP:
DWORD64 __fastcall THiloDebugger::GetTEB( HANDLE hThread)
{
#ifndef THREAD_BASIC_INFORMATION
#define SIZE_NTSTATUS 4
#define SIZE_PADDING 4
#define SIZE_CLIENT_ID 16
#define SIZE_KAFFINITY 8
#define SIZE_KPRIORITY 4
typedef DWORD NTSTATUS;
typedef __int128 CLIENT_ID;
typedef DWORD KPRIORITY;
typedef struct _THREAD_BASIC_INFORMATION
{
NTSTATUS ExitStatus;
PVOID TebBaseAddress;
CLIENT_ID ClientId;
KAFFINITY AffinityMask;
KPRIORITY Priority;
KPRIORITY BasePriority;
} THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
#endif
typedef NTSTATUS (WINAPI *PNTQIT)(HANDLE, THREADINFOCLASS, PVOID, ULONG, PULONG);
PNTQIT pNtQueryInformationThread;
THREAD_BASIC_INFORMATION infoBuff={0};
HMODULE hMod = LoadLibrary(L"Ntdll.dll");
pNtQueryInformationThread = (PNTQIT) GetProcAddress(hMod,"NtQueryInformationThread");
NTSTATUS stat = pNtQueryInformationThread(hThread, (THREADINFOCLASS) 0, &infoBuff, sizeof(THREAD_BASIC_INFORMATION), NULL);
if (!NT_SUCCESS(stat)) {
ShowMessage(WideString().sprintf(L"ERROR (code 0x%8x): No se pudo obtener la informacion del TEB del proceso. \n", stat));
return 0;
}
return (DWORD64)infoBuff.TebBaseAddress;
}
Aparentemente funciona pero no se si lo que obtengo es lo que busco o está obteniendo otra cosa:
Código:
infoBuff { 0x00000103, :0000000000336000, 168750814786294978186064, 0x000000000000000f, 0x00000009, 0x00000000 }
infoBuff.ExitStatus 259 (0x00000103)
infoBuff.TebBaseAddress :0000000000336000
infoBuff.ClientId 168750814786294978186064
infoBuff.AffinityMask 15 (0x000000000000000f)
infoBuff.Priority 9 (0x00000009)
infoBuff.BasePriority 0 (0x00000000)
Lo que me extraña es la TebBaseAddress ¿no tendria que estar dentro del header del programa? Ademas en cada ejecucion me da un valor diferente
Pienso que esto no vale