跳到主要内容

REA 开发指南:静态 · 动态 · 协议流水线

七天实战

对照 REA 子站 Day3–Day5:静态还原、Frida Hook、协议差分。

一、静态分析流水线​

1.1 机器码 → 可理解模型​

Ghidra 的价值在于 P-Code:跨架构统一中间层。你要训练的是:何时相信伪代码、何时必须回看汇编 idioms。

1.2 调用约定速记(x86-64)​

System V (Linux)Win64
整型/指针参数RDI, RSI, RDX, RCX, R8, R9RCX, RDX, R8, R9
返回值RAXRAX
调用者清理多数调用者

看到 xor eax,eax 常是清零返回;lea 常兼做算术。

1.3 控制流与数据流​

  • Xref:字符串 → 代码是最快情报链。
  • Jump table:switch 还原的关键。
  • 结构体重建:连续偏移 ptr+0x08/+0x10 推断字段。
  • CFG 回边:循环;平坦化后调度器变量会破坏直觉,需先找状态分发。

1.4 实战:还原校验/加密函数​

  1. 定位:字符串 / 导入的密码学 API / 高熵常量表
  2. 识别循环与 S-box
  3. Python 重写并与动态输入对照
  4. 写单元测试:已知明文-密文对
# 示意:教学用 XOR 轮函数重写
def toy_crypt(data: bytes, key: bytes) -> bytes:
out = bytearray(data)
for i, b in enumerate(out):
out[i] = b ^ key[i % len(key)]
return bytes(out)

二、动态分析流水线​

2.1 断点选型​

类型原理优点风险
软件断点int3 / 0xCC数量多改代码,易被自检
硬件断点DR 寄存器不改代码通常最多 4 个
内存断点页权限/硬件观察追数据谁改性能/误报
条件断点表达式过滤降噪实现依赖调试器

2.2 Frida 模式​

// 示意:Hook 某 Java 方法返回值(Android)
Java.perform(function () {
var Cls = Java.use('com.example.Auth');
Cls.check.implementation = function (user, pass) {
console.log('user=' + user + ' pass=' + pass);
var ret = this.check(user, pass);
console.log('ret=' + ret);
return ret; // 或按实验需要临时改写
};
});

原则:先观察,再篡改。篡改是为了定位校验粒度,不是为了「通关炫耀」。

2.3 反调试初识​

常见手段:IsDebuggerPresent、父进程检测、时间差、异常陷阱、调试端口。
绕过思路:补丁检测点、Hook 返回值、硬件断点少改代码。细节见最佳实践文档。


三、协议逆向流水线​

3.1 抓包三板斧​

  1. 显示过滤定位会话
  2. Follow TCP Stream 看完整载荷
  3. TLS:SSLKEYLOGFILE 或授权 MITM(注意 Pinning)

3.2 字段推断套路​

信号可能含义
固定头几个字节魔数 / 版本
紧随其后的 2/4 字节随长度变长度字段
尾部 2/4 字节CRC / 校验
改一个输入仅局部字节变该字段语义

3.3 用 construct 描述结构​

from construct import Struct, Int32ul, Bytes, Prefixed

Msg = Struct(
'magic' / Bytes(4),
'length' / Int32ul,
'payload' / Bytes(lambda ctx: ctx.length),
)

四、工程化:把分析变成可交付物​

每次分析至少产出:

  1. 样本清单:哈希、来源、授权说明
  2. 模型文档:模块图、字段表、状态机
  3. 脚本:解析器、重放器、算法重实现
  4. 未知清单:明确还没证明的部分
  5. 风险与边界:合法范围与残留风险

五、推荐工作流(灰盒)​

静态提出假设,动态证伪,网络提供外部行为约束——三者缺一不可。


六、性能与大规模二进制​

  • 先 file/strings/readelf/objdump 轻量侦察
  • 大固件按分区导入
  • 自动化:Ghidra headless + 脚本批量标符号
  • 保持「假设驱动」,避免无目的全库翻阅

