0

我正在努力识别银行对账单 PDF 文档中的伪造/篡改。信息元数据和 XMP 元数据并不总是存在于我拥有的 PDF 中,因此我无法创建任何通用规则来识别被篡改的 PDF。我正在使用 Python 库,例如 PyMuPDF、PDFMiner、PyPDF2 等。

我有两个问题:

  1. 是否有任何具体的方法来识别 PDF 是否被篡改(使用 Python 或任何其他开源技术)?
  2. 如果 PDF 被篡改,那么 PDF 的哪一部分被篡改(使用 Python 或任何其他开源技术)?

附上 2 个 PDF 供参考 -

原文:-“sbi statment_out2.pdf”链接-https://drive.google.com/file/d/1DoWAKYcCudRO-Cwjbgf7RjiJUsF3DD3s/view ? usp=sharing

使用 Sejda 在线编辑器篡改:-“sbi statment_out2_Sejda_edited.pdf 链接 - https://drive.google.com/file/d/1J4eRy9tO3jN8AqEWNrKXtn40G6vdH5G3/view?usp=sharing

在经过调和的 PDF 中,我已将“信用”列下的“2,412.00”编辑为“12.00”。

如果有任何开源解决方案,请让我知道,最好是在 Python 中。

谢谢。

4

2 回答 2

2

确保 PDF 不被篡改的规范方法是只接受由创建者提供数字签名的 PDF 并验证它们,正如 Frank 已经通过指向 Adob​​e 论坛的链接指出的那样。

其变化可能是

  • PDF 制作者通过不同的安全渠道共享 PDF 的哈希值以供您验证,或
  • PDF 的制作者使用只有他们知道的私钥对 PDF 进行了加密,然后您使用匹配的(可能是公钥)对其进行解密。

如果正确实施,这种加密方法是相当安全的。


不幸的是,这些安全方法要求 PDF 的制作者在发布 PDF 时进行相应的合作。

如果制作者不合作并且只是发布没有这种加密保护的 PDF,您仍然可以比较应该类似创建的 PDF 的内部细节。如果这些内部细节差异很大,要么是有人对 PDF 进行了业余篡改,要么是 PDF 制作者更新或切换了 PDF 制作软件。

对于您的示例文件,此类细节存在许多差异,例如

  • 原件声称符合 PDF-1.4,被操纵的副本符合 PDF-1.5。
  • 原始使用 PDF 对象的交叉引用表,复制交叉引用流。
  • 与“SAMBox 2.2.12”相比,原始和副本具有不同的Producer条目,“iText 2.0.4(by lowagie.com)”。
  • 原件在文件的声明日期有一个ModDate条目,副本在此后很长时间内有一个。
  • 原始 PDF 中的 ID 部分彼此不同,副本中的 ID 部分重合。
  • 副本具有用于独立添加内容的典型页面内容流结构,原始没有。
  • 副本有一个没有文本的文本对象(原始文本对象的其余部分绘制后来删除的数字),原始文本没有。
  • 原件只对表格中的数字使用灰度颜色,副本也使用 RGB 颜色。
  • ...

当然,您可以使用 Python PDF 库来检查此类详细信息并确定分歧。

但要注意,这样你只会抓到外行的伪造者。了解自己业务的伪造者几乎不会在其输出中留下任何此类痕迹……

于 2021-02-09T11:53:44.473 回答
0

Adobe 表示,除非签名,否则无法检测 pdf 是否已被修改。

https://community.adobe.com/t5/acrobat-reader/how-to-detect-a-modified-pdf-file/td-p/3546278

于 2021-02-09T06:41:20.687 回答