【问题标题】:Is there any way that I can identify whether the PDF is edited/tampered and the exact location where the PDF is edited/tampered using Python?有什么方法可以识别 PDF 是否被编辑/篡改以及使用 Python 编辑/篡改 PDF 的确切位置?
【发布时间】:2021-02-09 03:43:56
【问题描述】:

我正在努力识别银行对帐单 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。

谢谢。

【问题讨论】:

  • 您必须详细说明篡改的含义以及未篡改的含义。你所有的银行对账单都是同一个模板吗?来自同一来源?在您的示例中,如果是真实情况,您怎么知道哪个是正确的,哪个不是(篡改)?

标签: python pdf pdfminer pymupdf tampering


【解决方案1】:

确保 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 库来检查此类详细信息并确定差异。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-30
      • 2012-07-03
      • 1970-01-01
      • 2022-08-04
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多