七、与 Agent / AI 辅助分析​

可用 LLM 辅助:解释伪代码、生成解析脚本草稿、整理字段表。不可用 LLM 替代:

  • 合法授权判断
  • 对关键安全结论的最终签字
  • 未脱敏样本的上传

把模型当「初级助理」,你仍是主分析师。


深度扩展:开发指南​

原则 1​

在工程流水线工作流里,先建立样本哈希索引与授权编号,再允许任何动态动作;顺序反了会把风险前置。

落地动作 1(开发指南):针对当前对象写一条笔记,含证据链接,并预约下一个九十分钟块的单变量实验,实验标题必须出现自变量名称。

原则 2​

工程流水线的观察阶段要同时记录功能行为与副作用,例如落盘路径、环境变量、网络目的地,副作用经常比主输出更接近真模型。

落地动作 2(开发指南):针对当前对象写一条笔记,含证据链接,并预约下一个九十分钟块的单变量实验,实验标题必须出现自变量名称。

原则 3​

为工程流水线写假设时使用「若…则…否则作废」句式,并把作废条件交给实验设计者(可以是明天的你)。

落地动作 3(开发指南):针对当前对象写一条笔记,含证据链接,并预约下一个九十分钟块的单变量实验,实验标题必须出现自变量名称。

原则 4​

工程流水线差分实验一次只扰动一个自变量,标题里写明自变量,笔记里写明预期字节级变化区域。

落地动作 4(开发指南):针对当前对象写一条笔记,含证据链接,并预约下一个九十分钟块的单变量实验,实验标题必须出现自变量名称。

原则 5​

验证工程流水线时优先独立实现关键算法或解析路径,测试向量来自真实捕获并完成脱敏。

落地动作 5(开发指南):针对当前对象写一条笔记,含证据链接,并预约下一个九十分钟块的单变量实验,实验标题必须出现自变量名称。

原则 6​

工程流水线相关工具选型按不确定性类型:格式、逻辑、运行时、协议四类分别对应不同最小工具,避免堆叠 GUI。

落地动作 6(开发指南):针对当前对象写一条笔记,含证据链接,并预约下一个九十分钟块的单变量实验,实验标题必须出现自变量名称。

原则 7​

在工程流水线交付物中强制出现未知清单与合规扉页;缺一则状态只能是草稿,不能是可评审。

落地动作 7(开发指南):针对当前对象写一条笔记,含证据链接,并预约下一个九十分钟块的单变量实验,实验标题必须出现自变量名称。

原则 8​

工程流水线时间管理使用九十分钟块,块结束必须产生新事实或阻塞票,禁止无产物延长。

落地动作 8(开发指南):针对当前对象写一条笔记,含证据链接,并预约下一个九十分钟块的单变量实验,实验标题必须出现自变量名称。

原则 9​

面对工程流水线卡关,先缩小假设粒度,再切换信息源,再做反证,三板斧用尽才考虑升级重工具。

落地动作 9(开发指南):针对当前对象写一条笔记,含证据链接,并预约下一个九十分钟块的单变量实验,实验标题必须出现自变量名称。

原则 10​

与团队协作工程流水线时统一 IR 与字段表模板,减少方言;评审会议只讨论风险与决策,不现场表演操作。

落地动作 10(开发指南):针对当前对象写一条笔记,含证据链接,并预约下一个九十分钟块的单变量实验,实验标题必须出现自变量名称。

原则 11​

工程流水线与 AI 辅助结合时,模型只可接触脱敏材料,关键结论必须人工签字与向量验证。

落地动作 11(开发指南):针对当前对象写一条笔记,含证据链接,并预约下一个九十分钟块的单变量实验,实验标题必须出现自变量名称。

原则 12​

将工程流水线中可迁移检查表沉淀到个人 Wiki,并给模板打版本号,下个项目直接复用而不是从空白开始。

