最初由 hawker 发布
郁闷,还是找不准CTRL+F9的时机,没人说是什么时候啊。。
我知道的有2个,一个据说比较老的壳:
OD载入,bp GetModuleHandleA+7,注意堆栈,见到user32.dll后第一个null(代码出现在程序领空)就返回:
bp GetModuleHandleA+7
0012DED4 /0012DF10
0012DED8 |00DA4711 返回到 00DA4711 来自 KERNEL32.GetModuleHandleA
0012DEDC |00DBD818 ASCII "user32.dll"
0012DEE0 |0012F55C
...
0012DF10 /0012F444
0012DF14 |00DB1FCB 返回到 00DB1FCB 来自 KERNEL32.GetModuleHandleA
0012DF18 |012214A0 ASCII "kernel32.dll"
0012DF1C |0012F55C
0012DEF4 /0012DF0C
0012DEF8 |00DA4B74 返回到 00DA4B74 来自 KERNEL32.GetModuleHandleA
0012DEFC |00000000 //程序领空第一个null
可以返回了:
00DA4B74 8B4D 08 mov ecx,dword ptr ss:[ebp+8] ; KERNEL32.77E60000
00DA4B77 3BC8 cmp ecx,eax
00DA4B79 75 07 jnz short 00DA4B82
00DA4B7B B8 18D3DB00 mov eax,0DBD318
00DA4B80 EB 30 jmp short 00DA4BB2
00DA4B82 393D D8D7DB00 cmp dword ptr ds:[DBD7D8],edi
00DA4B88 B8 D8D7DB00 mov eax,0DBD7D8
00DA4B8D /74 0C je short 00DA4B9B ; MAGIC JUMP
另一个:
OD载入,bp GetModuleHandleA+7,注意堆栈:
001294FC /0012EC44
00129500 |01217105 返回到 01217105 来自 kernel32.GetModuleHandleA
00129504 |0122BC1C ASCII "kernel32.dll"
00129508 |0122CEC4 ASCII "VirtualAlloc"
001294FC /0012EC44
00129500 |01217122 返回到 01217122 来自 kernel32.GetModuleHandleA
00129504 |0122BC1C ASCII "kernel32.dll"
00129508 |0122CEB8 ASCII "VirtualFree"
中间可能还有些断点,我们关注的是kernel32.dll
00129260 /00129500
00129264 |01205FC9 返回到 01205FC9 来自 kernel32.GetModuleHandleA
00129268 |001293B4 ASCII "kernel32.dll"
返回:
00D66A5F 8B0D D855D900 mov ecx,dword ptr ds:[D955D8]
00D66A65 89040E mov dword ptr ds:[esi+ecx],eax
00D66A68 A1 D855D900 mov eax,dword ptr ds:[D955D8]
00D66A6D 393C06 cmp dword ptr ds:[esi+eax],edi
00D66A70 75 16 jnz short 00D66A88
00D66A72 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]
00D66A78 50 push eax
00D66A79 FF15 DCA0D800 call dword ptr ds:[D8A0DC] ; KERNEL32.LoadLibraryA
00D66A7F 8B0D D855D900 mov ecx,dword ptr ds:[D955D8]
00D66A85 89040E mov dword ptr ds:[esi+ecx],eax
00D66A88 A1 D855D900 mov eax,dword ptr ds:[D955D8]
00D66A8D 393C06 cmp dword ptr ds:[esi+eax],edi
00D66A90 0F84 AD000000 je 00D66B43 ; MAGIC JUMP