【问题标题】:How to convert ASM to read-able code?如何将 ASM 转换为可读代码?
【发布时间】:2011-04-07 22:05:39
【问题描述】:

我有一个用 PE Explorer Disassembler 打开的 exe。现在我可以看到 asm 代码,如下所示:

    push    ebx
    push    esi
    mov ebx,eax
    mov eax,[ebx+38h]
    push    eax
    mov eax,[ebx+3Ch]
    push    eax
    mov ecx,edx
    mov eax,ebx
    mov edx,[ebx+30h]
    mov esi,[eax]
    call    [esi+7Ch]
    or  byte ptr [ebx+00000088h],02h
    pop esi
    pop ebx
    retn

我不知道那是什么意思。现在有没有办法将其转换为可读代码(C、C++、C# 或 VB.NET)?

背景信息:我之所以需要这个是因为我需要从我的 Windows 应用程序中调用上述函数。现在这个函数驻留在第三方 exe 中——它没有 API 或源代码。任何帮助或建议表示赞赏。

【问题讨论】:

    标签: assembly x86 reverse-engineering


    【解决方案1】:

    你想要的叫做“反编译”。

    这是不容易解决的任务,而且往往根本不可能。您可以尝试 Google 作为开始。

    【讨论】:

    • 我在 cp 上阅读了以下文章:codeproject.com/KB/cpp/funccaller.aspx - 我不能应用相同的方法吗?
    • 这就是反编译器所做的(以及许多其他事情)。你当然可以做到,但这不是 5 分钟的任务。
    • 好的。我尝试按照文章中描述的方式进行操作,但根本找不到任何对我有意义的功能。
    【解决方案2】:

    你可以用指针将它反编译成 C 或其他语言,但它仍然大部分是不可读的。

    【讨论】:

      【解决方案3】:

      如果你能掌握它,IDA Pro + Hex-Rays 可以将它反编译成半可读的代码。

      【讨论】:

      • 嘿,所有东西加起来只要 2000 欧元 ;) ...多年来,我一直是 IDA Pro 的客户,但作为个人,我仍然懒得花更多的钱来购买插件。
      【解决方案4】:

      您需要知道使用了哪些参数。在这种情况下,看起来参数在eaxedx 寄存器中传递给此例程。一旦你知道这些值的含义,你就可以弄清楚这个例程是如何使用的,并用你使用的任何语言重新编码。

      【讨论】:

        【解决方案5】:

        乍一看,它是对象代码;它获取(至少)一个对象作为参数,调用该对象的方法,该方法将对象的三个属性作为参数,然后将同一对象的另一个属性中的位(标志?)设置为一个。

        IDA Pro 可能能够识别函数原型,并且它有一个免费版本,其中包含您需要的所有功能:http://www.hex-rays.com/idapro/idadownfreeware.htm。然而,它只会让您了解函数的原型,而不是它的行为(除非您可以“阅读”x86 程序集)。将其还原为纯 C/C++ 需要 HexRays 插件,该插件相当昂贵且并不总是有效(反编译为高级语言相当复杂)。

        【讨论】:

          【解决方案6】:

          我回答这个帖子有点晚了,但看到接受的答案是错误的,我仍然会给出我的 0.2,以防其他人也在寻找同样的东西。

          您正在寻找的不是“反编译”,因为您已经将其反编译为 asm 代码。 你想要的是一种将反汇编代码编译成你可以阅读的东西(比如 C)

          这个逆向工程领域还没有得到很好的发展。一些人提到了带有一些昂贵插件的 IDA,但这对你没有好处......我将提到唯一可能对你有帮助的程序: REC

          输出可能不准确,或者您可能根本无法获得任何 C 代码,具体取决于您要调试的程序。但如果您不懂组装,那是最好的选择。

          至于您要做什么,您发布的功能什么也没做。它调用另一个带参数的函数并获得返回值。你感兴趣的是调用[esi+7Ch]。您需要一个调试器并单步执行此调用。

          在你的程序中挂钩这个函数是另一回事......你最好自己写。

          【讨论】:

            猜你喜欢
            • 2020-02-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-04-04
            • 2011-03-23
            相关资源
            最近更新 更多