1. 项目背景与核心挑战
二进制代码相似性检测这个领域我做了快十年,从最早的x86指令集比对到现在跨架构分析,踩过的坑能写本书。这次要聊的CACompare项目,是我们团队在解决跨架构二进制比对问题时趟出来的一条实用路线。
跨架构分析的痛点太明显了——当你手头有个ARM架构的IoT设备固件,需要判断它是否包含某个x86平台已知恶意代码的功能等价体时,传统方法基本抓瞎。不同指令集、寄存器结构、调用约定这些硬件层面的差异,直接把大多数基于文本匹配或控制流图的方法打回原形。
我们早期尝试过用反编译成伪代码再比对,但不同架构的反编译结果差异大到没法看。后来转向中间表示(IR)层,发现LLVM-IR这类通用表示确实能抹平部分架构差异,但性能开销和精度损失又成了新问题。CACompare的核心思路,是在保持二进制原始特征的前提下,通过指令语义等价转换和函数特征蒸馏,构建架构无关的比对模型。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术方案设计解析
2.1 整体架构设计
CACompare的流程管线分为四个阶段:
-
前端解码层:用Capstone引擎处理多架构反汇编,对ARM/Thumb、x86/x64、MIPS等指令集做归一化处理。这里的关键是维护统一的指令属性映射表,比如把所有架构的"数据移动"操作都映射到MOV语义类别。
-
语义抽象层:通过指令语义模板库将原始操作码转换为架构无关的语义描述。例如:
python复制# x86: MOV EAX, 0x10 → 语义描述 { "op": "reg_imm_transfer", "dst": "EAX", "src": {"type": "immediate", "value": 16}, "width": 32 } # ARM: MOV R0, #16 → 相同语义描述 -
函数特征提取:基于控制流图(CFG)和语义流图(SFG)构建混合特征向量。我们独创的"语义敏感度"指标能自动识别函数中的关键指令节点,比如加密函数中的S盒访问模式。
-
相似度计算引擎:采用改进的Needleman-Wunsch算法进行图结构对齐,配合基于机器学习的权重调整模型。实测在OpenSSL的md5实现跨架构比对
