清风原木 发表于 2009-11-3 14:42

分析一下Demo的VM

转载 nooby 大牛的。嘎嘎 大家可以好好看看~
加了个xp记事本,v了1007568的函数,来到vm入口
01007568    E8 05B60A00   call    010B2B72
010B2B72    8D6424 04       lea   esp, dword ptr
010B2B76    68 2FD90900   push    0x9D92F    //push pcode
010B2B7B    E8 8AC3FFFF   call    010AEF0A   //进vm

010AEF0A    60            pushad   //保存寄存器环境
010AEF0B    9C            pushfd   //保存符号
010AEF0C    8D6C24 2C       lea   ebp, dword ptr    //ebp = real esp
010AEF10    896C24 10       mov   dword ptr , ebp//fix esp
010AEF14    83EC 10         sub   esp, 0x10//分配vm context
010AEF17    8BFC            mov   edi, esp//edi指向vm context
010AEF19    8B75 FC         mov   esi, dword ptr //取pcode
010AEF1C    81C6 00300101   add   esi, 01013000//重定位
010AEF22^ E9 5FFFFFFF   jmp   010AEE86

010AEE86    FC            cld //清符号
010AEE87    0FB606          movzx   eax, byte ptr //取pcode
010AEE8A    46            inc   esi //增加vm eip
010AEE8B    80C0 00         add   al, 0x0 //解码pcode
010AEE8E    8B0485 5D020B01 mov   eax, dword ptr //查表
010AEE95    81C0 00300101   add   eax, 01013000 //重定位
010AEE9B    E9 DB110000   jmp   010B007B
010B007B    8BE7            mov   esp, edi //平栈
010B007D    50            push    eax //jmp eax
010B007E    C3            retn

handler记录一下

GetI32 10B0718
Reloc
SetEip
GetI32 10075BA
GetI32 FFFFFFFC
GetR32 vmcontext + 0x20
Add32
SetR32 vmcontext + 0x4
SetR32 vmcontext + 0x20
GetI32 10B0FCD
Reloc
SetEip
GetI32 00000000
RmFs32
SetR32 vmcontext + 0x30


对照原版


01007568    68 BA750001   push    0x10075BA
0100756D    64:A1 00000000mov   eax, dword ptr fs:

因为pcode是乱序的,非要跟了才知道往哪走,后面的没时间人肉了,我只是抛砖,等你们发挥。

changqqw 发表于 2009-11-3 15:03

这个有什么用啊,分析出来有钱吗?
页: [1]
查看完整版本: 分析一下Demo的VM