我有一个将密码存储在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
在output =>中找到的字符从0x21到0x9A
我试过xor然而没有得到任何产生结果的东西。 我认为每个角色必须以某种方式依赖于前者,但我找不到任何将它们连接在一起的东西。
在尝试解决这个问题时,是否应该检查过程或顺序? 任何人都可以给我一个提示或推动正确的方向来解决它。 非常感谢任何帮助。
EDIT 测试你的想法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....
它确实看起来每个char都有一个值,具体取决于它在字符串中的位置。 密码大小没有限制。 当更多的时间流逝时,我将大大增加样本量,我应该测试哪些特定值来增加寻找关系的机会?
我已按照建议填写了表格(xls),您可以从中下载 http://www.filedropper.com/result_1 这显示了输入和输出之间的差异图表,以十进制表示。输入显示为十六进制和差值之间存在强烈模式。 每个焦点位置都有非常一致的模式,它们沿着图表的下方(该位置中的每个字符。)此外,每个位置的可能范围在每组16个值中是一致的,这与输入值上最高有效数字的变化一致。显示为十六进制。
然而,我从表中发现我可以使用与算法相同的结果对密码进行编码,因此我们的理论似乎成立了。我非常希望继续调查并找到算法本身,并且非常感谢任何帮助我找到正确方向的指针。
答案 0 :(得分:2)
以100%的准确率执行此操作理论上不可能。
这就像问“哪条数学曲线适合所有这些点?”,事实上,当有无数条曲线可以适应任意有限数量的点时。
如果您可以对算法进行限制,那么您可能会得到明确的答案。例如,在信号和系统类中,您将了解线性时不变系统(LTI系统)通过其“脉冲响应”完全表征 - 在其他单词,你可以通过测试它如何响应一个叫做 impulse 的特殊输入(一个瞬间的“爆炸”)来完全确定一个LTI系统。但是,如果没有这样的限制,就会有无限多种可能性。
答案 1 :(得分:1)
看起来同一位置的相同字符总是产生相同的输出。也许算法只不过是一个表查找?是否有最大尺寸密码?
你可以编写代码来打印出位置1到n的所有字符输出,然后你就解决了算法,并且可以使用你创建的查找来进一步编码密码。
答案 2 :(得分:1)
我应该测试哪些特定值,以增加找到关系的机会?
破解未知的加密算法是根据现有证据开发理论,并查看它们是否有效。在这种情况下,我们有一个理论认为这是一个简单的替换cifer,每个字符位置都有不同的替换表。
尝试证明如下:
在第一个位置运行所有可能的字符,然后“读取”相应的加盖字符,为第一个位置提供替换表。
重复第2,第3等
一旦捕获了所有替换表,请尝试使用大量随机密码来确认算法和表格是否已被正确猜测。
如果最后一步成功,你已经破解了加密算法用于实际目的,并且解密算法很容易导出;例如通过反转替换表。
我必须说:如果这样做,这是一个非常蹩脚的加密算法。即使我们没有完全正确,也有太多的可预测性。
答案 3 :(得分:0)
您无法查看此应用程序的代码或文档吗?如果它使用任何类型的强加密,你将很难对密钥进行逆向工程。看起来它正在使用某种密码反馈机制,因为以前的字符会影响加密。另一方面,它似乎没有像初始化向量那样使用,因为相同的起始字符会产生相同的输出。或许可以查看block cipher modes of operation的一些线索。
您是否知道已经使用了什么密钥?如果你这样做,你可以尝试猜测算法及其参数。特别是如果它是一些常见的或众所周知的软件,你可以在互联网上搜索找到它。或者,如果它是您自己的软件,则需要深入研究代码以了解它是如何完成的。它也可能只是一些简单的算法,它不是强加密,甚至可能是默默无闻的安全性。在这种情况下,您或其他人可能只能通过一些实验对其进行逆向工程。