- UID
- 1
- 精华
- 244
- 积分
- 75929
- 威望
- 743 点
- 宅币
- 24239 个
- 贡献
- 46222 次
- 宅之契约
- 0 份
- 最后登录
- 2024-4-23
- 在线时间
- 2297 小时
- QQ
用户组: 管理员
一只技术宅
- UID
- 1
- 精华
- 244
- 威望
- 743 点
- 宅币
- 24239 个
- 贡献
- 46222 次
- 宅之契约
- 0 份
- 在线时间
- 2297 小时
- 注册时间
- 2014-1-26
|
原帖网址: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:}
不过在产品上实现反调试,当然不需要我们费劲: |
|