使用异常
Closehandle
如果给CloseHandle()函数一个无效句柄作为输入参数,在无调试器时,将会返回一个错误代码,而有调试器存在时,
将会触发一个EXCEPTION_INVALID_HANDLE (0xc0000008)的异常。
bool getdebebugbyCloseHandle()//返回true说明有OD
{
__try
{
CloseHandle((HANDLE)0x00001234);
return false;
}
__except(1)
{
return true;
}
}
//必须先于程序执行 TLS EPO 窗口回调等等
void getdebugbyOEP()
{
IMAGE_DOS_HEADER*dos_head=(IMAGE_DOS_HEADER*)GetModuleHandle(NULL);
PIMAGE_NT_HEADERS32 nt_head=(PIMAGE_NT_HEADERS32)((DWORD)dos_head+(DWORD)dos_head->e_lfanew);
BYTE*OEP=(BYTE*)(nt_head->OptionalHeader.AddressOfEntryPoint+(DWORD)dos_head);
for(unsigned long index=0;index<200;index++)
{
if(OEP[index]==0xcc)
{
ExitProcess(0);
}
}
}
GetWindowLongA 获取窗口样式
OD的窗口样式出卖了它
代码: