3

我定期收到编码的 PDF 文件。编码是这样工作的:

  • PDF 可以在 Acrobat Reader 中正确显示
  • 全选并通过 Acrobat Reader 复制测试
  • 并粘贴到文本编辑器中
  • 将显示内容已编码

所以,例子是:

13579 -> 3579;
hello -> jgnnq

它基本上是 ASCII 字符的偏移量(可能是交换)。

问题是当我只能访问几个样本时如何自动找到偏移量。我不能确定编码偏移量是否改变了。我所知道的是一些文本通常(如果不是总是)会出现在 PDF 中,例如“姓名:”、“摘要:”、“总计:”。

谢谢!

编辑:感谢您的反馈。我会尝试将问题分解为更小的问题:

第 1 部分:如何检测字符串中的相同部分?

4

5 回答 5

5

你需要暴力破解它。

如果这些模式很简单,例如您的示例中的 +2 字符代码(即 +2 字符代码)

h i j
e f g
l m n
l m n
o p q

1 2 3
3 4 5
5 6 7
7 8 9
9 : ;

您可以像这样轻松实现以检查已知单词

>>> text='jgnnq'
>>> knowns=['hello', '13579']
>>>
>>> for i in range(-5,+5): #check -5 to +5 char code range
...     rot=''.join(chr(ord(j)+i) for j in text)
...     for x in knowns:
...         if x in rot:
...             print rot
...
hello
于 2010-04-26T08:23:28.770 回答
3

PDF 将包含符号(如数学或证明)还是自然语言文本(英语、法语等)?

如果是后者,您可以使用字母频率图(如果您想走得更远,可以使用二合字母、三合字母和一个小的单词词典)。我想网上可能有一些。 这是一个开始。更具体地说,字母频率

然后,如果你确定这是一个凯撒移位,你可以抓住前 1000 个左右的字符,然后将它们向前移动,增加数量到(我猜)127 个左右。获取结果文本并计算频率与您在上面找到的平均频率的接近程度。 是相关信息。

维基百科上的链接字母频率页面仅显示字母,因此您可能希望在计算中排除它们,或者更好地找到包含它们的图表。您可能还希望将整个生成的文本转换为小写或大写(您的偏好),以便无论大小写如何都以相同的方式处理字母。

编辑 - 看到关于角色交换的评论

在这种情况下,它是一个替换密码,仍然可以自动破解,尽管这一次您可能希望有一个方便的有向图来进行额外的分析。这很有用,因为就字母分析而言,很可能存在比正确语言“更接近”平均语言的替换,但比较二合字母频率可以排除它。

另外,我建议移动字符,然后查看频率与平均语言频率的匹配程度。实际上,您可以先计算密文中的频率,然后尝试将它们与好的值对齐。我不确定哪个更好。

于 2010-04-26T08:55:01.610 回答
1

嗯,这是一个艰难的。

我唯一可以建议的是使用字典(以及一些替换密码算法)可能有助于解码一些文本。

但是我看不到一个解决方案可以用您描述的场景为您解码所有内容。

你为什么不粘贴一些样本输入,我们可以在解码它之前。

于 2010-04-26T08:31:53.387 回答
1

只有当你有很多示例时才有可能(示例计数停止:可能获得所有组合或只是线性值依赖性或场景的想法)。

还有这个问题:我将如何对加密算法进行逆向工程?有一些建议。

于 2010-04-26T08:44:34.067 回答
0

编码文件是否在 Acrobat Reader 以外的 PDF 阅读器中正确打开?如果是这样,您可以只使用 PDF 库(例如PDF Clown)并使用它以编程方式提取您需要的文本。

于 2010-04-26T08:43:57.983 回答