【问题标题】:Is it possible to convert PPC Assembly to C?是否可以将 PPC 程序集转换为 C?
【发布时间】:2011-05-20 01:49:20
【问题描述】:

我有一些 PPC 代码想要转换回其原始 C 代码,有没有办法做到这一点?可能是一个人(比如知道 PPC 来重构 C 代码的人?)或一个程序?

【问题讨论】:

  • 你不能得到 original C,因为编译成机器码是一个有损的过程。没有一对一的对应关系。然而,Power 的反汇编器/反编译器超出了我的专业范围。
  • 它也是一个 RISC,这使得反转变得更加困难。

标签: assembly reverse-engineering decompiling powerpc


【解决方案1】:

是和不是。

原则上可以将任何语言的程序翻译成任何其他语言。结果不会很漂亮。

如果现有代码确实是没有太多巧妙优化的编译结果,那么很可能一个相当死记硬背的过程可以将其转回 C。对于少量代码,这通常很容易手动完成,但是对于大型代码库来说很繁琐且容易出错。

目前有一些逆向工程工具声称可以进行反编译。在一般情况下,这不是一个容易的问题。

解决问题的一种方法是为已经支持 C 语言后端的编译器创建 PPC 程序集(甚至二进制)前端。结果是一个交叉编译器,它读取 PPC 代码并生成高度混淆的 C 代码。例如,我知道 GCC 有一个 C 后端。

无论您采用何种方法,为现有二进制文件提供一个良好的测试套件(以及运行它的能力)可能至关重要,这样您就有办法证明翻译是等效的。

编辑:请注意,您将永远无法取回原始 cmets,并且只能访问将其放入符号表或类似调试信息的原始变量和函数名称。

【讨论】:

  • 我要做的是尝试恢复最初存储在可执行文件中的加密密钥。使用 IDA 我把它归结为 PPC,PPC 中有直接解密的功能,据说它们也存储加密密钥。如果这有任何意义。
  • @user:您不必为此将整个可执行文件“反编译为 C”。请更新您的问题。
  • 那么您将面临更大的挑战。我是我的代码,我会手工编写这些函数,使用我能找到或发明的每一个技巧来避免轻易泄露密钥。它们根本不容易反编译。您最好的选择可能是在操作中模拟它们,并通过单步执行实时代码来推断键值。
  • 我会采取一切我能找到或发明的对策来防止实时调试器进行检查。向 DVD 行业询问他们对从产品中恢复密钥的意见...
  • 我认为我对这种情况的解释不够清楚。保护可执行文件的加密已经被绕过,因此我有解密的可执行文件。该可执行文件的主要功能是解密修改重新加密并发送某些文件。所以我已经过了可执行文件的保护。 --不确定这是否有意义,但这是我能想到的最好的解释方式--
【解决方案2】:

IDA Pro 6.95 包含 PPC 反编译器。 但它有点贵(2350 美元)

【讨论】:

    【解决方案3】:

    Boomerang声称支持PPC反编译。

    【讨论】:

    • IDA 支持其反汇编。反编译成 C 代码还有很长的路要走。
    • 啊,好吧 - 我删除那个声明。
    • 回旋镖看起来很酷。他们关于源代码恢复的文章值得一读。
    • 我检查了 Boomerang,每次使用它似乎都会崩溃。我还想指出这是一个大型代码库。
    【解决方案4】:

    没有。永远不会。反编译和取回 c 是不一样的。你永远无法取回c。您可以尝试对其进行逆向工程,尝试了解它在做什么,但某些信息会永久丢失。

    这是来自 Boomerang 项目:

    然而,一般的反编译器不会试图反转反编译器的每一个动作,而是反复转换输入程序,直到结果是高级源代码。因此它不会重新创建原始源文件; 可能没有什么比这更好的了。

    因此它创建了一些可能是(但永远不会知道)C 源代码的 C 代码。

    【讨论】:

    • 当然,在很多情况下这就足够了。例如,它可用于将遗留二进制文件移动到新平台。尽管传统平台的模拟器通常是更好的选择....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 2011-03-15
    • 2010-09-28
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多