文档取证

文档取证检查读取的是文件在可见内容之外携带的东西:元数据声称的作者是谁、哪个工具生成了它、时间戳声称它何时被修改、哪些早期修订、嵌入文件或不可见文本仍留在里面。在下方放入 PDF、PNG 或 JPEG,本页面会在你的浏览器中本地报告这些事实,每项都附它读取到的具体数值。先讲清两个限制:文件永不上传——它只在这台设备上解析,不到任何其他地方;而且本工具报告的是事实,不是判定:结构证据无法证明文件由谁创建,因此这里没有分数,也没有作者归属判断。配套文章PDF 元数据与隐藏数据解释了每类数据藏在哪里、真实泄漏是如何发生的;PDF 无障碍检查器覆盖 PDF 的阅读结构,二进制检查器覆盖可执行文件。

最后更新:

或者将文件拖到此框中的任意位置。文件在本设备上读取,永不上传。限制:20 MB。

事实,不是判定——本页面不能告诉你的事

元数据是证词,不是证据。作者字段只是某个程序写进文件的一段文字,这些数值中的任何一项都可以被编辑、从另一份文档复制、或从模板里遗留下来——所以元数据里出现熟悉的名字并不能证明那个人创建了这个文件,出现陌生的工具名也不能证明内容是如何制作的。特别要强调:结构证据无法证明作者归属,本页面对内容是由人还是由软件制作不作任何主张:它只报告实际存在的数值、仍然保留的修订和相互矛盾的时间戳,把解释留给你。请把每项发现都当作需要核实的线索,而不是结论。

本工具报告什么

  • PDF 信息字典字段——标题、作者、创建工具、生成工具和两个日期——作为证据逐字引用。
  • XMP 元数据包(如存在),并提取其标题、生成工具与创建/修改日期。
  • 增量更新结构:文件携带多少个 %%EOF 标记和 startxref 段,以及 /Prev 预告片链的深度。
  • 嵌入文件迹象、用渲染模式 3 绘制的隐藏文本,以及加密标志。
  • PNG 数据块清单(解码文本块与 tIME 时间戳);JPEG 段清单(JFIF、Exif 与 XMP 字段及注释文本)——以及两种格式中结束标记之后的任何尾随字节。

文档在内容之外还携带什么

这里涵盖的每种文档格式都是一个容器,而不只是内容的图片。PDF 携带一个信息字典——标题、作者、创建工具、生成工具和两个日期——由导出它的应用写入,文档的作者通常从未见过它。与它并存的是,大多数现代生成工具还会嵌入一个 XMP 包:一个 XML 元数据块,可能重复同样的字段、可能加上创建工具的名字,也可能悄悄与信息字典不一致。PNG 图片携带命名的数据块,其中一些存放自由文本——软件名、注释、版权行,有时甚至是整份 XML 文档;JPEG 照片携带相机写入的 Exif 块:品牌、型号、快门触发的日期,以及最后处理该文件的软件。这些内容在正常打开文档时都不可见,却都会随文件一起被发布、发送邮件或提交法庭。

PDF 还有第二层、更深的东西:增量更新。PDF 格式的设计允许编辑器把修改以追加新修订的方式存到文件末尾,而不是重写整个文件,于是早期的字节——包括某段文字的早期版本——物理上仍然存在且可读。一个带有多个 %%EOF 标记的文件就是这样被保存过多次,任何在后续修订中“被删除”的内容可能仍可从早期修订中恢复。这种机制本身合法且对签名和快速保存有用,但它也是朴素涂黑失败的原因:用黑色矩形盖住一段文字,或者在会增量保存的编辑器里删除文字,都可能把原文留给任何愿意去找的人。本页面统计文件结束标记和预告片链,让你看清眼前的文件是否有过去。

