2026年第六届FIC全国网络空间取证大赛初赛解题思路|二进制程序部分|Hermes自动化分析

admin 2026-04-27 04:56:36 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详细记录了使用Hermes自动化取证框架分析FIC网络空间取证大赛E01镜像的完整流程,涵盖镜像解析、PE文件静态分析、逆向工程、RC4解密及数据统计。通过SleuthKit提取samplevc.exe与vc文件,结合Radare2逆向分析确认密码为16字符的’pleaserunasadmin’,解密vc文件获得VHD虚拟磁盘并提取交易记录Excel,最终统计出李安弘虚拟币收款地址总收款金额。 综合评分: 87 文章分类: CTF,二进制安全,逆向分析,取证分析


cover_image

2026 年第六届 FIC 全国网络空间取证大赛初赛解题思路|二进制程序部分|Hermes自动化分析

原创

0xSec笔记本 0xSec笔记本

0xSec笔记本

2026年4月25日 17:23 浙江

在小说阅读器读本章

去阅读

📢 免责声明

本文所述技术仅用于合法授权的安全研究、教学演示及防御机制开发。作者及发布平台不承担因读者误用、滥用本内容所导致的任何法律责任。请严格遵守《中华人民共和国网络安全法》及相关法律法规。

换电脑后没装取证软件,电脑上只装了虚拟机,使用Hermes尝试做了一下今天的FIC初赛题目,自己对逆向基本看不懂,用ai来分析的感觉不要太舒服!!!哈哈哈

本文使用 Hermes 自动化取证框架对赛题进行分析,完整还原从 E01 镜像到交易数据提取的全流程。环境:Kali Linux,工具链:Sleuth Kit / exiftool / radare2 / python-openpyxl。


Hermes自动化分析,基本一次性全部得到答案

        检材为一个 E01 格式取证镜像(检材4-U盘.E01),考察方向涵盖:镜像解析、PE 文件静态分析、逆向工程、加密解密与数据统计,共五道小题。

Hermes详细版分析流程


确认检材类型

拿到 .E01 文件后,第一步不是直接挂载,而是确认它的镜像格式和基本信息。

使用工具

1

2

3

file
ewfinfo
command -v

执行命令

1

2

3

file /home/kali/Desktop/检材4-U盘.E01

ewfinfo /home/kali/Desktop/检材4-U盘.E01

同时检查后续会用到的工具是否存在:

1

2

3

4

5

6

7

8

9

10

11

12

command -v ewfmount
command -v mmls
command -v fsstat
command -v fls
command -v icat
command -v tsk_recover
command -v md5sum
command -v exiftool
command -v r2
command -v rabin2
command -v 7z
command -v python3

关键结果

file 显示:

1

EWF/Expert Witness/EnCase image file format

ewfinfo 显示:

1

2

3

4

5

6

File format: FTK Imager
Media size: 57 GiB
Bytes per sector: 512
Number of sectors: 121610240
MD5: d58b8a184cb32af1c4bb3f8b1c3f9131
SHA1: 1f7119dcb3b0384324cb19122b5d5f080ce082b1

说明该检材是由 FTK Imager 生成的 E01 取证镜像,对应一个约 57GB 的物理磁盘或 U 盘镜像。


枚举文件系统,定位关键文件

题目明确提到需要分析 U 盘中的 SampleVC.exe,所以接下来需要在镜像中找到这个文件。

准备目录

1

mkdir -p /home/kali/u4_ewf /home/kali/u4_extract /home/kali/u4_recover /home/kali/u4_vhd_extract

尝试挂载 E01

1

ewfmount /home/kali/Desktop/检材4-U盘.E01 /home/kali/u4_ewf

虽然过程中出现了 FUSE 权限提示:

1

2

fusermount3: failed to access mountpoint /home/kali/u4_ewf: Permission denied
Unable to fuse mount file system.

但目录下仍然生成了 ewf1

