机器学习可以用来开发更好的逆向工程工具吗?

逆向工程 拆卸 工具 反汇编者 机器码
2021-06-23 09:25:24

所以我用谷歌搜索了这个,但除了一些论文之外,我找不到任何使用机器学习构建的逆向工程工具

我不是机器学习和深度学习方面的专家,但考虑到我们有数十亿的开源代码,我们可以使用它们,这样我们的“机器”就可以了解这些代码的汇编和可执行文件的样子,这似乎是合理的喜欢并研究它们,掌握反转的艺术,因此以这种方式构建一个工具,可以非常准确地反转任何给定的程序

现在这是可行的还是我在这里遗漏了什么?是否有任何以这种方式构建或即将推出的工具?你对此有何看法?是否需要更好的倒车工具,或者是否已经有一款出色的倒车工具可以以最高的精度完成这项工作?

2个回答

如果您将遗传算法视为一种机器学习,这里有一篇关于使用它从操作码和反汇编器创建汇编器的有趣帖子:

汇编程序编写的快速通道

您还可以查看 Joxean Koret 在使用 ML 将二进制文件与源代码进行匹配(包括机器学习)方面的经验:

https://docs.google.com/presentation/d/1ifvugStGL7Qc8xSFeYXp2MGQ6jQGOOMSolBrJy8kCMY/mobilepresent

https://github.com/joxeankoret/pigaios

我们可以使用它们,这样我们的“机器”就可以了解这些代码的汇编和可执行文件的样子,然后研究它们,掌握逆向的艺术,从而以这种方式构建一个可以非常准确地逆向任何给定程序的工具

这是一个白日梦,原因有几个:

  1. 可靠地区分可执行二进制文件中的代码和数据是一个不可判定的问题。数据可以嵌入到代码中,相同的字节序列可以用不同的方式反汇编。此外,代码可以是自我修改的。

  2. 剥离二进制文件中的函数启动检测是一个无法确定的问题。

  3. 编译是一个有损过程,尤其是在进行优化时。因此反编译不能完全自动化,需要人工决策。

    • 当然,对任意机器代码程序的全自动反编译是不可能的,它和大多数程序转换问题一样是一个不可判定的问题。因此,从理论的角度来看,不存在用于反编译所有可能程序的算法。然而,这个(显而易见的)答案没有实际意义——许多问题是不可判定的或 NP 完全的,但存在为实际重要案例提供精确或近似解决方案的算法。因此,反编译的挑战在于识别低级程序的子类以及开发针对这些特定类的方法和算法。这些方法甚至可能会在关键点向人类专家寻求帮助。[ 1 ]

    • 当然,对任意机器代码程序进行全自动反编译是不可能的——这个问题在理论上等同于计算机科学中的一个不可判定的问题——停机问题。这意味着对于曾经编写过的所有可能的程序,无法实现自动(没有专家干预)反编译。此外,即使取得了一定程度的成功,自动生成的程序也可能缺少有意义的变量和函数名称,因为它们通常不会存储在可执行文件中(除非出于调试目的而存储)。[ 2 ]

    • 为什么原生机器码不能轻松反编译?
  4. 机器学习 - 在这种情况下,监督学习 - 可以简单地认为是使用算法从数据构建模型,然后将构建的模型用于预测或分类。当我们说算法正在从数据中学习时,这意味着算法正在通过优化给定数据的损失函数来构建数学模型。没有头脑,没有思想,没有思维机器。算法不看任何东西,也不研究任何东西。


1)C反编译:有可能吗?

2)是否可以反编译?