一点补充
第一次bp bp VirtualAlloc断点,当中断第二次是,再返回到程序代码中,可以直接来到下面这里,向下一看,就可以找到处理IAT的地方了:
003F0C22 E8 89030000 call 003F0FB0 ;
003F0C27 85C0 test eax, eax
003F0C29 0F85 A6000000 jnz 003F0CD5
003F0C2F 56 push esi
003F0C30 E8 D7020000 call 003F0F0C
003F0C35 56 push esi
003F0C36 E8 DF010000 call 003F0E1A
003F0C3B 90 nop
003F0C3C 90 nop
003F0C3D 90 nop
003F0C3E 90 nop
003F0C3F 90 nop
003F0C40 90 nop
003F0C41 90 nop
003F0C42 90 nop
003F0C43 90 nop
003F0C44 90 nop
003F0C45 90 nop
003F0C46 90 nop
003F0C47 90 nop
003F0C48 90 nop
003F0C49 8B4E 34 mov ecx, dword ptr ds:[esi+34] ;
003F0C4C 85C9 test ecx, ecx
003F0C4E 0F84 89000000 je 003F0CDD ;**********
最后bp VitrualFree中断三次后才能直接返回上述的地方
(不知是不是只有我的机子是这样)中断两次返回后来到
003F0D14 8B46 0C mov eax, dword ptr ds:[esi+C]
003F0D17 03C7 add eax, edi
003F0D19 5D pop ebp
003F0D1A 5E pop esi
003F0D1B 5F pop edi
003F0D1C 5B pop ebx
003F0D1D C3 retn
F8执行完这几句后才来到:
00590145 8985 23120010 mov dword ptr ss:[ebp+10001223], eax ; SuperRam.0048DDE8
0059014B 8BF0 mov esi, eax
0059014D 59 pop ecx
0059014E 5A pop edx
0059014F 03CA add ecx, edx
00590151 68 00800000 push 8000
00590156 6A 00 push 0
00590158 57 push edi
00590159 FF11 call dword ptr ds:[ecx]
0059015B 8BC6 mov eax, esi :诺是三次中断后,会直接返回到这
0059015D 5A pop edx
0059015E 5E pop esi
0059015F 5F pop edi
00590160 59 pop ecx
00590161 5B pop ebx
00590162 5D pop ebp
00590163 FFE0 jmp eax