通常在调试MFC程序时,虽然可以通过导入MFC42.lib来得到函数名称,但是默认的函数名称类似于:
在名称列表中是按序号排序的。试想如果要查找在何处调用_AfxWinMain,但是又不知道序号,要在上千个函数列表中找到,将是一项艰巨的任务。
在分析某个MFC程序时感到太累,就想了一个办法把所有带序号的名称统统转换为如下格式:
经过努力,终于实现了这个目标。
分析OllyICE代码后,发现需要修改四个地方,添加一块代码。
第一处修改:
0045CEF0 mov ecx, dword ptr [ebp-8] ; 改
0045CEF3 mov byte ptr [ebp+ecx-288], 5F ; 改
改为:
0045CEF0 jmp 004AF7C0
0045CEF5 nop
0045CEF6 nop
0045CEF7 nop
0045CEF8 nop
0045CEF9 nop
0045CEFA nop
在004AF7C0处添加如下代码:
004AF7C0 lea edx, dword ptr [ebp-288]
004AF7C6 inc edx
004AF7C7 push edx
004AF7C8 add edx, dword ptr [ebp-8]
004AF7CB add edx, eax
004AF7CD mov byte ptr [edx], 5F
004AF7D0 inc edx
004AF7D1 push edx
004AF7D2 call dword ptr [50D458] ; kernel32.lstrcpyA
004AF7D8 lea edx, dword ptr [ebp-288]
004AF7DE add edx, dword ptr [ebp-8]
004AF7E1 inc edx
004AF7E2 push edx
004AF7E3 lea edx, dword ptr [ebp-288]
004AF7E9 push edx
004AF7EA call dword ptr [50D458] ; kernel32.lstrcpyA
004AF7F0 jmp 0045CEF5
第二处修改:
0045D3A4 lea edx, dword ptr [ebp-488]
0045D3AA lea eax, dword ptr [ebp-388]
0045D3B0 push edx
0045D3B1 lea edx, dword ptr [ebp-288]
0045D3B7 mov ecx, dword ptr [ebp-3C]
0045D3BA push ecx
0045D3BB push eax
0045D3BC push 004BC07B ; ASCII "%s.#%i_%s"
0045D3C1 push edx ; |Arg1
0045D3C2 call <_sprintf> ; \OllyICE.004A6C2C
改为:
0045D3A4 mov ecx, dword ptr [ebp-3C]
0045D3A7 push ecx
0045D3A8 lea edx, dword ptr [ebp-488]
0045D3AE push edx
0045D3AF lea eax, dword ptr [ebp-388]
0045D3B5 push eax
0045D3B6 push 004BC134 ; ASCII "%s.%s_%i"
0045D3BB lea edx, dword ptr [ebp-288]
0045D3C1 push edx ; |Arg1
0045D3C2 call <_sprintf> ; \OllyICE.004A6C2C
第三处修改:
0045D478 lea eax, dword ptr [ebp-488]
0045D47E lea ecx, dword ptr [ebp-388]
0045D484 push eax ; /Arg5
0045D485 lea eax, dword ptr [ebp-288] ; |
0045D48B mov edx, dword ptr [ebp-3C] ; |
0045D48E push edx ; |Arg4
0045D48F push ecx ; |Arg3
0045D490 push 004BC07B ; |Arg2 = 004BC07B ASCII "%s.#%i_%s"
0045D495 push eax ; |Arg1
0045D496 call <_sprintf> ; \OllyICE_.004A6C2C
改为:
0045D478 mov edx, dword ptr [ebp-3C]
0045D47B push edx ; /Arg5
0045D47C lea eax, dword ptr [ebp-488] ; |
0045D482 push eax ; |Arg4
0045D483 lea ecx, dword ptr [ebp-388] ; |
0045D489 push ecx ; |Arg3
0045D48A push 004BC07B ; |Arg2 = 004BC07B ASCII "%s.%s_%i"
0045D48F lea eax, dword ptr [ebp-288] ; |
0045D495 push eax ; |Arg1
0045D496 call <_sprintf> ; \OllyICE_.004A6C2C
第四处直接修改:
004BC07B 25 73 2E 25 73 5F 25 69 00 00 ; %s.%s_%i..
修改后的OllyICE放在附件中。
OllyICE_2.rar
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课