无法分析勒索软件

逆向工程 拆卸 恶意软件 二元分析
2021-07-09 14:14:20

我得到了这个 fake-av 样本,我想逆转它。但问题是它在几个命令后退出。以下是步骤:

在 Ollydbg 中加载时,它会在以下位置暂停:

00401000 > $  8D9404 7713210>LEA EDX,DWORD PTR SS:[ESP+EAX+0x211377]
00401007   . /E9 CF020000    JMP setup.004012DB 

然后 :

004012DB   > \BA 0C000000    MOV EDX,0xC
004012E0   .  8B4C24 1C      MOV ECX,DWORD PTR SS:[ESP+0x1C]
004012E4   .  41             INC ECX
004012E5   .  09C9           OR ECX,ECX
004012E7   .  75 0C          JNZ SHORT setup.004012F5
004012E9   .  0F2ECF         UCOMISS XMM1,XMM7
004012EC   .  74 13          JE SHORT setup.00401301

和 :

00401301   >  89E5           MOV EBP,ESP
00401303   .  C3             RETN

然后它退出:

7C81776F    50               PUSH EAX
7C817770    E8 8349FFFF      CALL kernel32.ExitThread

这里到底发生了什么,我想这与线路有关,UCOMISS XMM1,XMM7但我不知道它的作用是什么?

1个回答

在 4012e7' 处的 jnz 应该被采用,如果 401000 is PeHeader->EntryPoint

你的帖子表明还没有调查谁搞砸了 SEH CHAIN

esp+1c通常EndOfSehChain (0xffffffff) 在 EntryPoint 上断开时保持不变,请参阅 Kernel32!BaseProcessStart() 中的 SehProlog()

cdb -c "bp calc+@@c++(( (ntdll!_IMAGE_NT_HEADERS *)  @@masm(calc+by(calc+3c)))->OptionalHeader.AddressOfEntryPoint);g;!exchain;dd @esp+1c l2;q" calc

输出

Breakpoint 0 hit
0007ffe0: kernel32!_except_handler3+0 (7c839ad8)
  CRT scope  0, filter: kernel32!BaseProcessStart+29 (7c8438ea)
                func:   kernel32!BaseProcessStart+3a (7c843900)
Invalid exception stack at ffffffff
0007ffe0  ffffffff 7c839ad8
quit:

调试器不会弄乱这个值

在 EP 检查 (esp+1c) 的示例代码

ucomisstest>type ucomisstest.cpp
#include <stdio.h>
char strin[] = { "hello baby\n" };
char strun[] = { "hello babie\n" };
char stron[] = { "hello barbie\n" };
int main (void)    {
    __asm {    mov ecx, dword ptr ds:[esp+1ch]
               inc ecx    or ecx,ecx
            jnz noseh
            ucomiss xmm1,xmm7
            je exit
            lea eax, strun
            push eax
            call printf
            pop eax
exit:
        lea eax, strin
            push eax
            call printf
            pop eax
noseh:
        lea eax, stron
            push eax
            call printf
            pop eax
    } return 0;    }    
\ucomisstest>cl /nologo ucomisstest.cpp
ucomisstest.cpp    
\ucomisstest>ucomisstest.exe
hello barbie