落地动作 12(开发指南):针对当前对象写一条笔记,含证据链接,并预约下一个九十分钟块的单变量实验,实验标题必须出现自变量名称。

原则 13​

做工程流水线时把「第二产物」当作一等公民:字段表、解析器、回归向量、未知清单,四者缺一就难交接。

落地动作 13(开发指南):针对当前对象写一条笔记,含证据链接,并预约下一个九十分钟块的单变量实验,实验标题必须出现自变量名称。

原则 14​

若工程流水线涉及多版本对象,先建兼容性矩阵,再写解析策略表,避免深层 if-else 泥潭。

落地动作 14(开发指南):针对当前对象写一条笔记,含证据链接,并预约下一个九十分钟块的单变量实验,实验标题必须出现自变量名称。

原则 15​

在工程流水线演示与汇报中先讲边界与风险,再讲细节,让决策者获得可行动信息。

落地动作 15(开发指南):针对当前对象写一条笔记,含证据链接,并预约下一个九十分钟块的单变量实验,实验标题必须出现自变量名称。

专题:枢纽优先​

先定位连接输入与错误字符串的枢纽函数。

专题:协议状态机​

先快乐路径后错误边;测试覆盖重置条件。

专题:向量库运营​

good/bad/roundtrip 分目录,删除需评审。

情景卡片 1(授权边界确认)​

你在工程流水线语境下处理与「授权边界确认」相关的任务,对象已授权。请提交结构化答卷:

  1. 事实三条(每条可追溯到 OBS 编号或哈希)。
  2. 假设两条(含作废条件),且彼此尽量互斥以便设计区分实验。
  3. 四小时内唯一实验:自变量、因变量、判据、噪声处理。
  4. 失败升级策略与合规提醒各一句。

通过线:未参与同事仅凭文字能理解并复现实验意图。不通过则更换样本家族后重做卡片 1,禁止复制旧答卷。本卡片聚焦「授权边界确认」,不要跑题去写无关工具安装故事。

情景卡片 2(黑盒输入矩阵)​

你在工程流水线语境下处理与「黑盒输入矩阵」相关的任务,对象已授权。请提交结构化答卷:

  1. 事实三条(每条可追溯到 OBS 编号或哈希)。
  2. 假设两条(含作废条件),且彼此尽量互斥以便设计区分实验。
  3. 四小时内唯一实验:自变量、因变量、判据、噪声处理。
  4. 失败升级策略与合规提醒各一句。

通过线:未参与同事仅凭文字能理解并复现实验意图。不通过则更换样本家族后重做卡片 2,禁止复制旧答卷。本卡片聚焦「黑盒输入矩阵」,不要跑题去写无关工具安装故事。

情景卡片 3(字符串 xref 导航)​

你在工程流水线语境下处理与「字符串 xref 导航」相关的任务,对象已授权。请提交结构化答卷:

  1. 事实三条(每条可追溯到 OBS 编号或哈希)。
  2. 假设两条(含作废条件),且彼此尽量互斥以便设计区分实验。
  3. 四小时内唯一实验:自变量、因变量、判据、噪声处理。
  4. 失败升级策略与合规提醒各一句。

通过线:未参与同事仅凭文字能理解并复现实验意图。不通过则更换样本家族后重做卡片 3,禁止复制旧答卷。本卡片聚焦「字符串 xref 导航」,不要跑题去写无关工具安装故事。

情景卡片 4(长度字段差分)​

你在工程流水线语境下处理与「长度字段差分」相关的任务,对象已授权。请提交结构化答卷:

  1. 事实三条(每条可追溯到 OBS 编号或哈希)。
  2. 假设两条(含作废条件),且彼此尽量互斥以便设计区分实验。
  3. 四小时内唯一实验:自变量、因变量、判据、噪声处理。
  4. 失败升级策略与合规提醒各一句。

