如何识别恶意程序汇编代码中0CCh比较逻辑对应的反调试技术?
反调试手段判定结论
指令逻辑拆解
- 笔误修正:第一条指令
move dl, 0CCh为x86汇编书写误差,实际是mov dl, 0CCh,作用是将值0xCC存入dl寄存器 - 后续指令通过
mov eax, offset _main获取main函数在内存中的起始地址,再执行内存比对指令cmp [eax], dl - 分支逻辑:若main函数起始地址处的内存值等于
0xCC,直接触发theend流程终止程序运行
对应反调试技术原理
这是INT3软件断点检测类反调试手段:
调试器下软件断点时,会临时修改断点所在地址的原始机器码,写入0xCC(x86架构的INT3中断指令,用于触发调试器捕获中断)。这段代码就是直接读取main函数入口的首个字节,检查是否被调试器篡改,一旦判定处于调试状态就立刻终止程序,避免被逆向分析。
常规检测绕过思路
- 可在调试时提前备份main函数入口的原始字节,等这段比对逻辑执行完成后,再恢复断点对应的篡改字节
- 也可直接对这段
cmp及后续的条件跳转指令做NOP填充,跳过调试判定逻辑
内容的提问来源于stack exchange,提问作者bittu
相关产品推荐
相关产品推荐

