2013-12-16 92 views
0

我用VB Decompiler反编译了一个程序,它说我的目标函数(我想看代码的那个函数)位于地址0x00617B70。所以一旦我拆卸了应用程序,我去了那个内存地址,我看到:函数内存地址(ASM)

CALL 0861BBA1 
    ADD  BYTE PTR [EAX], DH 
    IN  AL, 0 
    XOR  AL, 0 
    ADD  BYTE PTR [EAX], AL 
    ADD  BYTE PTR [EAX], AL 
    ADD  BYTE PTR [EAX], AL 
    SBB  BYTE PTR [EAX], AL 
    ADD  BYTE PTR [EAX], AL 
    ADD  BYTE PTR [EAX], AL 
    SBB  AL, 0 
    ADD  BYTE PTR [EAX], AL 
    ADD  BYTE PTR [EAX], AL 
    ADD  AL, 0 
    ADD  BYTE PTR [EAX], AL 
    ADD  BYTE PTR [EAX], AL 
    OR  AL, FF 
    ADD  EAX, DWORD PTR [EAX] 
    JE  00617B99 
    ADD  DWORD PTR [EAX], EAX 
    INSB 
    INC  DWORD PTR [EBX] 
    ADD  BYTE PTR [EAX-1], DH 
    ADD  EAX, DWORD PTR [EAX] 
    AND  BYTE PTR [EAX], AL 
    ADD  BYTE PTR [EAX], AL 
    ADD  BYTE PTR [EAX], AL 
    ADD  EAX, 0 
    ADD  BYTE PTR [EAX-1], AL 
    ADD  DWORD PTR [EAX], EAX 
    INC  ESP 
    INC  DWORD PTR [EBX] 
    ADD  BYTE PTR [EAX-1], BL 
    ADD  AL, BYTE PTR [EAX] 
    XOR  BH, BH 
    ADD  AL, BYTE PTR [EAX] 
    ADC  BH, BH 
    ADD  AL, BYTE PTR [EAX] 
    INSB 
    OR  AL, 0 
    OR  BYTE PTR [EAX], CL 
    ADD  BYTE PTR [ESI], AL 
    INC  EAX 
    ADD  BYTE PTR [EAX+71], AL 
    PUSHAD 
-- 
    SHL  BYTE PTR [EAX-1], 1 
    PUSH ES 
    ADD  AH, BH 
    ADC  AL, 8 
    OR  BYTE PTR [EAX], AL 
    MOV  DWORD PTR [EAX+6E70AD00], EAX 
-- 
    SHL  BYTE PTR [EAX-1], 1 
    POP  ES 
    ADD  AH, BH 
    ADC  AL, 8 
    OR  BYTE PTR [EAX], AL 
    MOV  DWORD PTR [EDX+6C70AD00], EAX 
    JMP  FAR FWORD PTR [EBX+6E] 

这看起来不像一个函数,对不对?我不知道ASM什么,但我希望是这样的:

PUSH EBP 
MOV EBP, ESP 
SUB ESP, 8 
...more stuff here... 
RETN 

特地RETN指令说,这是有关功能,对不对?

任何想法我做错了什么?

+0

您可以显示可执行文件**反汇编**的相关部分? **拆卸存储区**几乎可以肯定是数据,因此不打算执行。还有反编译的代码。 – nrz

+1

'add [eax],al'为0.你正在分解一个错误的东西。 – Griwes

+0

对不起,我还不了解ASM。哪些是反汇编的相关部分?该代码是MHS6.1自动选择的代码。右键单击第一个ASM行>选择功能。 – cdonts

回答

0

在我看来,你的主要错误是认为这应该是x86 CPU代码。相反,VB反编译器显示的代码是一种中间机器字节码,它不是由CPU本身执行的,而是由中间解释器执行的。 (对不起,如果你已经知道它,但你的问题是不清楚的)。这是JVM,.NET运行时等主要方法。在你的列表中使用谷歌搜索(FStStrCopy,CBool​​VarNull)给出的提示这是VB特定的P -码。它显然不会暴露指令,如“mov ebp,esp”或“retn”;即使以这种方式解码代码,这将是明确的场合,而不是有意的结果。即使你知道有某个入口点,这个入口点可能不是由CPU处理,而是由P代码解释器处理。

因此,要解决这个问题,您应该确定在分析的二进制文件中使用了哪些p代码,以及本机代码应该在哪里(如果应该)。如果您认为它应该是本地代码,那么您的分析方法和/或编译选项会出现问题。

+0

嗨,谢谢你的回答。我不指望VBDecompiler向我显示像“mov ebp,esp”或“retn”这样的指令。我期望反汇编能告诉我这一点。第一个代码是反汇编,最后一个是给我VBDecompiler的P代码。正如我在其他评论中所说的,反编译其他程序时,我只是复制VBDecompiler中显示的地址,然后转到反汇编程序的那个地址;并在那里显示了我期待的结果是'mov ebp,esp'和'retn'指令。我不明白为什么在某些程序中它向我展示了我所期望的,而在其他程序中却没有 – cdonts