|
直接上代码,主要原理是根据处理异常的时间长短判断是否存在调试器。
在有调试器的情况下,异常处理的时间远比正常情况要长。
- #include <stdio.h>
- #include <Windows.h>
- int main()
- {
- DWORD t1,t2;
- //测试GetTickCount的有效性,如果无效则表示发现调试器
- t1=GetTickCount();
- Sleep(500);
- t2=GetTickCount();
- if(t2-t1<400)
- puts("FIND DBG\n");
- else
- puts("NO DBG\n");
- //故意引发异常查找调试器
- t1=GetTickCount();
- __try
- {
- memcpy((PVOID)1234,(PVOID)5678,90);
- //DebugBreak();
- }
- __except(1)
- {
- t2=GetTickCount();
- puts("goto __except!\n");
- }
- if(t2-t1>10)
- puts("FIND DBG");
- else
- puts("NO DBG");
- getchar();
- return 0;
- }
复制代码 这东西在WIN32上当然过不了SOD,但是在WIN64上很好用。{:soso_e113:}
不过在产品上实现反调试,当然不需要我们费劲: |
|