用途:对受混淆保护的原生二进制进行识别、分类与还原,适用于逆向工程、恶意软件分析和 CTF 场景。
主要能力与内容:
- 垃圾代码与不透明谓词:通过 def-use 链判定死代码,用抽象解释、符号执行(如 Z3 证明永真/永假)或动态追踪剔除恒真分支。
- 自修改代码(SMC):常见 XOR 解密循环写回 .text 段,方法是在解密循环结束后下断点、转储已解密内存,再用 IDA/Ghidra 重新分析;也可用 Unicorn 等 CPU 模拟器自动化脱壳。
- 控制流平坦化(CFF):原始顺序块被改写为分发器 switch(state) 结构。可用符号执行(angr/Triton/miasm)、Pin/DynamoRIO 轨迹重建或 IDA 插件 D-810 恢复真实控制流。
- movfuscator:函数只含 mov 指令,借助大型查找表实现运算,可用 demovfuscator、轨迹加污点分析或符号执行还原。
- VM 保护(VMProtect/Themida/Code Virtualizer):典型入口为 pushad/pushfd 后进入 VM 调度;需定位调度器、提取 handler 表并映射每条字节码操作。手段包括手工映射、轨迹录制(REVEN/Pin)、符号提升与模式匹配;VMProtect 还在调度器中加入不透明谓词、handler 变异和嵌套 VM。
- 字符串加密:XOR 循环、栈字符串、RC4/AES 或自定义编码,可通过 hook/模拟解密函数或离线提取密钥恢复。
- 导入隐藏:经 PEB 遍历与哈希比对解析 API,常见哈希有 ROR13、djb2、CRC32、FNV-1a,可先识别算法再建立哈希到 API 名映射。
- 反汇编干扰:重叠指令、错位跳转、push+ret 跳转、异常流和 call+add [esp] 等技巧,可在 IDA 中撤销定义、在正确偏移重新反汇编。
使用方式:先判断能否运行——可运行则优先动态分析(API 断点、轨迹追踪、运行时转储);不可运行则据代码形态走静态路线,结合上述决策树选择工具。工具链包括 IDA Pro/Hex-Rays、Ghidra、D-810、miasm、Triton、REVEN、demovfuscator、x64dbg、Unicorn、Capstone、FLIRT、Binary Ninja。
限制:资料未提供各工具的具体版本要求、安装命令、收费与授权信息,也未给出针对特定保护器的完整操作步骤;实际效果取决于目标保护实现。