reverse-skills-max: initial public release (restored, redacted, hardened)
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
# 隐写检测决策树与证据分级
|
||||
|
||||
隐写检测先按载体定方法,提取失败按顺序枚举。本文档与 SKILL.md 步骤 1-4 配套使用。
|
||||
|
||||
## 载体 × 特征决策树
|
||||
|
||||
```
|
||||
怀疑对象
|
||||
├─ 文件尾部异常(大小不整/尾随数据)→ 尾部附加检查(binwalk/hexdump)
|
||||
├─ 图片(PNG/BMP)→ LSB 位平面扫描(zsteg/脚本/stegsolve)
|
||||
├─ 图片(JPEG)→ DCT 域方法(outguess 类),不做 LSB(有损压缩已破坏位平面)
|
||||
├─ 音频 → 频谱图目检(sox spectrogram)+ steghide 尝试
|
||||
├─ EXIF/元数据 → exiftool 查看异常字段
|
||||
├─ 压缩包未用空间 → 解包后对比原始大小/CRC 检查
|
||||
└─ 无特征 → 不进入隐写流程(先 [[re-triage]] 确认文件类型与可疑点)
|
||||
```
|
||||
|
||||
## 工具选择分支
|
||||
|
||||
```
|
||||
确认载体后
|
||||
├─ PNG/BMP + 怀疑 LSB → zsteg 全通道 → 指定平面提取(-E 语法)
|
||||
├─ 任何载体 + 怀疑常规隐写 → steghide extract(需要密码则标注)
|
||||
├─ 尾部/附加数据 → binwalk 分割提取 → magic 验证
|
||||
├─ 需要逐位平面目检 → stegsolve(Java GUI)
|
||||
└─ 工具无输出但怀疑仍在 → python3 脚本(按位提取 + 顺序枚举)
|
||||
```
|
||||
|
||||
## 提取失败分支
|
||||
|
||||
```
|
||||
提取乱码/无结果
|
||||
├─ 怀疑顺序问题 → 枚举组合:行序(正/逆)× 位序(LSB/MSB)× 通道(RGB 各通道/组合)× 位平面(b1/b2…)
|
||||
├─ 怀疑压缩 → 查压缩头(zlib 78 9C / gzip 1F 8B / bzip2 42 5A 68)→ 先解压再读
|
||||
├─ 怀疑加密 → 查密钥线索(密码提示/附近文件)→ 有则 [[re-crypto-decrypt]],无则标注
|
||||
├─ 怀疑嵌套 → 每层提取物再过一遍检测流程(多载体分层)
|
||||
└─ 全部排除 → 标注「未检出」(不等于不存在,见 [[gotchas]])
|
||||
```
|
||||
|
||||
## 检测结论分级表
|
||||
|
||||
| 级别 | 判据 | 处置 |
|
||||
|---|---|---|
|
||||
| 确认嵌入 | 提取出有效数据(magic 命中/可读内容) | 提取 + 存档(路径 + sha256) |
|
||||
| 强烈可疑 | 结构异常 + 熵异常 + 工具命中但提取无效 | 继续枚举顺序/压缩/加密假设 |
|
||||
| 可疑特征 | 单一特征(如高熵段) | 列为线索,不定性;与其他线索合并判断 |
|
||||
| 未检出 | 无特征/枚举穷尽无果 | 输出「未检出」+ 已用方法清单(盲区声明) |
|
||||
|
||||
## 组合套路(完整流程)
|
||||
|
||||
1. 文件初勘([[re-triage]]:类型/magic/大小核对)
|
||||
2. 结构检查(pngcheck/exiftool/hexdump 尾部)
|
||||
3. 隐写扫描(zsteg/steghide/binwalk 按载体)
|
||||
4. 提取 → 验证(magic/可读性/压缩头)
|
||||
5. 枚举(顺序/通道/位平面)→ 仍无 → 标注未检出 + 方法清单
|
||||
|
||||
## 实现教训(内化)
|
||||
|
||||
- 检测结论分三级,熵/结构异常只是线索不是证据——定性必须提取成功或结构级异常确认
|
||||
- 提取顺序枚举是最高频的失败修复手段,脚本化枚举比手工快
|
||||
- 「未检出」要带方法清单与盲区声明(隐藏方可用非常规顺序/加密/新型载体)
|
||||
- 每步产物 sha256 存档,验证结论可复核
|
||||
|
||||
## 使用注意
|
||||
|
||||
- 取证场景先确认授权范围(目标载体/数据类别)
|
||||
- 提取物初勘走 [[re-triage]];解密衔接 [[re-crypto-decrypt]]
|
||||
- CTF 场景留意 flag 格式(题目说明的 flag 前缀),提取物先 strings 扫一遍
|
||||
@@ -0,0 +1,30 @@
|
||||
# 隐写方法论坑与边界
|
||||
|
||||
## 检测坑
|
||||
|
||||
- **熵误报**:压缩数据/随机填充天然高熵,熵特征单独出现时只是线索——与结构异常合并判断([[decision-tree]] 分级表)
|
||||
- **JPEG 有损混淆**:LSB 类隐写基本只适用于 PNG/BMP(无损);JPEG 重压缩会破坏位平面——先确认格式再选方法,别在 JPEG 上浪费时间做 LSB
|
||||
- **工具版本差异**:zsteg/steghide 版本间通道枚举默认值不同(如 b1 位序、alpha 通道是否默认扫)——换版本/加参数重扫是常见修复
|
||||
- **签名伪造**:文件头正常不代表整体正常(附加数据可伪装成注释块/元数据)——按结构逐段核对(pngcheck 查 IEND 位置、EXIF 段长度)
|
||||
- **未检出 ≠ 不存在**:隐写可藏在非常规顺序/新型载体/多载体分片中——「未检出」必须带已用方法清单
|
||||
|
||||
## 提取坑
|
||||
|
||||
- **顺序组合爆炸**:行序 × 位序 × 通道 × 位平面组合多——先按工具默认试,再枚举常见组合(zsteg -E 各变体),最后脚本全枚举
|
||||
- **隐写前压缩**:嵌入前 deflate/gzip 的明文提取出来是乱码——提取物先查压缩头(zlib `78 9C`、gzip `1F 8B`、bzip2 `42 5A 68`),常见于 CTF
|
||||
- **隐写前加密**:加密载荷无密钥不可提取——查题目/场景的密钥线索(密码提示、同批文件);无则标注,不硬破解
|
||||
- **多载体重叠**:同一文件多个隐写层/多文件分片——每层提取物独立验证,分片按特征(文件尾偏移/序号/内容连续性)拼接
|
||||
- **嵌入损坏**:部分写入/载体处理导致提取数据损坏——容忍损坏(magic 部分匹配、可读片段),修复载体后再提取
|
||||
|
||||
## 载体坑
|
||||
|
||||
- **载体损坏**:隐写写入破坏文件结构(坏 PNG/异常 EXIF)——先修复(pngcheck 定位损坏处)或按位提取不依赖结构
|
||||
- **EXIF 干扰**:EXIF 段内的注释/缩略图可能被误报为附加数据——用 exiftool 列清元数据段,区分「合法元数据」与「附加载荷」
|
||||
- **压缩载体**:ZIP/RAR 内文件的未用空间与 CRC 域是隐写点——先解包对比原始大小/校验(binwalk 扫描容器内偏移)
|
||||
- **JPEG DCT 域**:JPEG 隐写在 DCT 系数里,位平面工具无效——用 outguess 类工具或 DCT 系数统计(JPEG 隐写检测需重压缩分析,超出基础流程时标注)
|
||||
|
||||
## 使用注意
|
||||
|
||||
- 取证场景:授权范围(载体/数据类别)先行;产物 sha256 存档([[re-triage]] 初勘 + [[re-analyze/analysis-contract]] 交付)
|
||||
- CTF 场景:按题目提示缩小范围(载体类型/顺序暗示/密钥提示),别全量枚举耗时
|
||||
- 本技能覆盖文件类载体(图片/音频/文件冗余区/未分配空间);网络协议/流量侧隐写不在本技能([[re-netcap]] / [[re-proto-rev]] 场景评估)
|
||||
Reference in New Issue
Block a user