通过线:未参与同事仅凭文字能理解并复现实验意图。不通过则更换样本家族后重做卡片 4,禁止复制旧答卷。本卡片聚焦「长度字段差分」,不要跑题去写无关工具安装故事。

情景卡片 5(endian 判定)​

你在工程流水线语境下处理与「endian 判定」相关的任务,对象已授权。请提交结构化答卷:

  1. 事实三条(每条可追溯到 OBS 编号或哈希)。
  2. 假设两条(含作废条件),且彼此尽量互斥以便设计区分实验。
  3. 四小时内唯一实验:自变量、因变量、判据、噪声处理。
  4. 失败升级策略与合规提醒各一句。

通过线:未参与同事仅凭文字能理解并复现实验意图。不通过则更换样本家族后重做卡片 5,禁止复制旧答卷。本卡片聚焦「endian 判定」,不要跑题去写无关工具安装故事。

情景卡片 6(校验范围识别)​

你在工程流水线语境下处理与「校验范围识别」相关的任务,对象已授权。请提交结构化答卷:

  1. 事实三条(每条可追溯到 OBS 编号或哈希)。
  2. 假设两条(含作废条件),且彼此尽量互斥以便设计区分实验。
  3. 四小时内唯一实验:自变量、因变量、判据、噪声处理。
  4. 失败升级策略与合规提醒各一句。

通过线:未参与同事仅凭文字能理解并复现实验意图。不通过则更换样本家族后重做卡片 6,禁止复制旧答卷。本卡片聚焦「校验范围识别」,不要跑题去写无关工具安装故事。

情景卡片 7(错误码字典)​

你在工程流水线语境下处理与「错误码字典」相关的任务,对象已授权。请提交结构化答卷:

  1. 事实三条(每条可追溯到 OBS 编号或哈希)。
  2. 假设两条(含作废条件),且彼此尽量互斥以便设计区分实验。
  3. 四小时内唯一实验:自变量、因变量、判据、噪声处理。
  4. 失败升级策略与合规提醒各一句。

通过线:未参与同事仅凭文字能理解并复现实验意图。不通过则更换样本家族后重做卡片 7,禁止复制旧答卷。本卡片聚焦「错误码字典」,不要跑题去写无关工具安装故事。

情景卡片 8(状态机快乐路径)​

你在工程流水线语境下处理与「状态机快乐路径」相关的任务,对象已授权。请提交结构化答卷:

  1. 事实三条(每条可追溯到 OBS 编号或哈希)。
  2. 假设两条(含作废条件),且彼此尽量互斥以便设计区分实验。
  3. 四小时内唯一实验:自变量、因变量、判据、噪声处理。
  4. 失败升级策略与合规提醒各一句。

通过线:未参与同事仅凭文字能理解并复现实验意图。不通过则更换样本家族后重做卡片 8,禁止复制旧答卷。本卡片聚焦「状态机快乐路径」,不要跑题去写无关工具安装故事。

情景卡片 9(状态机错误边)​

你在工程流水线语境下处理与「状态机错误边」相关的任务,对象已授权。请提交结构化答卷:

  1. 事实三条(每条可追溯到 OBS 编号或哈希)。
  2. 假设两条(含作废条件),且彼此尽量互斥以便设计区分实验。
  3. 四小时内唯一实验:自变量、因变量、判据、噪声处理。
  4. 失败升级策略与合规提醒各一句。

通过线:未参与同事仅凭文字能理解并复现实验意图。不通过则更换样本家族后重做卡片 9,禁止复制旧答卷。本卡片聚焦「状态机错误边」,不要跑题去写无关工具安装故事。

情景卡片 10(Hook 日志对齐)​

你在工程流水线语境下处理与「Hook 日志对齐」相关的任务,对象已授权。请提交结构化答卷:

  1. 事实三条(每条可追溯到 OBS 编号或哈希)。
  2. 假设两条(含作废条件),且彼此尽量互斥以便设计区分实验。
  3. 四小时内唯一实验:自变量、因变量、判据、噪声处理。
  4. 失败升级策略与合规提醒各一句。

