关键词:知识地图、底层原理、工具链、学习路径、专项方向、复现能力
难度:入门
前置知识:无,本篇给出全局学习路线
一、概述
很多人的入门路径是这样:跟着视频敲一遍 imager 做一个镜像,导入 GUI 看到一堆文件,觉得"我会了"。然后遇到真实案件——一个装满加密卷的笔记本、一台已锁机的手机、一台被入侵的服务器——完全无从下手。
原因很简单:工具会变,原理不会。视频教程教的是"点哪里",真实工作需要的是"知道数据在哪、为什么在那里、怎么证明它在那"。前者是操作技能,后者是结构化知识。GUI 是效率工具,命令行是能力工具。GUI 遇到损坏文件、非常规分区表时经常直接报"损坏",而底层命令行工具加上你对结构的理解,往往能绕过这些限制。
能力分层解决的是流程开始之前的问题:你还没有能力执行流程。它与取证流程与原则是互补的两套组织方式——流程按阶段组织(保全、采集、检验、分析、报告),技能树按能力层次组织(L1 到 L5)。两者交叉起来才是完整的实践路径:某个阶段需要什么能力,到这张图里查该补哪一层。
这套分层是全库 108 篇文章的骨架。L1 底层三块(文件系统、编码、密码学基础)对应 filesystem/、crypto/ 与本板块的概念三篇;L3 操作系统的工件地图对应 computer/ 各板块;L4 专项对应 memory/、mobile/、server/。在本库里看到的一篇文章属于哪一层,决定了它在你能力结构里补的是哪一块。
学习材料与能力自评工具本身构成一套产出。
五层结构图给出 L1 文件系统 / 编码 / 密码学,L2 镜像 / 格式 / 解析 / 注册表 / 日志 / 数据库 / 内存 / 脚本,L3 Windows / Linux / macOS 三套工件地图,L4 五个专项方向,L5 报告与质证。各层的"学到了"判据比结构图更重要:L1 的标志是能手绘 MFT 记录结构,L3 的标志是"10 分钟内列出必查工件清单",L5 的标志是"让不懂技术的法官看懂"。Windows / Linux / macOS 三张必查工件表都是具体的文件与 hive 名称,不是抽象分类。
时间表分四段:1–2 月打地基、2–4 月工具链成型、4–8 月系统工件、第四阶段持续深入。CTF 与靶场作为贯穿全程的检验手段,与赛事与靶场配合。常见编码特征是 L1 里最容易被跳过的一块——ASCII / UTF-8 / GBK / UTF-16 的字节特征、Base64 / 十六进制 / URL 编码、压缩格式头,搜不到往往不是没有,是编码不对。
能回答的是这些:自己的能力卡在哪一层、每个层次的"学会了"标准是什么、该按什么顺序学、以及为什么跳过 L1 直接学工具是最贵的错误。
不解决的是这些:任何具体技术怎么做,这里只给路线不给操作,每一层的具体操作在对应专题文章里;哪条路线最快,时间区间是给"按顺序学"的人用的参考,不是保证;该选哪个 L4 专项,原则是"基于你的实际工作场景",不是基于哪个看起来高级;行业对从业者的资质要求,这里讲能力结构不讲执业门槛,后者见合规授权与法律边界。
能力分层的路线图是给零基础设计的入口,给的是路线图而不是坐标系——后者由取证概念与分类提供。
如果已经会一点东西(比如跟着教程做过一次镜像),先把各层判据那张表的自测做一遍:把现在的状态填进去,看看你以为在 L2 还是在 L3。多数人填完会发现自己在 L2,而误以为自己到了 L3。这个落差正是这套分层存在的理由。
这个自测还有第二个用法:每学完一层回来填一次,填不出"学到的标志"那一栏就说明还没过。这比"我把这一节读完了"可靠得多。还有第三种用法:给别人讲的时候用。那张表的每一行都是可检验的判据,"能教别人判断自己卡在哪一层"本身就是 L5 综合能力的最小单元。
二、核心原理
2.1 技能树五层结构
┌─────────────────────────┐
L5 综合能力 │ 报告撰写 / 质证应辩 / 沟通 │
└────────────┬────────────┘
│ 建立在
┌────────────▼────────────┐
L4 专项方向 │ WebShell / 容器 / 内存 │
│ 移动 / 加密 / 反取证 │
└────────────┬────────────┘
│ 建立在
┌────────────▼────────────┐
L3 操作系统 │ Windows / Linux / macOS │
│ 各自的工件地图 │
└────────────┬────────────┘
│ 建立在
┌────────────▼────────────┐
L2 工具层 │ 镜像 / 解析 / 时间线 / 脚本│
└────────────┬────────────┘
│ 建立在
┌────────────▼────────────┐
L1 底层 │ 文件系统 / 编码 / 密码学 │
└─────────────────────────┘
关键认知:L1 是天花板。
L2–L5 都可以靠工具更新而快速跟进,但 L1 的理解深度决定了你遇到新工具时能不能自己判断它对不对。
2.2 各层的判断标准
"听说过"和"学会了"之间隔着一段可检验的距离。这张表就是那段距离。
| 层 |
学到的标志 |
没学到的表现 |
| L1 底层 |
能手绘 NTFS 的 MFT 记录结构、说清 ext4 的间接块 |
只会用工具,工具报错就束手无策 |
| L2 工具 |
知道每个工具适合什么场景、有什么局限 |
把工具当黑盒,换个场景就不会用 |
| L3 操作系统 |
拿到一台陌生系统,能列出"必查工件清单" |
只会查自己常用的那几个文件 |
| L4 专项 |
在一个方向上有完整处置能力 |
什么都懂一点,什么都不深 |
| L5 综合 |
能写出让不懂技术的法官看懂的报告 |
报告全是技术术语,无法采信 |
2.3 L1 底层:三块必须啃下来的硬骨头
| 模块 |
必学内容 |
为什么非学不可 |
| 文件系统 |
NTFS 的 MFT/ADS/$LogFile、ext4 的 inode/journal、FAT 的簇链、APFS 的容器与快照 |
决定数据在哪、哪些地方"没数据"其实是"没解析" |
| 编码 |
ASCII/UTF-8/GBK/UTF-16 的字节特征、Base64/十六进制/URL 编码、压缩格式头 |
决定你搜关键字时能不能搜到——搜不到往往不是没有,是编码不对 |
| 密码学基础 |
对称/非对称、哈希、编码≠加密、密钥派生 |
决定你面对加密数据时是"解不开"还是"方法错了" |
最容易被跳过、也最容易吃亏的是"编码"。
很多新手搜完关键字没结果就下结论"没有这个东西"。实际上对方用的是 GBK 或 UTF-16,工具按 UTF-8 搜自然搜不到。
三块里,文件系统和密码学都有明确的教材路径;编码没有。所以它是被跳掉的那一块,也是新手第一个假阴性结论的来源。
2.4 L2 工具层:按"能力"而非"产品"分类
| 能力 |
代表工具 |
必掌握程度 |
| 镜像制作 |
dcfldd、ddrescue、商业 imager |
精通——这是基本功 |
| 格式处理 |
ewfinfo/ewfmount/ewfexport、X-Ways |
熟练 |
| 文件系统解析 |
The Sleuth Kit(mmls/fsstat/fls/icat) |
精通——命令行工具是最后兜底 |
| 注册表解析 |
reged、RegRipper、rip.exe |
熟练 |
| 日志分析 |
evtx、Plaso/log2timeline |
熟练 |
| 数据库 |
sqlite3、DBUtils |
精通——现代取证大量数据在 SQLite 里 |
| 内存 |
Volatility 3 |
熟练 |
| 脚本 |
Python + 上述库 |
精通——决定你的效率上限 |
为什么强调命令行工具:GUI 工具在遇到边界情况(损坏文件、非常规分区表、手工拼接的文件)时经常直接报"损坏",而底层命令行工具 + 你对结构的理解,往往能绕过这些限制。
GUI 是效率工具,命令行是能力工具。
2.5 L3 操作系统层:工件地图思维
对每个操作系统,你要能回答一个问题:这台机器上,什么数据一定存在?
| 系统 |
必查工件(举例) |
| Windows |
NTFS 时间戳、Prefetch、ShimCache/Amcache、UserAssist、LNK/JumpList、事件日志、SRUM、浏览器、注册表各 hive、Recycle Bin、USN Journal |
| Linux |
/var/log 全部、shell history(含 zsh/HISTFILE)、/etc/passwd+shadow、crontab、systemd timer、SSH 痕迹、.bash_history 时间戳、audit 日志、已删除文件的 inode |
| macOS |
Unified Log、Spotlight(.mdfind)、plist 偏好、quarantine 事件、FSEvents、.DS_Store、Keychain、Time Machine 快照 |
判断"学会了"的标准:给你一台随机系统的镜像,你能在 10 分钟内列出一份检查清单,而不是"想到哪查到哪"。
2.6 L4 专项方向:深度 > 广度
专项方向别按"看起来高级"来选,按你实际会收到什么委托来选:
| 方向 |
适合谁 |
入门标志 |
| Web/服务器 |
站点运维、安全服务人员 |
能读懂 Nginx 访问日志并判断攻击手法 |
| 内存 |
涉密、涉毒、勒索案件 |
能用 Volatility 跑通完整流程并解释结果 |
| 移动 |
涉诈、涉黄、位置核查 |
能独立完成一次 iOS 提取并解释数据来源 |
| 加密 |
涉密、数据恢复 |
能对 BitLocker/VeraCrypt 至少一条路径走通 |
| 容器与云 |
现代企业环境 |
能从 K8s 审计日志还原变更历史 |
建议:先深后广。选一个方向做到能独立办案,再横向扩展。只做广度的人每个方向都能说两句,但没有一个能真正落地。
2.7 L5 综合能力:最被低估的一层
技术做得再好,如果写不出可采信的报告,前面的工作都无法变现。这一层的核心是四项能力。
| 能力 |
具体要求 |
| 逻辑表达 |
能把"我看到了什么"讲成"这说明什么" |
| 证据意识 |
知道哪句话必须有验证支撑 |
| 边界意识 |
主动写明局限性,不越界下结论 |
| 复核能力 |
自己的结论能被自己或他人独立复现 |
三、操作步骤
步骤 1:第一阶段(1–2 月):打地基
目标:建立 L1 底层能力,能看懂工具在做什么。
第 1-2 周 文件系统入门
目标:能手绘 NTFS MFT 记录的基本字段;理解簇/块/扇区
产出:装一台 Linux,用 mmls/fls/icat 手工还原一个被删文件
第 3-4 周 编码与字符
目标:能识别 UTF-8/UTF-16/GBK 的字节特征;能处理 Base64
产出:用 grep 跨编码搜索成功;能解释为什么某些关键字搜不到
第 5-6 周 密码学基础
目标:分清编码/加密/哈希;理解对称非对称;知道密钥派生
产出:写一个 Python 脚本解密 AES-CBC 数据并验证结果
第 7-8 周 镜像与格式
目标:独立完成采集→验证→转换全流程
产出:一个完整的 E01 镜像 + 三段哈希记录
验证方式:给你一份陌生的镜像,你能说出分区结构、文件系统类型,并手工提取一个文件。
第 3–4 周那段最值得放慢。编码是三块里唯一没有教材路径的,而它出的问题(假阴性)在很长时间里不会暴露出来。
步骤 2:第二阶段(2–4 月):工具链成型
目标:L2 熟练,能独立处理常规案件。
第 2 月 镜像与只读挂载
工具:dcfldd / gddrescue / ewf* / losetup
产出:掌握 losetup offset 挂载,能处理 E01 与 RAW
第 3 月 文件系统与数据库
工具:The Sleuth Kit / sqlite3 / DBUtils
产出:手工解析一个 NTFS 的 $MFT,导出并查询浏览器 History
第 4 月 脚本能力
工具:Python(struct / binascii / sqlite3 / datetime)
产出:写一个脚本,批量导出镜像中所有 PNG 并计算哈希
验证方式:不用任何 GUI 工具,纯命令行完成一次完整分析并出具结论。
这一阶段末尾就该把"写报告"练起来,而不是等到第五个月之后。
补充:blkls 属于 Sleuth Kit 套件(apt install sleuthkit),与 testdisk 不是同一个包。
步骤 3:第三阶段(4–8 月):系统工件
目标:L3 成型,形成自己的工件清单。
选一个主攻系统(Windows 或 Linux)深入 2–3 个月,把该系统的主要工件全部手工解析一遍;不看工具输出,尝试用十六进制编辑器手工定位关键结构;记录每个工件的偏移、格式、常见陷阱。再横向覆盖另一个系统 1–2 个月。
验证方式:给一台随机镜像,10 分钟内产出检查清单。
步骤 4:第四阶段(持续):专项深入
目标:L4 至少一个方向能独立办案。
选一个方向连续投入 3–6 个月,读完该方向的权威资料,做完 5–10 个完整公开案例,记录每个案例的"卡点"和解决思路。然后横向扩展,每个方向 1–2 个月。
步骤 5:贯穿全程:比赛与靶场
每 2–3 个月参加一次 CTF 取证赛(详见第 09 篇)。参赛的意义在于时间压力下暴露知识盲区、学习他人思路、保持手感。
步骤 6:持续能力建设
| 习惯 |
频率 |
价值 |
| 做公开案例复盘 |
每月 1 个 |
学他人思路 |
| 写自己的分析脚本 |
持续 |
提升效率与可复用性 |
| 记录"踩坑笔记" |
随时 |
避免重复犯错 |
| 关注工具更新 |
每季 |
跟上格式变化 |
| 练习写报告 |
每月 1 份 |
L5 能力需要单独训练 |
💡 最容易被忽略的建议:每完成一个技术分析,都强制自己写一份 200 字的结论摘要。这个练习成本极低,但能极大提升 L5 能力——很多人技术一流,报告写不出来。
四、常见陷阱
这一章讲的不是技术操