如何检测程序是否被调试
2007-09-11 20:22
337 查看
如何检测程序是否被调试,其实很简单,几行代码就行了,常应用于软件防破解等方面,但对于某些调试器而言无效(比如改进的OllyDbg--OllyICE)。
下面是C+asm代码,大家可以试试。
#include <stdio.h>
#include <conio.h>
int IsDebugged()
{
__asm
{
mov eax, fs: [30h] //获取线程环境块中对应的进程环境块的地址
movzx eax, byte ptr[eax + 2h] //获取BebingDebugged标志的值
or al, al //测试BebingDebugged标志的值
jz FLAG1
mov eax, 1
jmp END
FLAG1:
mov eax, 0 //推荐使用xor eax,eax语句
END:
}
}
int main()
{
if (IsDebugged())
{
printf("有调试器!/n");
}
else
{
printf("无调试器!/n");
}
getch();
return 0;
}
下面是C+asm代码,大家可以试试。
#include <stdio.h>
#include <conio.h>
int IsDebugged()
{
__asm
{
mov eax, fs: [30h] //获取线程环境块中对应的进程环境块的地址
movzx eax, byte ptr[eax + 2h] //获取BebingDebugged标志的值
or al, al //测试BebingDebugged标志的值
jz FLAG1
mov eax, 1
jmp END
FLAG1:
mov eax, 0 //推荐使用xor eax,eax语句
END:
}
}
int main()
{
if (IsDebugged())
{
printf("有调试器!/n");
}
else
{
printf("无调试器!/n");
}
getch();
return 0;
}
相关文章推荐
- 如何检测一个系统中是否有木马程序
- Linux C程序如何检测WIFI无线USB网卡是否可用?
- 如何检测使用Qt Creator制作的程序中的括号是否匹配
- 如何检测使用Qt Creator制作的程序中的括号是否匹配
- 关于“如何检测节点网络中是否存在闭环之java实现”的程序bug修复
- 关于GetActiveObject,如何判断所取得对象的类型、、、可以用来检测某个程序是否运行
- 如何在程序内中取到当前版本号,以及检测是否需要更新程序
- 如何检测系统是否已经运行了相同的程序。
- linux下如何检测程序是否运行并重启
- 如何检测系统是否已经运行了相同的程序
- 检测浏览器是否开启firebug以及如何避免调试信息带来的脚本错误
- Linux C程序如何检测WIFI无线USB网卡是否可用?
- 在运行该程序时如何检测与sql server是否能够连接
- 如何调试服务器上的程序
- 如何使用vs2008 C#程序联合调试C++dll
- 如何调试你的C#程序
- inno安装卸载时检测程序是否正在运行卸载完成后自动打开网页-代码无效
- Android 软件开发之如何使用Eclipse Debug调试程序详解
- ASP程序如何判断是否存某个名字的节点
- 如何调试DX程序