【问题标题】:Is it possible to convert a binary executable into its original code and other files?是否可以将二进制可执行文件转换为其原始代码和其他文件?
【发布时间】:2014-03-24 00:08:55
【问题描述】:

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

【问题讨论】:

  • 原始来源有 cmets,但该信息不包含在磁盘上的位中。编译语言不像脚本语言。

标签: assembly binary reverse-engineering decompiling playstation


【解决方案1】:

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

这要容易得多,特别是如果代码被编译为 JVM 或 .NET 中的字节码(即Java bytecode)或.NET CLI(这是JITed,但这是另一回事)。在 Playstation 的情况下,我会假设大多数游戏可能会用 C++ 编写。这种情况是使用 C 或 C++,没有简单的方法来反编译它,因为它的输出是直接在处理器上运行的 machine code。是的,您可以使用disassembler 将其转换为assembly code 并自己阅读,但与原始high level language 代码完全不同。您可以将其称为“加密”,是的,可以通过对代码进行大量逆向工程来“解密”它,这可能需要数年时间,而如今这些游戏有多么庞大和复杂。

您也许可以获取资产,但您必须弄清楚它们存储的格式以及它们是否真的被加密或其他什么。

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

tl;博士:

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

tl;dr my tl;dr:

抱歉,今天没有。我建议等到下一个千年,看看它会如何发展。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      让我们放轻松。

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

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

      但是您可以将二进制文件转换为汇编代码。有很多不错的工具可用于 linux 和 windows,包括付费和免费的。它们被称为反汇编程序。您可以使用它们来查看程序在做什么,甚至可以在运行时对其进行修改。

      【讨论】:

        猜你喜欢
        • 2015-02-28
        • 1970-01-01
        • 2021-07-25
        • 1970-01-01
        • 2019-07-31
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多