如何进行逆向工程算法?

Eve*_*lyn 6 encryption algorithm cryptography reverse-engineering

我想知道如何逆转一种算法,例如用于存储登录或密码的算法.

假设我有大量数据,其中:

7262627 -> ? -> 8172

5353773 -> ? -> 1132
Run Code Online (Sandbox Code Playgroud)

这只是一个例子.或者说一个被转换成另一个的十六进制字符串.

&h8712 -> &h1283 或类似的东西.

我该如何开始弄清楚算法是什么?一个人从哪里开始?

你会开始尝试不同的转变,xors和希望有些突出吗?我确信有更好的方法,因为这似乎是在黑暗中刺伤.

甚至几乎可以对这种算法进行逆向工程?

对不起,如果这是一个愚蠢的问题.感谢您的帮助/指示.

Ste*_*sop 8

人们尝试了一些事情:

  • 获取源代码,或反汇编可执行文件.
  • 猜测,基于其他人使用的哈希函数.例如,由32个十六进制数字组成的散列可能是MD5的一次或多次重复,如果您可以获得单个输入/输出对,那么很容易确认或反驳这一点(尽管请参阅下面的"salt") .
  • 统计分析大量输入和输出对,寻找任何类型的模式或相关性,并将这些相关性与已知散列函数的属性和/或系统设计者可能使用的可能操作相关联.这超出了单一技术的范围,进入了一般密码分析领域.
  • 问作者.安全系统通常不依赖于他们使用的哈希算法的保密性(如果他们这样做,通常不会长时间保持安全).但是,您给出的示例非常小,密码的安全散列总是涉及一个盐,而您显然没有.所以我们可能不会谈论作者有信心这样做的那种系统.

在散列中输出只有4位十进制数的情况下,您可以简单地通过构建每个可能的7位输入的表以及其散列值来攻击它.然后,您可以反转该表,并进行(一对多)去散列操作.您永远不需要知道哈希是如何实际计算的.你如何获得输入/输出对?好吧,如果局外人可以某种方式指定要散列的值,并查看结果,那么你就拥有了所谓的"选择的明文",依赖于此的攻击就是"选择的明文攻击".因此,如果以允许选择的明文攻击产生大量输入/输出对的方式使用7位数 - > 4位数的散列,则确实非常弱.我意识到这只是一个例子,但它也只是扭转它的技术的一个例子.

请注意,对哈希进行逆向工程并实际反转它是两回事.你可以弄清楚我正在使用SHA-256,但这无助于你反转它(即,给定一个输出,计算出输入值).没有人知道如何完全反转SHA-256,虽然当然总有彩虹表(见上文"盐")<conspiracy>至少没有人承认他们这样做,所以对你或我没用.</conspiracy>


Joh*_*ohn 0

是否有可能对这种算法进行逆向工程?

使用有缺陷的算法和足够的加密/未加密对是可能的,但设计良好的算法可以完全消除这种可能性。