1

/home/kali/u4_ewf/ewf1

因此可以继续使用 Sleuth Kit 对其进行分析。

识别文件系统

1

fsstat /home/kali/u4_ewf/ewf1

关键输出:

1

2

3

File System Type: NTFS
Volume Serial Number: 84064D70064D6470
Version: Windows XP

说明镜像内部文件系统是 NTFS。

枚举文件

1

fls -r -p /home/kali/u4_ewf/ewf1

发现两个关键文件:

1

2

r/r 40-128-3: SampleVC.exe
r/r 39-128-3: vc

其中:

  • • SampleVC.exe:题目要求分析的加密程序
  • • vc:疑似被加密的数据文件

导出 SampleVC.exe 和 vc

为了避免直接修改镜像,使用 icat 将目标文件导出到工作目录中。

1

2

3

icat /home/kali/u4_ewf/ewf1 40 > /home/kali/u4_extract/SampleVC.exe

icat /home/kali/u4_ewf/ewf1 39 > /home/kali/u4_extract/vc

问题一:分析u盘检材,找到其中保存的加密程序SampleVC.exe,请给出该SampleVC.exe 的 MD5 是什么?

计算 MD5

1

md5sum /home/kali/u4_extract/SampleVC.exe

输出结果:

1

764789dd9c095d74b6b258cf0f7568b2  /home/kali/u4_extract/SampleVC.exe

答案

1

764789dd9c095d74b6b258cf0f7568b2

需要注意的是,题目问的是 SampleVC.exe 文件本身的 MD5,不是 E01 镜像的 MD5,也不是分区或磁盘的 MD5。


问题二:分析SampleVC.exe,该程序编译的日期可能是什么?

查看 PE 元数据

1

exiftool /home/kali/u4_extract/SampleVC.exe

关键字段:

1

2

3

4

5

File Type : Win64 EXE
Machine Type : AMD AMD64
Time Stamp : 2026:04:17 01:53:20-04:00
PE Type : PE32+
Subsystem : Windows GUI

使用 rabin2 交叉验证

1

rabin2 -I /home/kali/u4_extract/SampleVC.exe

看到:

1

compiled Fri Apr 17 01:53:20 2026

答案

完整时间可以写为:

1

2

3

4

2026-04-17 01:53:20 -04:00

# 北京时间 UTC + 8  05:53:20 + 8:00 = 13:53:20
2026-04-17 13:53:20

如果题目只要求日期,则写:

1

2026-04-17

PE 文件头中的 Time Stamp 通常可以作为程序链接或编译时间的参考依据。虽然该字段理论上可以被伪造,但在这类取证题中,它通常就是标准答案来源。


问题三: 分析SampleVC.exe,正确的密码是什么?

这一题不能仅靠猜测,需要结合程序逆向和解密验证。

先查看字符串

1

2

3

strings -a -n 4 /home/kali/u4_extract/SampleVC.exe

strings -a -el /home/kali/u4_extract/SampleVC.exe

Unicode 字符串中出现了:

1

.vhd

这说明程序的输出很可能与 VHD 虚拟磁盘有关。

查看导入表

1

rabin2 -i /home/kali/u4_extract/SampleVC.exe

发现程序导入了虚拟磁盘相关 API:

1

2

3

4

OpenVirtualDisk
AttachVirtualDisk
GetVirtualDiskPhysicalPath
DetachVirtualDisk

这说明程序可能会把解密结果作为虚拟磁盘处理。

使用 r2 分析关键逻辑

1

2

3

r2 -q -e bin.relocs.apply=true -c 'aaa; s 0x140002200; pd 260' /home/kali/u4_extract/SampleVC.exe

r2 -q -e bin.relocs.apply=true -c 'aaa; s 0x140001cf0; pd 260' /home/kali/u4_extract/SampleVC.exe

逆向过程中看到几个关键条件:

1

cmp rcx, 0x10

