我有一个用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或源代码。任何帮助或建议表示赞赏。
答案 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]。您需要一个调试器并进入此调用。
在程序中挂钩该功能是另一个故事...你最好自己写一下。