LOADING

加载过慢请开启缓存 浏览器默认开启

电子取证——邮件篇

在网络诈骗案件中,钓鱼邮件往往是受害人接触诈骗链条的第一步。邮件取证不是只看“发件人显示是谁”,而是要把邮件头、MIME 结构、附件、认证结果和投递链条一起看。

这篇文章先讲邮件取证中最常用的知识点,再用 2025 年美亚杯团队赛邮件材料前 16 题来对应练习。写题的时候要记住一个原则:邮件客户端显示出来的内容只是结果,真正的证据要回到原始 EML 和邮件头里找。

1. 邮件由哪几部分组成

一封邮件可以粗略拆成三层:信封、邮件头、邮件体。

信封(Envelope) 是 SMTP 传输过程中使用的信息,例如 MAIL FROMRCPT TO。它更像快递系统里的投递指令,用户平时在客户端里不一定能直接看到。取证时常通过 Return-Path、投递日志、邮件服务器日志去补充判断。

邮件头(Header) 是邮件取证的核心区域,里面记录了元数据和投递过程。常见字段包括:

字段 取证意义
Received 邮件经过哪些服务器。一般自下而上读,最下面更接近发起端
From 客户端显示的发件人,容易被伪造
Reply-To 收件人点击回复时实际回到哪里
Return-Path 退信地址,常对应信封发件人
Message-ID 邮件唯一标识,常能反映生成邮件的客户端或域
Date 发件客户端写入的时间,不一定等于服务器接收时间
Authentication-Results SPF、DKIM、DMARC、ARC 等认证结果
User-Agent / X-Mailer 发送邮件的软件或客户端

邮件体(Body) 是正文和附件所在的位置,通常遵循 MIME 标准。正文、HTML、内嵌图片、附件会被拆成多个 MIME part,每一段由 boundary 分隔。

区分正文和附件时,最常看的字段是:

Content-Disposition: inline
Content-Disposition: attachment

inline 更偏向正文内嵌内容,attachment 才是独立附件。注意:附件即使用 Base64 编码写在 EML 文本里,也仍然可以是独立 MIME part,并不等于“嵌入在正文中”。

对应题目:邮件取证时应注意什么

题 1:在电子邮件取证方面,警方需要注意以下哪些要点?

A. 修改邮件时间戳等元数据以迎合调查时间线
B. 全面检索相关草稿箱与已删除邮件数据
C. 必须确认取证行为获得合法授权,并严格限定提取范围
D. 确保元数据完整性,原始 eml 文件应作为证据链关键环节保存
E. 应备份邮件系统相关日志,确保调查工作有据可查

答案:BCDE

这题是基本原则题。取证不能为了匹配案情去改元数据,A 明显错误。邮件案件里除了收件箱,还要看草稿箱、已删除邮件、服务器日志、客户端缓存和原始 EML。原始 EML 很重要,因为邮件头、MIME 边界、编码方式、附件传输方式都在里面。

2. MIME 结构、附件和编码

邮件正文和附件不是简单拼在一起的,而是按 MIME 结构组织。一个常见邮件可能长这样:

multipart/mixed
├── multipart/alternative
│ ├── text/plain
│ └── text/html
├── image/jpeg Content-Disposition: inline
└── application/pdf Content-Disposition: attachment

取证时要先看结构,再看内容。只看客户端预览很容易误判附件、内嵌图片和正文之间的关系。

常见编码方式如下:

编码 识别标志 常见位置 取证重点
Base64 Content-Transfer-Encoding: base64 附件、图片、二进制内容 需要解码后再做文件类型、哈希、EXIF、恶意代码检查
Quoted-Printable quoted-printable 或邮件头里的 =?utf-8?Q?...?= HTML 正文、邮件标题 大量 =E4 这类十六进制转义
7bit 7bit 纯 ASCII 英文 基本可直接阅读
8bit 8bit UTF-8 文本 可直接承载非 ASCII 字符
binary binary 极少见 SMTP 传输中受限,实际邮件里通常不用
Encoded-Word =?charset?B?...?==?charset?Q?...?= Subject、显示名 邮件头专用编码

邮件头里的编码要特别注意。例如:

Subject: =?utf-8?Q?Exclusive_Invitation=3A_IQ_Coin?=
Subject: =?utf-8?B?5L2g5aW9?=

