是否可以将二进制可执行文件转换为其原始代码和其他文件?

时间:2014-02-22 08:52:28

标签: assembly binary reverse-engineering decompiling playstation

就像标题所要求的那样。例如,如果我使用Playstation光盘,是否可以编写一个程序,将磁盘上的所有二进制文件转换回其原始代码文件,艺术资产等?这不仅仅是像解密一样的孩子吗?如果没有,是否可以为我们当前的语言制作语言或添加代码,以便将来的程序可以向后转换?谢谢!

3 个答案:

答案 0 :(得分:2)

让我们放轻松。

假设您知道x^2 = 4,则无法判断x是2还是-2。

同样,你有一个二进制可执行文件或汇编代码,你不能告诉它是用哪种语言编写的。

但您可以将二进制文件转换为汇编代码。有许多好的工具可用于Linux和Windows付费和免费。他们被称为反汇编。您可以使用它们来查看程序正在执行的操作,甚至可以在运行时修改它。

答案 1 :(得分:1)

在某些情况下,是的,您可以从可执行文件或脚本中获取原始或接近原始的代码集。某些开发平台更容易进行所谓的反编译。反编译使用一种称为decompiler的特殊工具用于某种语言,并且将尝试对程序进行基本的反向工程,以便您可以获得执行实际程序的代码。它可能会有点不同,因为没有注释,编译它的方式可能与编写方式不同(例如优化,编译器生成的代码)。

这更容易,特别是如果代码被编译为字节代码,如Java(即Java bytecode),用于JVM或.NET CLIJIT编辑但是另一个故事)。对于Playstation,我认为大多数游戏可能都是用C ++编写的。使用C或C ++的情况下,没有简单的方法来反编译它,因为它的输出是直的machine code,直接在处理器上运行。是的,您可以使用assembly code将其变为disassembler并自行阅读,但与原始high level language代码无关。您可以将其称为“加密”,并且可以通过对代码进行大量逆向工程来“解密”,这些代码可能需要花费数年时间来处理大型复杂的游戏。

您可以获得资产,但您必须弄清楚它们存储的格式以及它们是否实际上是加密的。

其他Playstation光盘可能存储在proprietary format中,这意味着索尼不希望您弄清楚数据是如何格式化和存储的,也不是索尼传播的公共知识(但当然不是阻止人们试图对其进行逆向工程)

<强> TL; DR:

  • 代码可能是用C ++编写的,基本上不可能反编译为原始源代码。
  • 除非您想花费数年时间阅读汇编代码,否则您不太可能获得原始代码。
  • 尽管如此,还有其他语言无法编译为汇编代码或机器代码,而是以字节码,脚本或其他形式执行。这包括
    • 基本上所有脚本语言
    • JVM语言 - 例如Java,Scala
    • CLR语言 - 例如C#,VB.NET,F#
    • 其他字节码解释器或一般的JITed语言
  • 我确信索尼使用的是proprietary format,这意味着它最不可能只使用标准的DVD文件格式。换句话说,您不应该期望能够在计算机的DVD驱动器中弹出它并期望它能够读取它。

tl; dr my tl; dr:

很抱歉,但今天没有发生。我建议等到下一个千年,然后看看它是如何展开的。

答案 2 :(得分:0)

简单地说:不。 您不能将二进制1转换为1到C ++上的原始源代码或类似的东西。 但你可以进行逆向工程。