0

我有一个将密码存储在 ms sql 数据库中的应用程序,我希望复制用于生成这些密码的算法。

我不得不承认我对下一步应该尝试的东西有点迷茫。

Str in => Output 
0      = 0x81
00     = 0x81 0x95 
000    = 0x81 0x95 0x83
001    = 0x81 0x95 0x82
002    = 0x81 0x95 0x81
100    = 0x80 0x95 0x83
900    = 0x88 0x95 0x83
ddddddddd  = 0x55 0x41 0x57 0x5E 0x4E 0x48 0x4F 0x57 0x40
dddddddddd = 0x55 0x41 0x57 0x5E 0x4E 0x48 0x4F 0x57 0x40 0x42

输出中找到的字符 => 从 0x21 到 0x9A

我尝试了 xor 但没有得到任何产生结果的东西。我认为每个角色都必须以某种方式依赖于前一个角色,但我找不到将它们联系在一起的任何东西。

在尝试解决这个问题时,是否有我应该检查的过程或顺序?任何人都可以给我一个提示或推动正确的方向来解决它。任何帮助将不胜感激。

编辑测试你的想法 SeanA 似乎被证明是准确的......

dddddddddd = 0x55 0x41 0x57 0x5E 0x4E 0x48 0x4F 0x57 0x40 0x42
ddddd0dddd = 0x55 0x41 0x57 0x5E 0x4E 0x9C 0x4F 0x57 0x40 0x42
dd0ddddddd = 0x55 0x41 0x83 0x5E 0x4E 0x48 0x4F 0x57 0x40 0x42
1234567890123456...   0x80 0x97 0x80 0x8E 0x9F 0x9A 0x9C 0x8B 0x9D 0x96 0x9A 0x98.... 

确实,每个字符都有一个值,具体取决于它在字符串中的位置。密码的大小没有限制。当更多的时间占主导地位时,我将显着增加样本量,是否有任何特定值我应该测试以增加找到关系的机会?

编辑 2

我已经按照建议完成了一个表格 (xls),您可以从 http://www.filedropper.com/result_1下载 这以小数形式显示输入和输出之间的差异图表。显示为十六进制的输入和差值之间存在很强的模式。每个字符位置都有非常一致的模式,沿着图表(该位置的每个字符)。此外,每个位置的可能范围在每组 16 个值中是一致的,这些值与输入值上最高有效位的变化一致显示为十六进制。

然而,我从表中发现我可以用与算法相同的结果对密码进行编码,所以我们的理论似乎成立。

我非常想继续调查并找到算法本身,并且非常感谢任何帮助我找到正确方向的指针。

4

4 回答 4

1

以 100% 的准确率做到这一点在理论上是不可能的。

这就像问,“哪条数学曲线适合所有这些点?”实际上,有无数条曲线可以适合任意有限数量的点。

如果你可以对算法进行限制,那么你也许能够得到一个明确的答案。例如,在信号和系统课程中,您将了解到线性时不变系统(LTI 系统)的特征完全在于其“脉冲响应”——换句话说,您可以通过测试 LTI 系统的响应方式来完全确定它到一个特殊的输入,称为脉冲(瞬时“爆炸”)。但是,如果没有这样的限制,就会有无数种可能性。

于 2011-04-05T01:32:19.047 回答
1

是否有任何我应该测试的特定值可以增加找到关系的机会?

破解未知的加密算法需要根据现有证据开发理论,并看看它们是否有效。在这种情况下,我们有一个理论认为这是一个简单的替换 cifer,每个字符位置都有不同的替换表。

尝试证明如下:

  • 遍历第一个位置的所有可能字符并“读出”相应的加密字符以给出第一个位置的替换表。

  • 重复第 2 次、第 3 次等

  • 捕获所有替换表后,尝试使用多个随机密码来确认算法和表已被正确猜到。

如果最后一步成功,则说明您已经破解了实用的加密算法,并且可以轻松推导出解密算法;例如,通过反转替换表。


我必须说:如果这行得通,这是一个非常蹩脚的加密算法。即使我们没有完全正确,也有太多的可预测性。

于 2011-04-05T03:20:50.930 回答
1

看起来相同位置的相同字符总是产生相同的输出。也许算法只不过是一个表格查找?有最大大小的密码吗?

您可以编写代码来打印位置 1 到 n 的所有字符输出,然后您解决了算法并可以使用您创建的查找来进一步编码密码。

于 2011-04-05T01:38:29.270 回答
0

您无法查看此应用程序的代码或文档吗?如果它使用任何类型的强加密,您将很难对密钥进行逆向工程。看起来它正在使用某种密码反馈机制,因为以前的字符会影响加密。另一方面,它似乎没有使用初始化向量之类的东西,因为相同的起始字符会生成相同的输出。请参阅块密码操作模式以获取那里的一些线索。

也许您知道已经使用了什么密钥?如果你这样做,你可以尝试猜测算法及其参数。特别是如果它是一些常见或众所周知的软件,您可能可以在互联网上搜索找到它。或者,如果它是您自己的软件,那么只需挖掘代码以了解它是如何完成的。它也可能只是一些简单的算法,不是强加密,甚至可能是默默无闻的安全性。在这种情况下,您或其他人可能只能通过一些实验对其进行逆向工程。

于 2011-04-05T03:07:03.357 回答