Q 代表 Q-Encode,接近 Quoted-Printable;B 代表 Base64。很多钓鱼邮件会把标题拆成多段编码,绕过关键词匹配。

对应题目:附件结构

题 2:请分析邮件材料中的附件结构,并指出哪项描述正确?

A. PDF 附件包含 JavaScript 代码,用于从外部来源动态加载内容
B. JPG 附件的元数据包含地理位置信息
C. 邮件附件并非以独立附件传输,而是以 Base64 编码方式嵌入在正文中
D. 邮件中有使用标准 ASCII 字符集编码系统表示字符及未加密的纯文本文件附件
E. 以上皆不正确

答案:E

分析思路:

  1. PDF 可以用 pdfid.py 检查 /JS/JavaScript/OpenAction 等危险标记,题中 PDF 没有 JavaScript 代码块。
  2. JPG 附件查看 EXIF 后没有地理位置信息。
  3. 附件位于独立的 Content-Disposition: attachment MIME part 中。Base64 只是附件传输编码,不代表它不是独立附件。
  4. 没有 Content-Type: text/plain 的纯文本附件,附件也不是“标准 ASCII 字符集未加密纯文本文件”。

对应题目:MIME 中未使用的编码

题 3:请分析 MIME 格式结构,并指出哪种内容编码未被使用?

A. 7bit
B. quoted-printable
C. base64
D. binary
E. 8bit

答案:D

题中能看到 =?utf-8?Q?...?= 这类 Q-Encode/Quoted-Printable 痕迹,也能看到明显的 Base64 块。英文内容对应 7bit,UTF-8 非 ASCII 文本可以视为 8bit 范畴。binary 在标准邮件传输中受限制,实际附件通常会转成 Base64,因此本题未使用的是 binary

对应题目:附件里的钱包地址

题 4:哪两个附件藏有加密货币地址 0x548dafDe4B17d7d3C9485E79B3B5018801C7855E

A. IQ_1.jpgIQ coin proposal.pdf
B. IQ_Coin_Tokenomics_Overview.pdfIQ_Coin_Compliance_Summary.pdf
C. 7b3e4512-1d8d-4d54-AA1c-5b004ce23A6f.jpegIQ_Coin_Compliance_Summary.pdf
D. IQ_1.jpg7b3e4512-1d8d-4d54-AA1c-5b004ce23A6f.jpeg
E. IQ coin proposal.pdfIQ_Coin_Compliance_Summary.pdf

答案:D

这题考的是附件内容分析,不是邮件头。两个图片附件里都有二维码,二维码解码后能得到目标钱包地址。比赛中可以用 QR Research、BQRCodeReader、zbarimg 或在线/离线二维码工具识别。实际取证时建议导出附件后计算哈希,再对二维码结果截图或记录工具输出,形成证据链。

3. 发件人显示、原始发件人与身份认证

邮件里最容易误导人的就是 From。客户端显示的发件人可以和原始发件人、回复地址、投递账户不一致。

常见相关字段:

字段 说明
From 用户看到的发件人
X-Google-Original-From Gmail 等服务保留的原始发件人信息
Reply-To 回复地址
Return-Path 退信地址
Authentication-Results 认证结论

现代邮件认证主要看 SPF、DKIM、DMARC、ARC。

SPF 检查发件 IP 是否被发件域授权。它回答的是“这台服务器有没有资格代表该域发信”。

DKIM 使用数字签名验证邮件内容和部分头字段是否被篡改。它回答的是“这封邮件是否由持有该域私钥的一方签过名”。

DMARC 在 SPF/DKIM 之上增加域名对齐要求。只有 SPF 或 DKIM 至少一个通过,并且与 From 域对齐,DMARC 才能通过。

ARC 用于转发场景,记录中间节点看到的认证结果。如果 ARC 为 None,说明没有 ARC 链可以帮你背书,这时更要回到 SPF、DKIM、DMARC、域名对齐和 Received 链综合判断。

对应题目:原始发件人与显示发件人

题 5:哪一封邮件的原始发件人地址是 marketing@manson.com

答案:Exclusive Invitation_IQ Coin Pure Growth Fund – Special Offer for You 2025-04-29T18_35_47+08_00.eml

也就是选项 A

这题要看邮件头中的原始发件人字段。该邮件客户端显示为:

