是否可以将二进制可执行文件转换为其原始代码和其他文件?
就像标题所要求的那样。例如,如果我拍了Playstation光盘,是否可以编写一个程序将磁盘上的所有二进制文件转换回原始代码文件,艺术资产等?难道它只是像解密一样吗?如果没有,是否有可能为我们当前的语言制作一种语言或添加代码,以便将来的程序可能向后转换?谢谢!是否可以将二进制可执行文件转换为其原始代码和其他文件?
在某些情况下,您可以从可执行文件或脚本中获取原始或接近原始代码集。某些开发平台更容易完成所谓的反编译。反编译使用一种称为decompiler的特殊工具来实现某种特定的语言,并且会尝试对该程序进行基本的反向工程,以便您可以获取实际程序所需的代码。它可能会有点不同,因为不会有任何注释,编译的方式可能与编写方式不同(例如优化,编译器生成的代码)。
这是更容易,特别是如果所述代码是用Java编译成字节码等(即Java bytecode)为JVM或.NET CLI(这是JIT ED但是另一回事)。在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#一般
- 其它字节码解释器或JIT编译的语言我敢肯定,索尼采用了proprietary format这意味着其最有可能使用不只是一个标准的DVD文件格式。换句话说,您不应该期望能够将其弹出到电脑中的DVD驱动器中,并期望它能够读取它。
TL;博士我TL;博士:
很抱歉,但今天没有发生真实。我建议等待下一个千年,看看它如何展示。
简单地说:不。 您不能将二进制1转换为1到C++的原始源代码或类似的东西。 但是你可以做逆向工程。
让我们放轻松。
假设你知道x^2 = 4
,你不能分辨x是2还是-2。
同样是你有一个二进制可执行代码或汇编代码,你不能告诉的语言它是写在。
但是你可以二进制文件转换为汇编代码。有很多好的工具可用于Linux和Windows,既付费又免费。他们被称为反汇编。您可以使用它们来查看程序在做什么,甚至可以在运行时对其进行修改。
原始来源有评论,但该信息不包含在光盘上的位上。编译语言不像脚本语言。 –