内核前置——反调试技术

那么也是终于遇到了反调试

隐藏线程

在我遇到的moe新生赛中的Desktop中,用到了

1
2
3
4
5
6
7
8
9
10
11
12
typedef DWORD(WINAPI* ZW_SET_INFORMATION_THREAD) (HANDLE, DWORD, PVOID, ULONG);
//相当于创建一个IAT?
VOID DisableDebugEvent(VOID)
{
HINSTANCE hModule; //句柄
ZW_SET_INFORMATION_THREAD ZwSetInformationThread; //隐藏线程函数
hModule = GetModuleHandleA("Ntdll"); //获取Ntdll句柄(隐藏线程函数在Ntdll中
ZwSetInformationThread = (ZW_SET_INFORMATION_THREAD)GetProcAddress(hModule, "ZwSetInformationThread");
//获取函数地址然后给替身
ZwSetInformationThread(GetCurrentThread(), ThreadHideFromDebugger, 0, 0);
//隐藏线程
}
这样的反调试方法,是通过检测当前是否是调试状态,如果是的话就隐藏,隐藏线程之后,调试器就找不到当前调试线程了,解决方法:我想到的是,在调用这个函数之前,对他nop,然后就可以进行了,如果涉及到了tls机制,就删去它