1.申请内存得到地址015c0000
2.来到OEP后Ctrl+G来到
01206E68 8945 F0 mov dword ptr ss:[ebp-10],eax
01206E6B B8 00070000 mov eax,700
01206E70 E8 CFB6FDFF call 011E2544------改成jmp 015c0043
3.在此之前跟踪得到的Call XXXXXXXX
006E46C8 55 push ebp ; 这里是OEP
006E46C9 8BEC mov ebp,esp
006E46CB 83C4 F0 add esp,-10
006E46CE B8 003F6E00 mov eax,IconSear.006E3F00
006E46D3 E8 802ED2FF call IconSear.00407558 ; 跟踪进入
006E46D8 57 push edi
006E46D9 55 push ebp
006E46DA 56 push esi
006E46DB 8D7C4B 2F lea edi,dword ptr ds:[ebx+ecx*2+2F]
------------------------------------------------------------------------------
00407557 90 nop
00407558 53 push ebx ; 来到这里
00407559 8BD8 mov ebx,eax
0040755B 33C0 xor eax,eax
0040755D A3 10177000 mov dword ptr ds:[701710],eax
00407562 6A 00 push 0
00407564 E8 2BFFFFFF call IconSear.00407494 ; 这里进入
--------------------------------------------------------------------------------
00407493 90 nop
00407494 E8 678B0401 call 01450000 ; 这就是所谓的Call XXXXXXXX ???,搜索有N多,没进行最后Patch得到的修复程序来到这里就OVER了。
00407499 ^ E0 8B loopdne short IconSear.00407426
0040749B C0FF 25 sar bh,25
0040749E 64:1371 00 adc esi,dword ptr fs:[ecx]
004074A2 8BC0 mov eax,eax
004074A4 - FF25 60137100 jmp dword ptr ds:[711360] ; kernel32.TlsGetValue
004074AA 8BC0 mov eax,eax
004074AC - FF25 5C137100 jmp dword ptr ds:[71135C] ; kernel32.TlsSetValue
004074B2 8BC0 mov eax,eax
4.Patch代码:
015C0000 0000 add byte ptr ds:[eax],al
015C0002 0000 add byte ptr ds:[eax],al
015C0004 0000 add byte ptr ds:[eax],al
015C0006 0000 add byte ptr ds:[eax],al
015C0008 0000 add byte ptr ds:[eax],al
015C000A BA 00104000 mov edx,IconSear.<ModuleEntryPoint> ; Code段头
015C000F 803A E8 cmp byte ptr ds:[edx],0E8
015C0012 75 14 jnz short 015C0028
015C0014 8B42 01 mov eax,dword ptr ds:[edx+1]
015C0017 03C2 add eax,edx
015C0019 05 05000000 add eax,5
015C001E 3D 00004501 cmp eax,1450000 ; 跟踪得到N多Call 1450000 ???
015C0023 75 03 jnz short 015C0028
015C0025 EB 0C jmp short 015C0033
015C0027 90 nop
015C0028 42 inc edx
015C0029 81FA 00108000 cmp edx,801000 ; data段头???
015C002F ^ 72 DE jb short 015C000F
015C0031 - EB FE jmp short 015C0031
015C0033 8915 00015C01 mov dword ptr ds:[15C0100],edx ; 这里注意改了
015C0039 60 pushad
015C003A FFE2 jmp edx
015C003C 90 nop
015C003D 90 nop
015C003E 90 nop
015C003F 90 nop
015C0040 90 nop
015C0041 90 nop
015C0042 90 nop
015C0043 60 pushad
015C0044 B8 68127100 mov eax,711268 ; IAT 开始
015C0049 90 nop
015C004A 3910 cmp dword ptr ds:[eax],edx
015C004C 75 23 jnz short 015C0071
015C004E 8B0D 00015C01 mov ecx,dword ptr ds:[15C0100] ; 改了
015C0054 C701 FF250000 mov dword ptr ds:[ecx],25FF ; 程序是Delphi的
015C005A 8941 02 mov dword ptr ds:[ecx+2],eax
015C005D 61 popad
015C005E 90 nop
015C005F 8B15 00015C01 mov edx,dword ptr ds:[15C0100] ; 改了
015C0065 90 nop
015C0066 90 nop
015C0067 90 nop
015C0068 ^ EB BE jmp short 015C0028
015C006A 90 nop
015C006B 90 nop
015C006C 90 nop
015C006D 90 nop
015C006E 90 nop
015C006F 90 nop
015C0070 90 nop
015C0071 83C0 04 add eax,4
015C0074 3D E01C7100 cmp eax,711CE0 ; ASCII "kernel32.dll"
015C0079 ^ 7E CF jle short 015C004A
015C007B ^ EB E0 jmp short 015C005D
015C007D 90 nop
015C007E 90 nop
015C007F 90 nop
内存窗口图: