如何比较两个 C 函数的相似度
1. 二进制层面比较
这是最直接但最不健壮的方法,通常只作为初步筛选
- 字符串哈希 (MD5/SHA-256):这是最简单的方法。将函数编译后的机器码提取出来,然后计算其哈希值。
- 优点:速度快,可以快速识别完全相同的函数
- 缺点:非常脆弱。任何微小的改动,比如插入一条
NOP
指令、改变局部变量的顺序,都会导致哈希值完全不同。因此,它无法检测代码克隆或相似的代码
- 模糊哈希 (Fuzzy Hashing):与传统的哈希算法不同,模糊哈希(如 ssdeep 或 TLSH)能够生成一个代表文件或代码块结构特征的哈希值。两个哈希值之间的距离可以用来衡量它们的相似度
- 优点:能够容忍代码中的小改动,可以发现有细微变化的函数
- 缺点:对于较大的代码重构(如改变控制流),效果不佳