厂商发了安全更新但公告只写"修复了一个远程代码执行",要搞清楚改了什么,就得做补丁比对。
基本流程:
- 拿到补丁前后两个版本的二进制。 Windows 上从 MSU 里解
.msu→.cab→ 具体的 DLL;注意要取同一架构同一语言。 - 函数级比对。 BinDiff 或 Diaphora,把两边的函数按控制流图和调用关系配对。
- 看"相似但不相同"的函数。 完全相同的忽略,全新的通常是重构。真正有意思的是相似度 0.9 左右的——改了一点点。
- 定位改动。 多数安全补丁的形态很固定:多了一个边界检查、把
int换成size_t、调整了分配大小的计算顺序。
第 3 步是关键。一次补丁可能改几百个函数,绝大多数是无关的,得靠经验筛。
有个反直觉的点:改动越小的函数越值得看。大改通常是功能迭代,安全修复往往就是加一行判断。
你们做 diff 用什么?Diaphora 的 SQL 查询我觉得比 BinDiff 的 UI 好用,但上手更慢。