跳至内容

c3n1g's Docs

Diff

8
  • 2.3 语义匹配与符号执行
  • 1.1 什么是二进制Diff
  • 1.2 历史发展
  • 1.3 为什么需要二进制Diff
  • 1.4 核心应用场景
  • 1.5 术语与对比
  • 2.1 函数匹配算法
  • 2.2 结构匹配与图算法
View Categories
  • 首页
  • 文档
  • Binary
  • Diff
  • 1.4 核心应用场景

1.4 核心应用场景

c3n1g
更新 2026年4月4日

< 1 min read

1.4.1 漏洞分析与补丁审计 #

典型工作流程 #

┌────────────────────────────────────────────────────────────┐
│                    漏洞分析工作流                          │
├────────────────────────────────────────────────────────────┤
│  1. 获取补丁前后版本                                       │
│     ├─ Windows: 提取KB更新包                               │
│     ├─ Linux: git diff 或发行版补丁文件                    │
│     └— 厂商安全公告链接                                    │
│                                                            │
│  2. 加载到分析平台                                         │
│     ├— IDA Pro + BinDiff                                   │
│     ├— Ghidra + 相关插件                                   │
│     └— Binary Ninja + Diaphora                             │
│                                                            │
│  3. 执行Diff分析                                           │
│     ├— 函数级匹配                                          │
│     ├— 基本块级比较                                        │
│     └— 指令级差异定位                                      │
│                                                            │
│  4. 结果解读                                               │
│     ├— 识别修改的函数                                      │
│     ├— 分析修改意图                                        │
│     └— 推导漏洞根因                                        │
│                                                            │
│  5. 漏洞利用开发                                           │
│     ├— 构造触发条件                                        │
│     ├— 编写PoC                                             │
│     └— 开发检测规则                                        │
└────────────────────────────────────────────────────────────┘

案例分析:CVE-2021-34527 (PrintNightmare) #

补丁前代码                          补丁后代码
┌─────────────────────────┐        ┌─────────────────────────┐
│ RpcAddPrinterDriverEx() │        │ RpcAddPrinterDriverEx() │
│ {                       │        │ {                       │
│   // 无权限检查         │        │   // 新增权限验证       │
│   LoadDriver(path);     │   →    │   if (!CheckAccess())   │
│   // 直接加载驱动       │        │     return ERROR;       │
│ }                       │        │   LoadDriver(path);     │
└─────────────────────────┘        │ }                       │
                                   └─────────────────────────┘
通过BinDiff快速定位新增的权限检查代码

1.4.2 恶意软件比对与家族分析 #

应用目标 #

  1. 变种检测
    • 识别已知恶意软件的变种
    • 绕过简单混淆
    • 建立家族特征库
  2. 演化追踪
    • 重构恶意软件发展历史
    • 识别作者/组织特征
    • 预测未来演化方向
  3. 威胁情报
    • 关联不同攻击事件
    • 归因分析
    • 共享指标(IoC)

1.4.3 补丁差异分析 #

不同平台的补丁分析挑战 #

平台补丁格式分析工具主要挑战
Windows.msu/.cabIDA+BinDiff闭源、优化复杂
Linux源码patchdiff/Ghidra编译选项多样
AndroidOTA镜像jadx/IDA逆向复杂
iOSIPSWGhidra加密、混淆
IoT固件厂商格式多种工具架构多样

1.4.4 逆向工程辅助 #

二进制diff在逆向中的作用 #

逆向工程工作流
        │
        ├── 初步分析
        │   └── 识别已知库函数
        │       通过对比标准库二进制
        │
        ├── 理解代码演化
        │   └── 比较不同版本理解功能
        │
        ├── 简化分析
        │   └── 复用已分析版本的注释
        │       自动迁移函数名、注释
        │
        └── 协作分析
            └── 合并多人分析结果

1.4.5 CTF竞赛应用 #

常见题型 #

题目类型:
├─ 找不同:比较两个程序找出隐藏flag
├─ 补丁分析:理解补丁逻辑获取flag
└─ 版本比较:对比新旧版本找到漏洞点

1.4.6 供应链安全 #

应用场景 #

软件供应链安全分析
│
├── 开源组件识别
│   ├── 检测使用的开源库
│   ├── 判断版本号
│   └── 发现已知漏洞
│
├── 许可证合规
│   ├── 检测GPL等传染性许可证
│   ├── 代码复用检测
│   └── 合规报告生成
│
└── 来源追溯
    ├── 识别代码来源
    ├── 建立SBOM(软件物料清单)
    └── 风险评估
1.3 为什么需要二进制Diff1.5 术语与对比
内容目录
  • 1.4.1 漏洞分析与补丁审计
    • 典型工作流程
    • 案例分析:CVE-2021-34527 (PrintNightmare)
  • 1.4.2 恶意软件比对与家族分析
    • 应用目标
  • 1.4.3 补丁差异分析
    • 不同平台的补丁分析挑战
  • 1.4.4 逆向工程辅助
    • 二进制diff在逆向中的作用
  • 1.4.5 CTF竞赛应用
    • 常见题型
  • 1.4.6 供应链安全
    • 应用场景
© 2026 c3n1g's Docs • Built with GeneratePress