心血来潮,琢磨找找新壁纸,习惯黑色系列,部分区域彩色即可,桌面需要放置图标,其他色系作壁纸,图标就不清晰了。

盯着上面的汇编代码思考一波,没看懂,尝试扔给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,因为如果我们跟踪代码,这个标志位会被调试器清零,所以我们看不到这个异常。

实际测试时发现,如果直接步过检测调试的函数,那么调试不会被检测到,只有步入检测函数执行时才会检测到(资料查询,尚未实际验证)

参考资料

中文的相关资料,都是基于网站的英文稿子翻译,站点科普了很多种反调试的技术。