如何将ASM转换为可读代码?

时间:2010-09-03 15:19:39

标签: assembly x86 reverse-engineering

我有一个用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或源代码。任何帮助或建议表示赞赏。

6 个答案:

答案 0 :(得分:2)

您需要知道使用了哪些参数。在这种情况下,看起来参数在eax&中传递给此例程。 edx注册。一旦你知道这些值意味着什么,你就可以弄清楚如何使用这个例程,并用你正在使用的任何语言重新编码它。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

你想要的是“反编译”。

这不容易解决任务,通常根本不可能。您可以尝试Google作为开始。

答案 3 :(得分:0)

您可以使用指针将其反编译为C语言或其他语言,但它仍然几乎不可读。

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

我回答这篇文章有点迟,但看到接受的答案是错误的,我还是会给出我的0.2,以防其他人在寻找同样的事情。

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

这个逆向工程领域仍然没有很好地发展。有些人提到IDA带有一些昂贵的插件,但它对你没有好处...我会提到唯一可以帮助你的程序: REC

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

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

在程序中挂钩该功能是另一个故事...你最好自己写一下。