心血来潮,琢磨找找新壁纸,习惯黑色系列,部分区域彩色即可,桌面需要放置图标,其他色系作壁纸,图标就不清晰了。
盯着上面的汇编代码思考一波,没看懂,尝试扔给AI
,解释了指令,没有解释场景,必然是某个特殊场景用到的指令,常规代码不是这样的。
AI
此时不如搜索引擎了,汇编的知识储备不足。
壁纸
汇编代码
PUSHFD
MOV DWORD PTR [ESP],0X100
POPFD
实际应用场景
bool IsDebugged()
{
__try
{
__asm
{
pushfd
mov dword ptr [esp], 0x100
popfd
nop
}
return true;
}
__except(GetExceptionCode() == EXCEPTION_SINGLE_STEP
? EXCEPTION_EXECUTE_HANDLER
: EXCEPTION_CONTINUE_EXECUTION)
{
return false;
}
}
解释说明
TrapFlag
是标志寄存器中的一个标志位,当这个标志位被设置时,会抛出异常SINGLE_STEP
,因为如果我们跟踪代码,这个标志位会被调试器清零,所以我们看不到这个异常。
实际测试时发现,如果直接步过检测调试的函数,那么调试不会被检测到,只有步入检测函数执行时才会检测到(资料查询,尚未实际验证)
参考资料
中文的相关资料,都是基于网站的英文稿子翻译,站点科普了很多种反调试的技术。