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

Assembly 如何将ASM转换为可读取代码?,assembly,x86,reverse-engineering,Assembly,X86,Reverse Engineering,我有一个用PE Explorer反汇编程序打开的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] ca

我有一个用PE Explorer反汇编程序打开的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)?< /P> 背景信息:我之所以需要它,是因为我需要从我的windows应用程序调用上述函数。现在这个函数驻留在第三方exe中-没有API或源代码。任何帮助或建议都将不胜感激

您需要的是所谓的“反编译”


这项任务不容易解决,而且往往根本不可能。你可以先试试。

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

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

你需要知道使用了哪些参数。在本例中,参数似乎在
eax
edx
寄存器中传递给此例程。一旦你知道了这些值的含义,你就可能知道这个例程是如何使用的,并用你正在使用的任何语言对它重新编码。

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


IDA Pro可能能够识别功能原型,并且它有一个免费版本,其中包含您需要的所有功能:。但是,它只会让您了解函数的原型,而不是它的行为(除非您可以“读取”x86程序集)。将其恢复为普通的C/C++需要HexRays插件,该插件相当昂贵且不总是有效(反编译到高级语言相当复杂)。

我回答这篇文章有点晚,但鉴于公认的答案是错误的,我仍然会给出我的0.2,以防其他人也在寻找同样的东西

您需要的不是“反编译”,因为您已经将其反编译为asm代码。 您需要的是将反汇编代码编译成您可以阅读的内容(如C)

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

根据要调试的程序,输出可能不准确,或者根本无法获取任何C代码。但如果你不懂组装,这是最好的选择

至于你想做什么,你发布的函数没有任何作用。它使用参数调用另一个函数并获取返回值。您感兴趣的是调用[esi+7Ch]。您需要一个调试器并单步执行此调用


在程序中挂接该函数是另一回事。。。你最好自己写。

我读了以下关于cp的文章:-我不能应用相同的方法吗?反编译器就是这样做的(除其他许多事情外)。当然你能做到,但这不是5分钟的任务。我试着按照文章中描述的方式来做,但找不到任何对我有意义的函数。嘿,总共只有2000欧元;)。。。我多年来一直是IDA Pro的客户,但作为个人,我仍然不愿意为这个插件付出更多。