说明密码长度必须是 0x10,也就是 16 个字符。

同时还看到类似字符范围判断:

1

2

sub ax, 0x20
cmp ax, 0x5e

说明密码字符需要位于可打印 ASCII 范围内。

此外,程序还调用了:

1

WideCharToMultiByte

这说明 GUI 输入框中的 Unicode 密码会被转换成多字节字符串,再参与后续校验或解密。

为什么确认密码是 PleaseRunAsAdmin?

最终确认密码为:

1

PleaseRunAsAdmin

原因有四点:

  1. 1. 长度正好 16 个字符;
  2. 2. 全部为可打印 ASCII;
  3. 3. 使用该密码作为 RC4 key 解密 vc 可以得到合法 VHD;
  4. 4. 解密后的 VHD 中能够提取出交易记录 Excel 文件,证据链闭环。

答案

1

PleaseRunAsAdmin

问题四:分析u盘检材,利用SampleVC.exe解密U盘中被加密的文件,解密后的文件的后缀是什么?

在 E01 镜像中找到关键文件

先对 U 盘镜像做文件系统枚举,确认其中存在:SampleVC.exe、vc

关键命令

1

fls -r -p /home/kali/u4_ewf/ewf1
1

2

3

4

5

6

- SampleVC.exe
   - vc

# 说明:
   - SampleVC.exe 是解密程序
   - vc 是被加密的数据文件

导出程序和密文文件

使用 icat 从镜像中导出文件:

1

2

icat /home/kali/u4_ewf/ewf1 40 > /home/kali/u4_extract/SampleVC.exe
icat /home/kali/u4_ewf/ewf1 39 > /home/kali/u4_extract/vc
1

这样后续可以在工作目录中独立分析。

分析 SampleVC.exe,确认它和 VHD 有关

1

先用 strings 和 rabin2 查看程序特征:
1

2

strings -a -el /home/kali/u4_extract/SampleVC.exe
   rabin2 -i /home/kali/u4_extract/SampleVC.exe

关键现象

可以看到:

1

2

3

4

5

- .vhd
   - OpenVirtualDisk
   - AttachVirtualDisk
   - GetVirtualDiskPhysicalPath
   - DetachVirtualDisk

这说明程序会把解密结果处理成虚拟磁盘格式,也就是 VHD。

但是这一步只能说明“中间产物可能是 .vhd”,还不能直接作为最终答案。

用正确密码解密 vc

已通过前面题目确认密码为:PleaseRunAsAdmin,然后使用对应解密逻辑把 vc 解开,输出为:vc.vhd

解密后验证文件类型:

1

2

file /home/kali/u4_extract/vc.vhd
7z l /home/kali/u4_extract/vc.vhd

关键现象 7z 输出中明确显示:

1

Type = VHD

并且还能继续看到 VHD 内部存在 NTFS 文件系统,以及其中的真实文件:

1

usdt_transaction_ledger_70_records.xlsx

这一步非常关键,说明:

1

.vhd 不是最终业务文件,它只是承载真实文件的容器

答案

1

.xlsx

问题五:分析u盘检材,找到被加密的交易记录,统计李安弘虚拟币收款地址钱包总收款金额为

解密后的 VHD 中包含交易记录文件:

1

usdt_transaction_ledger_70_records.xlsx

因此需要先提取 VHD 内容,再统计 Excel 中的交易数据。

解压 VHD

1

7z x -y -o/home/kali/u4_vhd_extract /home/kali/u4_extract/vc.vhd

查看提取结果:

1

find /home/kali/u4_vhd_extract -maxdepth 4 -type f | sort

发现目标文件:

1

/home/kali/u4_vhd_extract/usdt_transaction_ledger_70_records.xlsx

查看 Excel 表格结构

1

2

3

4

5

6

7

8

9

10

11

python3 - <<'PY'
from openpyxl import load_workbook
from pathlib import Path

