好友
阅读权限10
听众
最后登录1970-1-1
|
清风原木
发表于 2009-11-3 14:42
转载 nooby 大牛的。嘎嘎 大家可以好好看看~
加了个xp记事本,v了1007568的函数,来到vm入口
01007568 E8 05B60A00 call 010B2B72
010B2B72 8D6424 04 lea esp, dword ptr [esp+0x4]
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 [esp+0x2C] //ebp = real esp
010AEF10 896C24 10 mov dword ptr [esp+0x10], 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 [ebp-0x4] //取pcode
010AEF1C 81C6 00300101 add esi, 01013000 //重定位
010AEF22 ^ E9 5FFFFFFF jmp 010AEE86
010AEE86 FC cld //清符号
010AEE87 0FB606 movzx eax, byte ptr [esi] //取pcode
010AEE8A 46 inc esi //增加vm eip
010AEE8B 80C0 00 add al, 0x0 //解码pcode
010AEE8E 8B0485 5D020B01 mov eax, dword ptr [eax*4+0x10B025D] //查表
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 00000000 mov eax, dword ptr fs:[0]
因为pcode是乱序的,非要跟了才知道往哪走,后面的没时间人肉了,我只是抛砖,等你们发挥。 |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|