一 、对抗动态调试
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;
}