和标题要求的差不多。例如,如果我拿了一张 Playstation 光盘,是否可以编写一个程序将磁盘上的所有二进制文件转换回其原始代码文件、艺术资产等?不就是跟解密一样吗?如果没有,是否有可能为我们当前的语言创建一种语言或添加代码,使未来的程序可以向后转换?谢谢!
3 回答
让我们放轻松。
假设您知道x^2 = 4
,您无法判断 x 是 2 还是 -2。
同样,您有一个二进制可执行文件或汇编代码,您无法分辨它是用哪种语言编写的。
但是您可以将二进制文件转换为汇编代码。有很多不错的工具可用于 linux 和 windows,包括付费和免费的。它们被称为反汇编程序。您可以使用它们来查看程序是否在做什么,甚至可以在运行时对其进行修改。
在某些情况下,是的,您可以从可执行文件或脚本中获取原始或接近原始的代码集。某些开发平台更容易进行所谓的反编译。反编译使用一种特殊的工具,称为特定语言的反编译器,并且会尝试从本质上对程序进行逆向工程,以便您可以获得执行实际程序的代码。它可能会有点不同,因为没有注释,而且它的编译方式可能与它的编写方式不同(例如优化、编译器生成的代码)。
这要容易得多,特别是如果代码被编译为 JVM 或 .NET CLI(这是JIT ed,但那是另一回事)的 Java 字节码(即Java 字节码)。在 Playstation 的情况下,我会假设大多数游戏可能会用 C++ 编写。这种情况是 C 或 C++,没有简单的方法来反编译它,因为它的输出是直接在处理器上运行的直接机器代码。是的,您可以使用反汇编程序将其转换为汇编代码并自己阅读,但与原始高级语言完全不同代码。您可以将其称为“加密”,是的,可以通过对代码进行大量逆向工程来“解密”,这可能需要数年时间,而如今这些游戏有多么庞大和复杂。
您可能可以获得这些资产,但您必须弄清楚它们存储的格式以及它们是否实际上是加密的或其他东西。
此外,Playstation 光盘可能以专有格式存储,这意味着索尼不希望您弄清楚数据是如何格式化和存储的,并且不是索尼转发的公共知识(但这当然不会阻止人们尝试反转设计它)
tl;博士:
- 代码可能是用 C++ 编写的,基本上不可能反编译为原始源代码。
- 除非您想花费数年时间阅读汇编代码,否则您不太可能获得原始代码。
- 但是,还有其他语言不能编译为汇编代码或机器代码,而是以字节码、脚本或其他形式执行。这包括
- 基本上所有脚本语言
- JVM 语言 - 例如 Java、Scala
- CLR 语言 - 例如 C#、VB.NET、F#
- 其他字节码解释器或一般 JITed 语言
- 我确信索尼使用的是专有格式,这意味着它很可能不仅仅使用标准的 DVD 文件格式。换句话说,您不应该期望能够将其弹出到您计算机的 DVD 驱动器中并期望它能够读取它。
tl;博士我的 tl;博士:
对不起,但今天没有发生。我建议等到下一个千年,看看它会如何发展。
简单地说:不。您不能将二进制 1 转换为 1 到 C++ 或类似的原始源代码。但是你可以做逆向工程。