综合来看,如果某片内存的保护属性发生了不应该发生的变化,就说明程序被调试。明 白了这个,我们就可以动手写反调试的代码了: #include <windows.h> main() { static DWORD dwTestData; DWORD dwOldProtect; ::VirtualProtect(&dwTestData,sizeof(DWORD),PAGE_READWRITE,&dwOldPro tect); if (dwOldProtect != PAGE_READWRITE) { ::MessageBox(0,"Find Membreakpoint","Warning",0); } }
先看效果。如果普通运行,或者OD载入,但没对 dwTestData下内存断点,程序正常运
代码很简单。同样是利用了设置内存属性页的 API,不过这里由于是本程序,用的是
|