通过线:未参与同事仅凭文字能理解并复现实验意图。不通过则更换样本家族后重做卡片 10,禁止复制旧答卷。本卡片聚焦「Hook 日志对齐」,不要跑题去写无关工具安装故事。

情景卡片 11(抓包噪声掩码)​

你在工程流水线语境下处理与「抓包噪声掩码」相关的任务,对象已授权。请提交结构化答卷:

  1. 事实三条(每条可追溯到 OBS 编号或哈希)。
  2. 假设两条(含作废条件),且彼此尽量互斥以便设计区分实验。
  3. 四小时内唯一实验:自变量、因变量、判据、噪声处理。
  4. 失败升级策略与合规提醒各一句。

通过线:未参与同事仅凭文字能理解并复现实验意图。不通过则更换样本家族后重做卡片 11,禁止复制旧答卷。本卡片聚焦「抓包噪声掩码」,不要跑题去写无关工具安装故事。

情景卡片 12(解析器单测)​

你在工程流水线语境下处理与「解析器单测」相关的任务,对象已授权。请提交结构化答卷:

  1. 事实三条(每条可追溯到 OBS 编号或哈希)。
  2. 假设两条(含作废条件),且彼此尽量互斥以便设计区分实验。
  3. 四小时内唯一实验:自变量、因变量、判据、噪声处理。
  4. 失败升级策略与合规提醒各一句。

通过线:未参与同事仅凭文字能理解并复现实验意图。不通过则更换样本家族后重做卡片 12,禁止复制旧答卷。本卡片聚焦「解析器单测」,不要跑题去写无关工具安装故事。

情景卡片 13(黄金向量沉淀)​

你在工程流水线语境下处理与「黄金向量沉淀」相关的任务,对象已授权。请提交结构化答卷:

  1. 事实三条(每条可追溯到 OBS 编号或哈希)。
  2. 假设两条(含作废条件),且彼此尽量互斥以便设计区分实验。
  3. 四小时内唯一实验:自变量、因变量、判据、噪声处理。
  4. 失败升级策略与合规提醒各一句。

通过线:未参与同事仅凭文字能理解并复现实验意图。不通过则更换样本家族后重做卡片 13,禁止复制旧答卷。本卡片聚焦「黄金向量沉淀」,不要跑题去写无关工具安装故事。

情景卡片 14(未知清单评审)​

你在工程流水线语境下处理与「未知清单评审」相关的任务,对象已授权。请提交结构化答卷:

  1. 事实三条(每条可追溯到 OBS 编号或哈希)。
  2. 假设两条(含作废条件),且彼此尽量互斥以便设计区分实验。
  3. 四小时内唯一实验:自变量、因变量、判据、噪声处理。
  4. 失败升级策略与合规提醒各一句。

通过线:未参与同事仅凭文字能理解并复现实验意图。不通过则更换样本家族后重做卡片 14,禁止复制旧答卷。本卡片聚焦「未知清单评审」,不要跑题去写无关工具安装故事。

情景卡片 15(降级交付切片)​

你在工程流水线语境下处理与「降级交付切片」相关的任务,对象已授权。请提交结构化答卷:

  1. 事实三条(每条可追溯到 OBS 编号或哈希)。
  2. 假设两条(含作废条件),且彼此尽量互斥以便设计区分实验。
  3. 四小时内唯一实验:自变量、因变量、判据、噪声处理。
  4. 失败升级策略与合规提醒各一句。

通过线:未参与同事仅凭文字能理解并复现实验意图。不通过则更换样本家族后重做卡片 15,禁止复制旧答卷。本卡片聚焦「降级交付切片」,不要跑题去写无关工具安装故事。

