恶意样本给出函数家族的 md5,如何进行分类
1. 样本预处理
首先,我们需要拿到恶意样本文件。为了确保分析的安全性,这些样本通常在沙箱环境或隔离的虚拟机中运行和处理
2. 静态分析与函数提取
这是最关键的一步。我们需要使用专业的反汇编或反编译工具(如 IDA Pro、Ghidra、Binary Ninja 等)对样本进行静态分析,提取其中的所有函数
在提取过程中,我们要确保做到以下几点:
- 识别所有函数: 准确地识别出样本中所有的函数入口点和函数体
- 清理和标准化: 许多编译器会在函数中插入一些无用的代码(如栈帧设置、调试信息等)。为了确保哈希的一致性,我们需要清理这些与核心逻辑无关的代码。例如,可以使用工具去除 NOP(空操作)指令、对齐填充等
- 标准化函数代码: 即使是相同的逻辑,不同的编译器或编译选项也会产生略有差异的机器码。为了让哈希值保持一致,我们需要对函数进行标准化。这通常涉及将函数体转化为一种更抽象、更稳定的表示形式,比如:
- 代码归一化(Code Normalization): 替换寄存器名称、删除地址无关的指令,使得哈希值不受编译地址的影响
- 指令序列哈希: 只对核心的指令序列进行哈希,忽略一些可变的部分