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

问题描述 投票:0回答:3

就像标题所要求的那样。例如,如果我拿了一张 Playstation 光盘,是否可以编写一个程序将磁盘上的所有二进制文件转换回其原始代码文件、艺术资源等?这不就是解密之类的吗?如果没有,是否有可能创建一种语言或向我们当前的语言添加代码,使未来的程序可以向后转换?谢谢!

assembly binary reverse-engineering decompiling playstation
3个回答
12
投票

我们放轻松吧。

假设您知道

x^2 = 4
,您无法判断 x 是 2 还是 -2。

同样,您有一个二进制可执行文件或汇编代码,您无法分辨它是用哪种语言编写的。

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


2
投票

一般来说,从磁盘中检索任何类似于 PlayStation 游戏原始源代码的内容将非常困难或非常耗时。您可能需要使用的只是游戏的二进制可执行文件,其中仅包含包含游戏逻辑的 CPU 指令。您必须有效地对游戏文件进行逆向工程,这可能会引发一些法律问题。

游戏很可能是用 C++ 编写的,C++ 编译器(例如 gcc)会直接将其转换为 CPU 指令。在翻译成 CPU 指令之前猜测原始源代码是什么是非常困难的(但并非不可能)。就原始源代码而言,编译C++代码是一个非常有损的操作(例如变量名、函数名、算术和逻辑的损失被优化和简化)。

您必须使用复杂的反编译器才能开始获得原始代码的任何外观。即使这样,您也必须花费大量时间来尝试理解机器代码正在做什么。例如,像 Ghidra 这样的反编译器是免费且开源的,可以解释机器代码并尝试理解它。此类工具对于必须对恶意软件可执行文件进行逆向工程的安全研究人员也特别有用。

在某些情况下,游戏将使用脚本语言进行游戏内过场动画或定义游戏内的不同行为和属性。至少在这种情况下,您可能能够看到纯文本文件中的脚本。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.