一 、对抗动态调试
1 ring3的OD,
当OD调试一程序时,被调试的程序是被调试器当做自己的一个子线程来进行跟踪。
这时,被调试的程序所对应的进程环境块(Process Environment Block)结构的偏移2H处BeginDebugged标志的值是1,如果没有被调试器加载调试,则其值为0。
反调试代码:
BOOL BeDbg()
{
BOOL bRet = FALSE;
__asm
{
mov eax, fs:[30h]//获取线程环境块中对应的进程环境块的地址
movzx eax, byte ptr [eax + 2h]//获取BeginDebugged标志的值
or al, al//测试BeginDebugged标志的值
jz @NO
jnz @YES
@NO:
mov bRet, 0
@YES:
mov bRet, 1
}
return bRet;
}
1 ring3的OD,
当OD调试一程序时,被调试的程序是被调试器当做自己的一个子线程来进行跟踪。
这时,被调试的程序所对应的进程环境块(Process Environment Block)结构的偏移2H处BeginDebugged标志的值是1,如果没有被调试器加载调试,则其值为0。
反调试代码:
BOOL BeDbg()
{
BOOL bRet = FALSE;
__asm
{
mov eax, fs:[30h]//获取线程环境块中对应的进程环境块的地址
movzx eax, byte ptr [eax + 2h]//获取BeginDebugged标志的值
or al, al//测试BeginDebugged标志的值
jz @NO
jnz @YES
@NO:
mov bRet, 0
@YES:
mov bRet, 1
}
return bRet;
}
本文介绍了一种通过检测进程环境块中的BeginDebugged标志来判断程序是否正在被调试的方法。使用了内联汇编来直接读取该标志的值,从而实现有效的反调试。
633

被折叠的 条评论
为什么被折叠?