情景卡片 16(工具版本钉扎)​

你在工程流水线语境下处理与「工具版本钉扎」相关的任务,对象已授权。请提交结构化答卷:

  1. 事实三条(每条可追溯到 OBS 编号或哈希)。
  2. 假设两条(含作废条件),且彼此尽量互斥以便设计区分实验。
  3. 四小时内唯一实验:自变量、因变量、判据、噪声处理。
  4. 失败升级策略与合规提醒各一句。

通过线:未参与同事仅凭文字能理解并复现实验意图。不通过则更换样本家族后重做卡片 16,禁止复制旧答卷。本卡片聚焦「工具版本钉扎」,不要跑题去写无关工具安装故事。

情景卡片 17(双人假设攻击)​

你在工程流水线语境下处理与「双人假设攻击」相关的任务,对象已授权。请提交结构化答卷:

  1. 事实三条(每条可追溯到 OBS 编号或哈希)。
  2. 假设两条(含作废条件),且彼此尽量互斥以便设计区分实验。
  3. 四小时内唯一实验:自变量、因变量、判据、噪声处理。
  4. 失败升级策略与合规提醒各一句。

通过线:未参与同事仅凭文字能理解并复现实验意图。不通过则更换样本家族后重做卡片 17,禁止复制旧答卷。本卡片聚焦「双人假设攻击」,不要跑题去写无关工具安装故事。

情景卡片 18(LLM 草稿审查)​

你在工程流水线语境下处理与「LLM 草稿审查」相关的任务,对象已授权。请提交结构化答卷:

  1. 事实三条(每条可追溯到 OBS 编号或哈希)。
  2. 假设两条(含作废条件),且彼此尽量互斥以便设计区分实验。
  3. 四小时内唯一实验:自变量、因变量、判据、噪声处理。
  4. 失败升级策略与合规提醒各一句。

通过线:未参与同事仅凭文字能理解并复现实验意图。不通过则更换样本家族后重做卡片 18,禁止复制旧答卷。本卡片聚焦「LLM 草稿审查」,不要跑题去写无关工具安装故事。

情景卡片 19(演示彩排)​

你在工程流水线语境下处理与「演示彩排」相关的任务,对象已授权。请提交结构化答卷:

  1. 事实三条(每条可追溯到 OBS 编号或哈希)。
  2. 假设两条(含作废条件),且彼此尽量互斥以便设计区分实验。
  3. 四小时内唯一实验:自变量、因变量、判据、噪声处理。
  4. 失败升级策略与合规提醒各一句。

通过线:未参与同事仅凭文字能理解并复现实验意图。不通过则更换样本家族后重做卡片 19,禁止复制旧答卷。本卡片聚焦「演示彩排」,不要跑题去写无关工具安装故事。

情景卡片 20(失败资产归档)​

你在工程流水线语境下处理与「失败资产归档」相关的任务,对象已授权。请提交结构化答卷:

  1. 事实三条(每条可追溯到 OBS 编号或哈希)。
  2. 假设两条(含作废条件),且彼此尽量互斥以便设计区分实验。
  3. 四小时内唯一实验:自变量、因变量、判据、噪声处理。
  4. 失败升级策略与合规提醒各一句。

通过线:未参与同事仅凭文字能理解并复现实验意图。不通过则更换样本家族后重做卡片 20,禁止复制旧答卷。本卡片聚焦「失败资产归档」,不要跑题去写无关工具安装故事。

章末自测:开发指南​

  1. 写出本章对你改变最大的一条原则,并给出反例故事。
  2. 列出即将执行的子站实验与成功判据。
  3. 更新个人 Wiki 模板版本号,记录本次新增字段。
  4. 检查授权是否覆盖你计划中的动态修改行为。
  5. 将未知清单按业务风险排序,取前两项安排本周处理。

导航:入门 · 快速开始 · 开发 · GitHub · 实践 · FAQ · 从零到一 · 子站