我想知道如何反转一种算法,例如用于存储登录名或个人识别码的算法。
假设我有大量数据,其中:
7262627 -> ? -> 8172
5353773 -> ? -> 1132
等等。这只是一个例子。或者说将一个十六进制字符串转换为另一个字符串。
&h8712 -> &h1283
或类似的东西。
我该如何开始弄清楚该算法是什么?一个人从哪里开始?
你会开始尝试不同的转变、异或并希望有什么脱颖而出吗?我确信有更好的方法,因为这看起来就像在黑暗中刺伤。
是否有可能对这种算法进行逆向工程?
抱歉,如果这是一个愚蠢的问题。感谢您的帮助/指点。
人们尝试了一些事情:
- 获取源代码,或反汇编可执行文件。
- 根据其他人使用的哈希函数进行猜测。例如,由 32 个十六进制数字组成的哈希很可能是 MD5 的一个或多个重复,如果您可以获得单个输入/输出对,那么很容易确认或反驳这一点(尽管请参阅下面的“盐”) 。
- 对大量输入和输出对进行统计分析,寻找任何类型的模式或相关性,并将这些相关性与已知散列函数的属性和/或系统设计者可能使用的可能操作相关联。这超出了单一技术的范围,并且进入了一般密码分析的领域。
- 询问作者。安全系统通常不依赖于它们所使用的哈希算法的保密性(即使这样做,通常也不会长时间保持安全)。不过,您给出的示例非常小,并且密码的安全散列总是涉及盐,而您的显然没有。所以我们可能不会谈论作者有信心做到这一点的那种系统。
对于输出仅为 4 位十进制数字的散列,您可以简单地通过构建每个可能的 7 位输入及其散列值的表来攻击它。然后,您可以反转该表并进行(一对多)去哈希操作。您永远不需要知道哈希值的实际计算方式。如何获得输入/输出对?好吧,如果局外人可以以某种方式指定要散列的值,并查看结果,那么您就拥有了所谓的“选择明文”,而依赖于此的攻击就是“选择明文攻击”。因此,如果 7 位 -> 4 位哈希的使用方式允许选定的明文攻击生成大量输入/输出对,那么它确实会非常弱。我意识到这只是一个例子,但它也只是逆转它的技术的一个例子。
请注意,对哈希进行逆向工程和实际反转它是两件不同的事情。您可能会发现我正在使用 SHA-256,但这不会帮助您反转它(即,给定输出,计算出输入值)。没有人知道如何完全反转 SHA-256,尽管当然总是有彩虹表(参见上面的“盐”)<conspiracy>
至少没有人承认他们这样做,所以这对你我都没用。</conspiracy>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)