p = Path('/home/kali/u4_vhd_extract/usdt_transaction_ledger_70_records.xlsx')
wb = load_workbook(p, data_only=True)
ws = wb.active

for&nbsp;row&nbsp;in&nbsp;ws.iter_rows(min_row=1, max_row=15, values_only=True):
&nbsp; &nbsp; print(row)
PY

表头为:

1

2

3

4

5

交易时间
发送方地址 (From)
接收方地址 (To)
金额 (USDT)
交易说明

在记录中发现核心钱包地址:

1

T9yZD7iNUXm3WvCca9W4Xh8K3mNqR5sTkL2wP

统计逻辑如下:

  • • 当该地址出现在 To 字段,且金额为正数时,视为收款;
  • • 当该地址出现在 From 字段,且金额为负数时,视为支出;
  • • 本题要求统计“收款地址钱包总收款金额”,因此只统计正向入账。

编写脚本统计入账金额

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

python3 - <<'PY'
from openpyxl import load_workbook
from pathlib import Path
from decimal import Decimal

p = Path('/home/kali/u4_vhd_extract/usdt_transaction_ledger_70_records.xlsx')
wb = load_workbook(p, data_only=True)
ws = wb.active

wallet =&nbsp;'T9yZD7iNUXm3WvCca9W4Xh8K3mNqR5sTkL2wP'

total = Decimal('0')
rows = []

for&nbsp;r&nbsp;in&nbsp;ws.iter_rows(min_row=2, values_only=True):
&nbsp; &nbsp; t, from_addr, to_addr, amount, note = r

&nbsp; &nbsp; if&nbsp;to_addr == wallet and amount is not None and Decimal(str(amount)) > 0:
&nbsp; &nbsp; &nbsp; &nbsp; amt = Decimal(str(amount))
&nbsp; &nbsp; &nbsp; &nbsp; total += amt
&nbsp; &nbsp; &nbsp; &nbsp; rows.append((str(t), from_addr, to_addr, str(amt), note))

print('wallet=', wallet)
print('inbound_count=', len(rows))

for&nbsp;x&nbsp;in&nbsp;rows:
&nbsp; &nbsp; print(x)

print('total_inbound=', total)
PY

脚本输出:

1

2

3

wallet= T9yZD7iNUXm3WvCca9W4Xh8K3mNqR5sTkL2wP
inbound_count= 30
total_inbound= 186948.09

说明该钱包共有 30 笔入账,总收款金额为:

1

186948.09

完整证据链梳理

整道题的分析链路可以概括为:

  1. 1. 检材4-U盘.E01 是 E01 取证镜像;
  2. 2. 镜像内部文件系统为 NTFS;
  3. 3. 在镜像中发现两个关键文件:
  • • SampleVC.exe
  • • vc
  1. 4. 使用 icat 导出两个文件;
  2. 5. 对 SampleVC.exe 计算 MD5,得到:
  • • 764789dd9c095d74b6b258cf0f7568b2
  1. 6. 使用 exiftool 和 rabin2 查看 PE 时间戳,得到编译时间:
  • • 2026-04-17 01:53:20 -04:00
  1. 7. 逆向分析发现程序存在密码校验逻辑,并且输出与 .vhd 有关;
  2. 8. 使用密码 PleaseRunAsAdmin 对 vc 进行 RC4 风格解密;
  3. 9. 解密结果被验证为合法 VHD 文件;
    1. VHD 中存在交易记录:
  • • usdt_transaction_ledger_70_records.xlsx
    1. 解析 Excel 后,统计指定钱包入账金额;
    1. 最终得到总收款金额:
  • • 186948.09

PS:里面的题目与答题格式可能存在偏差,欢迎指正!


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:0xSec笔记本 0xSec笔记本 0xSec笔记本《2026 年第六届 FIC 全国网络空间取证大赛初赛解题思路|二进制程序部分|Hermes自动化分析》

评论:0   参与:  0