Marketing <mansonmfi@gmail.com>

但邮件头中可以看到:

X-Google-Original-From: Marketing <marketing@manson.com>
Reply-To: Marketing <marketing@manson.com>

因此原始发件人线索指向 marketing@manson.com,而收件人界面看到的发件地址不是它。

题 6:根据上一题,收件者会见到这封邮件来自哪一个邮箱地址?

答案:mansonmfi@gmail.com

这题要区分“原始发件人”和“用户看到的 From”。客户端收件界面显示的是 Marketing <mansonmfi@gmail.com>,所以收件者看到的是 Gmail 地址。

对应题目:ARC 为 None 时怎么判断真伪

题 7:邮件头中 ARC 验证结果为 None 时,可以通过哪些方式辅助判断邮件真伪?

A. SPF
B. DKIM
C. 域名对齐
D. 以上皆可以

答案:D

ARC 没有结果不代表邮件一定假,只是少了一条转发链背书。此时要看 SPF 是否授权、DKIM 是否签名通过、From 与 SPF/DKIM 域是否对齐,再结合 Received 链判断来源是否合理。

4. Received 链、客户端和传输安全

Received 是邮件溯源最常用的字段。阅读顺序一般是自下而上:越下面越接近邮件发起端,越上面越接近最终收件服务器。

常见关键字:

关键字 意义
with ESMTPS 使用加密 SMTP 传输
with ESMTPSA 使用 SMTP AUTH,说明经过身份认证提交
with HTTP 常见于网页版邮件提交
by smtp.gmail.com 邮件由 Gmail SMTP 服务处理
using TLSv1.3 with cipher ... 传输层安全版本和加密套件

邮件客户端也可能写入:

User-Agent: eM Client/10.3.1503.0
X-Mailer: ...

这类字段可以回答“用什么软件发送”,但也要注意它们理论上可以被伪造,需要和投递链、Message-ID 形态一起看。

对应题目:是否经 Gmail 服务器发送

题 8:分析 Exclusive Invitation...eml 邮件头,哪项说法正确?

答案:D. 邮件路由信息与域名引用证实该邮件经 Gmail 服务器发送邮件

关键证据在 Received 链:

Received: from mail-pl1-f193.google.com ...
Received: from ?IPv6:::ffff:192.168.220.130? ...
by smtp.gmail.com with ESMTPSA ...

smtp.gmail.comESMTPSA 说明这封邮件是通过 Gmail 的 SMTP 服务并经过认证提交。注意这只能说明经过 Gmail 发出,不等于内容可信,也不等于 manson.com 域名身份一定真实。

对应题目:发送客户端

题 9:该邮件使用哪一个邮件客户端软件发送?

答案:eM_Client/10.3.1503.0

直接看邮件头:

User-Agent: eM Client/10.3.1503.0

题目要求“连同版本代号根据标题文件内原文作答”,所以要保留完整字符串。

对应题目:检测欺骗或标头伪造的字段组合

题 10:哪组标头组合可用于检测欺骗或标头伪造行为?

A. From、To、Subject
B. Message-ID、Received、Authentication-Results
C. DKIM、MIME-Version、Content-Type
D. Return-Path、X-Gm-Message-State、X-Pm-Spam
E. DKIM-Signature、SPF、Authentication-Results

答案:B

From/To/Subject 是展示层字段,容易伪造且不能单独证明来源。真正判断伪造时,应结合:

  1. Received:投递路径是否合理;
  2. Authentication-Results:SPF、DKIM、DMARC 结果;
  3. Message-ID:生成域、格式和客户端特征是否与声称来源矛盾。

E 里虽然有 DKIM、SPF,但 SPF 通常是认证结果,不是一个独立原始头字段;而且缺少 Received 链,不如 B 完整。

对应题目:Received 跃点数量

题 11:分析 Re_Proposal...2025-05-02T15_14_02+08_00 的 Received 链,邮件从发起到送达 ProtonMail 经历多少网络跃点?

答案:B. 2 个跃点:发件人客户端 -> Gmail 服务器 -> ProtonMail 服务器

邮件头中能看到三条 Received

Received: ... by mailinosl106.protonmail.ch ...
Received: by mail-ed1-f54.google.com ...
Received: by ... with HTTP ...

