AI取证实战第32期:解析E01镜像文件的两种方式对比
原创
小谢
小谢
小谢取证
2026年10月22日 21:31
辽宁
去阅读
做计算机取证,拿到镜像的第一步是把它打开。同样一个 E01 文件,常见有两条路:一条是在 WSL2 里用 ewfmount 把镜像挂载成 Linux 目录,再用挂载的方式去翻;另一条是 Fox-IT 开源的 dissect,不挂载,Python 几行代码直接读。
两个都免费,都能只靠国内网络装好。这篇先把两条路各自的安装部署讲清楚,然后用同一个 10.6GB 的真实检材把每项活儿都跑一遍,看看它们到底差在哪。
一、方式一:WSL2 + ewfmount
思路很简单:在 Windows 里装一个 Linux 子系统(WSL2),把 E01 镜像\"挂\"成一个 Linux 目录,之后就像操作普通文件夹一样翻检材。适合已经习惯在 Linux 命令行下干活的人。
1. 安装部署
第一步,管理员权限的 PowerShell 里装 WSL2 的 Ubuntu(装完按提示重启,首次进入会让你设一个用户名和密码):
wsl --install -d Ubuntu
第二步,把软件源换成阿里云,不然下载会很慢:
sudo sed -i 's|archive.ubuntu.com|mirrors.aliyun.com|g; s|security.ubuntu.com|mirrors.aliyun.com|g' /etc/apt/sources.list
新版 Ubuntu 的源写在 /etc/apt/sources.list.d/ubuntu.sources 里,同样的替换方法改那个文件就行。第三步,装本次要用的三样工具:ewf-tools 负责\"打开 E01\",sleuthkit 负责\"看分区、翻目录、找已删除文件\",ntfs-3g 负责\"挂载 NTFS 分区\":
sudo apt update
sudo apt install -y ewf-tools sleuthkit ntfs-3g
到这里就装好了,一共四条命令。
也可以简单粗暴:
2. 怎么用:四步挂载
以 10.6GB 的 lihh\_PC.E01 为例,下面是我机器上的真实输出。
$ ewfmount lihh\_PC.E01 /mnt/ev1
$ ls /mnt/ev1
ewf1
$ mmls /mnt/ev1/ewf1
GUID Partition Table (EFI)
Units are in 512-byte sectors
Slot Start End Length Description
006: 002 0000239616 0063215409 0062975794 Basic data partition (C盘)
008: 003 0063215616 0124243967 0061028352 Basic data partition (D盘)
009: 004 0124243968 0124653567 0000409600 Basic data partition (E盘,加密)
$ mount -o ro,offset=$((239616\*512)) /mnt/ev1/ewf1 /mnt/evC
$ ls /mnt/evC
$Recycle.Bin Program Files Program Files (x86) Users Windows
解释一下这四步在做什么:ewfmount 把 E01 解压后虚拟成一块裸盘 ewf1;mmls 告诉你这块盘上有哪几个分区、每个分区从第几个扇区开始;mount 的 offset 就是把其中某个分区从裸盘里\"抠\"出来挂载成目录。之后 cd 进去就能翻文件了。注意 E 盘那个分区挂不上,它带 -FVE-FS- 签名,是被 BitLocker 加密过的,那是另一件事。
二、方式二:dissect
思路更直接:不挂载,把整个镜像当成一个 Python 对象来读。分区、文件系统、注册表、事件日志它都认识,想要什么直接问它。
1. 安装部署
机器上要有 Python 3.10 以上。先建一个独立的运行环境(避免弄乱系统 Python),再用阿里云的 pip 源安装:
python -m venv dissect-env
dissect-env\Scripts\activate
pip install -i https://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com dissect libewf-python colorama
也可简单粗暴:
装完可以用自带的命令行工具验证,它能列出所有支持的插件:
target-query -l | head -20
(我能列出 41 个加载器、436 个插件)
2. 怎么用:三行代码
from dissect.target import Target
t = Target.open(\"lihh\_PC.E01\")
t.hostname, t.version
('WINDOWS-10', 'Windows 10 Pro (NT 10.0) 19044.1706')
t.ips
['192.168.124.225']
镜像打开用不了 5 秒,主机名、系统版本、IP、有几个分区、有哪些用户,全都自己报出来了。想要系统账户和密码哈希也是一句话的事:
for u in t.sam(): print(u.username, u.rid, u.nt, u.lastlogin)
Administrator 500 86c324a8b01c1557caa591e6b2b9a145 2023-12-15 07:31:56
Guest 501 ...
DefaultAccount 503 ...
WDAGUtilityAccount 504 544d1946a8040bb34612d9e85a542...
这个 NTLM 哈希丢给 hashcat,几十秒就能跑出明文密码。 dissect 还带了 14 个现成的命令行工具,target-query、target-info、target-fs 这些,不写代码也能用。
三、同一个检材实测
检材是 10.6GB 的 lihh\_PC.E01,GPT 分区表,6 个分区。两种方式在同一台机器上各跑一遍,下面是真实数据。
这张图最能说明问题:把镜像从头到尾读一遍并算校验值,dissect 每秒 1560MB,WSL2 那条路每秒只有 147MB,差了 10 倍。原因是 WSL2 读 Windows 磁盘上的文件,中间隔着一层翻译协议(叫 9P),再加上 ewfmount 自己的虚拟文件系统,两层开销叠在一起;dissect 是在 Windows 上直接读,中间没有人转手。
四件日常活儿的耗时列成表:
| 要做的活儿 | dissect | WSL2+ewfmount | 倍数 |
|---|---|---|---|
| 数清全盘 14 万个文件(含已删除) | 2.2 秒 | 15.3 秒 | 6.8 倍 |
| 读一个 63MB 大文件并算校验值 | 0.08 秒 | 0.49 秒 | 6.0 倍 |
| 解析安全日志找登录记录 | 1.0 秒 | 8.1 秒 | 7.9 倍 |
| 翻 MFT 找已删除文件 | 2.2 秒 | 10.4 秒 | 4.7 倍 |
有几处细节值得说。解析安全日志,dissect 解出 3618 条记录、422 条登录事件,python-evtx 解出 3486 条、413 条,它遇到损坏记录会直接跳过,dissect 多解出 132 条,这些可能正是被删过或者写坏了的记录。找已删除文件两条路都支持,WSL 靠 TSK 的 fls -rd,dissect 直接遍历 MFT,速度差 4.7 倍。
部署体验上的差别比数字更直观。WSL 那条路,挂载前要先用 mmls 查分区起始扇区,挂载后用完要手动卸载、删 loop 设备,我这次实测就先后碰上三个问题:mmls 输出的扇区号带前导零被 shell 当成八进制、ntfs-3g 的 offset 参数在这类虚拟盘上不生效(得换成 mount 自带的 loop 挂载)、同一个 ewf1 不能挂两个分区。每一条都不难解决,但都要现查。dissect 这边从头到尾只有一句 Target.open(),没有挂载,也就没有清理。
dissect 也不是没毛病。如果你按 Python 习惯用 rglob 一个个去 stat 文件属性,全盘 14 万个文件要跑将近 10 分钟,这个写法很自然,一不小心就掉进去。正确姿势是走它的 MFT 接口,同样 14 万条记录 2 秒出头。这一条是我实测里最贵的一次教训。
四、怎么选
想把检材挂成一个盘符,例如交给 Autopsy、超级取证大师这类图形化工具去分析,用 WSL2+ewfmount,它天生就是干这个的。
想快速看清检材里有什么、要写脚本批量提取注册表和日志、要在大镜像上反复跑同一个分析,用 dissect,速度和可编程性都不在一个量级。
两个都留着是最省事的做法:挂载交给 WSL,深挖交给 dissect,按活儿挑工具。
文中的镜像、命令和数据都是真实跑出来的,两条路的安装部署照着敲就能复现。有问题欢迎留言。
敬请各位大佬关注:小谢取证
扫取二维码获取
更多精彩
小谢取证
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论