reverse-skills-max: initial public release (restored, redacted, hardened)
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
# 移动取证决策树与证据分级
|
||||
|
||||
取证路径由「设备状态 × 可用访问级别」决定,不是先上工具。本文档与 SKILL.md 步骤 1-3 配套使用。
|
||||
|
||||
## 设备 × 访问级别决策树
|
||||
|
||||
```
|
||||
移动设备取证
|
||||
├─ Android
|
||||
│ ├─ 已解锁 + 应用可备份 → adb backup(targetSDK<31 或 debuggable)
|
||||
│ ├─ root 可用 → 分区镜像/dd + 直接读 /data
|
||||
│ ├─ 仅锁屏/无 USB 调试授权 → 标注不可提取(授权流程外不绕过)
|
||||
│ └─ 加密备份 → 有备份密码才可解析,否则标注
|
||||
├─ iOS
|
||||
│ ├─ 已解锁 + 信任本机 → idevicebackup2 备份(加密/非加密)
|
||||
│ ├─ 已有本地备份(MobileSync/Backup)→ 解析 Manifest.db(文件索引)+ Manifest.plist(元数据/加密状态)
|
||||
│ └─ 未越狱且无备份 → 仅可提取有限信息,标注边界
|
||||
└─ 其他(功能机/定制系统)→ 按厂商工具与接口评估,无通用流程
|
||||
```
|
||||
|
||||
## 目标数据类型分支
|
||||
|
||||
```
|
||||
目标数据
|
||||
├─ 应用数据库 → 定位 db 文件 → sqlite3 查询 → 删除记录走 freelist/WAL 页([[re-disk-forensics]])
|
||||
├─ 聊天/媒体文件 → 应用沙箱路径枚举 → 直接提取;已删除 → foremost 雕刻
|
||||
├─ 偏好/配置 → plist/SharedPreferences 解析
|
||||
├─ Keychain/凭据 → iOS 需备份密码;Android Keystore 硬件绑定不可导出(标注)
|
||||
└─ 时间线 → 文件时间戳 + 数据库时间戳合并 → 归一 UTC
|
||||
```
|
||||
|
||||
## 提取方法分级表(证据可靠性)
|
||||
|
||||
| 级别 | 方法 | 说明 |
|
||||
|---|---|---|
|
||||
| 强 | 设备镜像/分区镜像 | 原始比特级副本,最适合删除恢复与完整性校验 |
|
||||
| 中 | 官方备份(ab / iTunes 备份) | 应用数据全量导出,但经过打包/可能含加密层 |
|
||||
| 中 | 应用沙箱直读(run-as/root pull) | 单应用数据,路径级提取 |
|
||||
| 弱 | 已删除数据雕刻(foremost) | 碎片化,完整性差,只能佐证 |
|
||||
| 标注 | 云同步/服务端数据 | 本技能范围外,需另行授权与流程 |
|
||||
|
||||
## 删除恢复分支
|
||||
|
||||
```
|
||||
删除恢复请求
|
||||
├─ SQLite 数据库 → freelist 页 + WAL 残留 → 页级提取(unallocated 页扫描)
|
||||
├─ 普通文件 → 文件系统未分配空间 → foremost/等价雕刻(按签名)
|
||||
└─ 无未分配空间(TRIM/覆写已执行)→ 标注不可恢复(见 [[gotchas]])
|
||||
```
|
||||
|
||||
## 时间线证据分级
|
||||
|
||||
| 级别 | 来源 | 说明 |
|
||||
|---|---|---|
|
||||
| 强 | 数据库记录时间(内容自带) | 应用内部记录,与用户动作直接相关 |
|
||||
| 中 | 文件时间戳(ctime/mtime/atime) | 可被改写,注意时间戳伪造 |
|
||||
| 中 | 备份记录时间(备份本身时间线) | 佐证提取时点,不是用户活动时间 |
|
||||
| 弱 | 删除/碎片恢复数据的时间 | 通常只能给区间,不能给精确点 |
|
||||
|
||||
## 实现教训(内化)
|
||||
|
||||
- 先隔离再取证:飞行模式/断网是第一动作,远端擦除不可逆
|
||||
- 提取路径选择以「证据可靠性 × 可用性」为准:镜像 > 官方备份 > 直读 > 雕刻
|
||||
- 每次提取记录设备状态(解锁/加密/网络)与产物 sha256,链条完整才可复核
|
||||
- 拿不到的数据明说「不可提取」,不绕过授权边界
|
||||
|
||||
## 使用注意
|
||||
|
||||
- 仅授权设备;授权范围(设备/数据类别/时间窗)先确认
|
||||
- 产物与结论按 [[re-analyze/analysis-contract]] 交付;删除恢复结论带「部分恢复」限定
|
||||
- 司法场景注意证据链(保管链)要求,本技能产出按取证流程存档
|
||||
@@ -0,0 +1,30 @@
|
||||
# 移动取证方法论坑与边界
|
||||
|
||||
## 提取坑
|
||||
|
||||
- **adb backup 版本差异**:Android 12 起 targetSDK≥31 的应用数据不再导出(官方弃用);Android 13+ 部分设备已移除支持——「备份为空」先查应用 targetSDK 与设备版本,再换 root/镜像路径(SKILL.md 步骤 1)
|
||||
- **allowBackup=false 无警告**:备份命令照常执行但某应用数据缺失,无任何报错——按应用清单逐项核对导出内容,别假设备份完整
|
||||
- **加密备份**:ab/iTunes 加密备份无密码不可解析(密码不保存在设备/备份内);不硬破解(授权边界),标注不可提取
|
||||
- **备份中途损坏**:线缆断开/锁屏/磁盘满都会产出损坏备份——解析报错时先看产物大小与日志,重试前确认环境稳定
|
||||
- **Keystore 密钥**:Android 硬件 Keystore 密钥绑定设备芯片,备份/镜像都导不出——涉及密钥目标时直接标注局限
|
||||
|
||||
## 解析坑
|
||||
|
||||
- **iOS 哈希路径**:备份文件按 fileID 命名(fileID = SHA1(domain + "-" + relativePath),路径派生、与内容无关),分两级目录(前两位/完整 fileID),没有索引就是乱码目录——永远先解析 Manifest.db 的映射再碰文件
|
||||
- **索引损坏**:Manifest.db(文件索引)缺失/损坏时备份文件仍在,但映射不可用——可尝试按文件特征(plist/数据库头)反查,属弱证据
|
||||
- **SQLite 状态**:WAL 模式下删除数据可能仍在 WAL 未 checkpoint 页;journal 模式下 freelist 页残留——恢复前先看数据库日志模式([[re-disk-forensics]] 方法)
|
||||
- **时区与时钟**:设备时区/时钟偏差导致时间线错位——先归一 UTC,标注时间来源;跨设备合并时间线时先对齐时钟
|
||||
|
||||
## 证据保全坑
|
||||
|
||||
- **远端擦除**:设备联网可能触发厂商远端抹除/同步覆盖(定位锁/管理策略)——提取前断网(飞行模式),全程保持
|
||||
- **解锁与操作污染**:解锁、安装工具、恢复备份都会写文件系统(覆写删除数据)——先镜像/备份(只读优先),再做低优先级操作
|
||||
- **TRIM/自动覆写**:现代闪存删除数据后可能被 TRIM 回收,恢复成功率低——删除恢复结论带「部分恢复」限定
|
||||
- **充电/自动关机**:电池耗尽自动关机导致中断——接电源/保温,保持设备状态稳定
|
||||
|
||||
## 使用注意
|
||||
|
||||
- 仅授权设备;授权范围先确认;越权路径(绕过锁屏等)不做
|
||||
- 产物按取证流程存档(路径 + 设备状态 + sha256,见 [[re-triage]]);结论按 [[re-analyze/analysis-contract]] 交付
|
||||
- 动态/运行态数据(进程内存、实时消息)本技能不覆盖,转 [[re-frida]] / [[re-mem-forensics]] 评估
|
||||
- 云侧数据(iCloud/Google 云备份)需单独授权与流程,本技能只处理设备本地数据
|
||||
Reference in New Issue
Block a user