最下面的 with HTTP 代表网页版发起,随后进入 Gmail,再到 ProtonMail。题目按网络投递链概括为客户端到 Gmail、Gmail 到 ProtonMail,所以答案是 2 个跃点。

对应题目:相同 IPv6 地址说明什么

题 12:两封邮件源自相同 IPv6 地址,下列哪个正确?

答案:B. 这说明两封邮件经过了同一出站节点

相同 IPv6 可以作为关联线索,但不能直接证明“同一台设备”“同一账号”或“具体某个人”。邮件服务商可能有前端、代理、负载均衡和隐私保护机制。比赛里这类题要保守表述:它说明两封邮件经过同一出站节点。

对应题目:TLS 加密套件

题 13:邮件通过 TLSv1.3 传送时使用了哪一个加密套件?

答案:A. AES 256 GCM SHA384

邮件头中有类似字段:

using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384

所以对应选项是 AES 256 GCM SHA384。这里考的是从 Received 头里读 TLS 元数据,不需要真正解密邮件。

5. Message-ID 与时间线

Message-ID 的常见格式是:

<unique-string@domain>

它通常由发件客户端或邮件系统生成。取证时可以看:

  1. Message-ID 的域是否与发件系统一致;
  2. 不同邮件的 Message-ID 形态是否相似;
  3. Date、最底层 Received 时间和文件名时间是否能互相对应;
  4. In-Reply-ToReferences 是否能还原邮件会话链。

时间线题要区分:

时间 来源 可信度与用途
Date 发件客户端写入 可被客户端影响,但能表示邮件声称创建时间
最底层 Received 时间 第一台接收服务器记录 更适合判断进入标准投递链时间
最上层 Received 时间 最终收件服务器记录 更接近送达时间
文件系统时间 EML 文件落盘时间 反映保存/导出时间,不一定是发信时间

对应题目:Message-ID 是否有伪造嫌疑

题 14:检查 Exclusive Invitation...eml 的 Message-ID 与发件人地址关系,判断是否存在伪造嫌疑。

答案:A. 正确

邮件头中能看到类似:

Message-Id: <...@8b19b573.com>
From: Marketing <mansonmfi@gmail.com>
Reply-To: Marketing <marketing@manson.com>

表面发件人是 Gmail 地址,原始/回复线索又指向 marketing@manson.com,但 Message-ID 域却是 8b19b573.com。这种不一致是伪造或异常客户端生成的可疑信号。

对应题目:进入标准投递链的起点时间

题 15:对 Re_Proposal...2025-05-02T14_37_03+08_00.eml 溯源,列出邮件进入标准化投递链条起点,即第一个接收这封邮件的服务器日期及时间(GMT+8)。

答案:2025-05-02 14:37:00

关键是找最底层 Received

Received: by 2002:a17:906:eb0c:b0:ace:ee33:12ee with HTTP;
Thu, 1 May 2025 23:37:00 -0700 (PDT)

2025-05-01 23:37:00 -0700 换算到 GMT+8,需要加 15 小时,得到:

2025-05-02 14:37:00

对应题目:该时间是否等于邮件建立时间

题 16:根据上一题,这个日期时间是否等于这封邮件的建立时间?

答案:A. 正确

邮件头中 Date 字段同样是:

Date: Thu, 01 May 2025 23:37:00 -0700

换算到 GMT+8 后就是 2025-05-02 14:37:00。所以本题中“进入投递链起点时间”和邮件 Date 声称的建立时间一致。

6. 邮件取证小结

做邮件题时可以按这个顺序来:

  1. 保留原始 EML,不要只看客户端截图。
  2. 先看 MIME 结构,区分正文、内嵌图片和独立附件。
  3. 导出附件后做文件类型、哈希、EXIF、二维码、PDF 风险标记检查。
  4. FromReply-ToReturn-PathX-Original-From,区分显示身份和原始身份。
  5. 自下而上读 Received,找发起端、邮件服务商、收件服务器和时间。
  6. Authentication-Results,结合 SPF、DKIM、DMARC、ARC 和域名对齐。
  7. 检查 Message-IDUser-AgentDateReferences,判断客户端、会话链和伪造嫌疑。

如果一句话总结:邮件取证不是相信“谁发来的”,而是证明它怎样被构造、怎样被投递、怎样被认证、又怎样被收件人看到。