- UID
- 1
- 精华
- 积分
- 76361
- 威望
- 点
- 宅币
- 个
- 贡献
- 次
- 宅之契约
- 份
- 最后登录
- 1970-1-1
- 在线时间
- 小时
|
原帖网址:http://www.vbasm.com/thread-8294-1-1.html
原作者:@美俪女神
转载请注明出处。
直接上代码,主要原理是根据处理异常的时间长短判断是否存在调试器。
在有调试器的情况下,异常处理的时间远比正常情况要长。- #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:}
不过在产品上实现反调试,当然不需要我们费劲: |
|