Я пытаюсь внедрить некоторую базовую защиту отладчика, чтобы дети не могли использовать простые приемы для обратного инжиниринга моего программного обеспечения.Хотя эти простые меры легко обойти, они, по крайней мере, не допустят неосведомленности.Следующий код взят из онлайнового учебного пособия, и я хотел бы узнать ваше мнение относительно того, безопасно ли это использовать в рабочем коде?Я колеблюсь из-за того факта, что эта функция недокументирована Microsoft и, таким образом, может или не может полностью перейти с одной версии Windows на другую.Последнее, что я хочу, - чтобы мое приложение начало сбой в Windows 8, 9 и т. Д., Поскольку подпись функции неверна.
Код выглядит следующим образом:
// HideThread will attempt to use
// NtSetInformationThread to hide a thread
// from the debugger, Passing NULL for
// hThread will cause the function to hide the thread
// the function is running in. Also, the function returns
// false on failure and true on success
inline bool HideThread(HANDLE hThread)
{
typedef NTSTATUS (NTAPI *pNtSetInformationThread)
(HANDLE, UINT, PVOID, ULONG);
NTSTATUS Status;
// Get NtSetInformationThread
pNtSetInformationThread NtSIT = (pNtSetInformationThread)
GetProcAddress(GetModuleHandle( TEXT("ntdll.dll") ),
"NtSetInformationThread");
// Shouldn't fail
if (NtSIT == NULL)
return false;
// Set the thread info
if (hThread == NULL)
Status = NtSIT(GetCurrentThread(),
0x11, // HideThreadFromDebugger
0, 0);
else
Status = NtSIT(hThread, 0x11, 0, 0);
if (Status != 0x00000000)
return false;
else
return true;
}
Это безопасноиспользовать?
С уважением,
Philip Bennefall