同样的容器逻辑解释了其他检查。PDF 可以携带嵌入文件——完整附件就存放在文档内部,列在它的嵌入文件名树里——读者可能从未注意到,但接收者可以提取出来。它还可以携带隐藏文本:PDF 文本以某种渲染模式绘制,而模式 3 什么都不画,却把字符留在内容流中,可复制、可搜索,但在页面上不可见——这是本应被移除的文字的经典藏身处,偶尔也是从未打算被看到的文字的藏身处。PNG 与 JPEG 文件有它们自己版本的同一故事:追加在结束标记之后的字节被每个查看器忽略,却仍留在文件中;文本块和注释段则常常比写下它们的编辑会话活得更久。

时间戳是文档自相矛盾的地方。一个 PDF 的信息字典里至少有两个日期,XMP 包里通常还有两个,由不同的工具在不同的时刻写入——导出器、编辑器、上传时重新压缩它的优化器。当创建日期落在修改日期之后、当 XMP 日期与信息字典不一致、或者某个日期落在未来时,这条链中的某处没有讲出一致的故事:可能是时钟错了,可能是字段被编辑过,也可能是文件由具有不同历史的碎片拼凑而成。这些解释没有一个自动意味着恶意,本页面也不会替你选:它把两个数值并排展示,让不一致显形,而不是被埋没。相机的 Exif 日期和 PNG 的最后修改块同理:时间戳是文件提出的一项主张,而交叉核对主张正是这个工具的全部意义。

请在发布之前使用这些结果,而不是等别人发布之后。在内部报告、截图和照片外发之前,先用这样的检查过一遍,读一读会随它们一起泄漏的东西:作者姓名和用户名、内部工具名、原始日期、你忘记的附件、仍然保存着法务删掉的那段话的修订。然后把清理变成一个有意的步骤——从源头重新导出并剥离元数据、把文件完整重写和压平,而不是增量保存——并对你真正发出的那份副本再检查一次。整个过程中也要记住诚实限制:干净的结果意味着在本页面查看的地方没有发现结构上的意外;它不证明文档的来源,而意外的结果是一个要问的问题,不是一项可以提出的指控。

常见问题

我的文件会被上传到任何地方吗?

不会。文件在本页面、你的设备上打开和解析,任何内容都不会被上传、传输或存储。分析文件不会发出任何网络请求,所以页面加载后可以离线工作——这一点很重要,因为最值得检查的文档恰恰是你不该发给陌生人服务器的那些。

这个工具能告诉我文件是谁创建的,或者是不是 AI 做的吗?

不能——对任何声称能做到的工具都要保持警惕。元数据字段是程序写进文件的一段文字;它们可以被编辑、从模板继承或从另一份文档复制,因此它们是证词,不是证据。结构证据无法确立作者归属。本页面报告实际存在的数值和文件自相矛盾的地方,把作者问题留给真正能回答它的证据。

什么是增量更新?为什么它重要?

PDF 编辑器可以通过追加新修订而不是重写文件来保存修改。每次保存留下一个 %%EOF 标记,所以多个标记意味着多次追加修订——而早期修订在字节中仍然可读,包括后续修订看似删除的内容。这就是为什么用矩形盖住文字或在增量保存中删除文字并不能把文字移出文件。完整重写或重新导出才能真正丢弃旧字节。

我在 PDF 里发现了隐藏文本。这意味着有人作弊吗?

单凭这一点不能。渲染模式 3 绘制的文本不可见但存在,而且它有正当理由:OCR 层位于扫描页面图像之后,让页面可以被搜索和复制;一些生成工具也会为索引发出不可见文本。当不可见文本本应消失时它才成为问题——一个仍可复制的被涂黑姓名就是泄漏,无论意图如何。请把这项发现读作“看这里”,而不是判定。

发布前如何移除这些元数据?

尽量在源头处理:在创作工具中清除文档属性,导出时关闭元数据选项;对 PDF,优先选择完整重写——打印为 PDF 或使用专门的清理工具——而不是增量保存。对图片,通过会剥离 Exif 和文本块的工具重新导出,而不是原地编辑。然后把清理后的副本再放回本页面检查一次,确认你在意的那些发现确实消失了。