首页
社区
课程
招聘
[原创]MFC程序里单击按钮时执行的入口地址查找方法
发表于: 2007-11-4 21:40 7160

[原创]MFC程序里单击按钮时执行的入口地址查找方法

2007-11-4 21:40
7160
MFC程序里单击按钮时执行的入口地址查找方法

我这个方法可能比较繁琐,但我找不出更好的办法了,哪位知道怎么知道能更快,更方便地找出入口地址的麻烦教我一下,在此先谢了~

首先用OD装入MFC程序运行起来,在OD里 查看->窗口 打开窗口面板 在所要的中断按钮右键 选"在ClassProc上设消息断点",消息里选"202 WM_LBUTTONUP",好了按确定!

这样完成后点击按钮时OD就在77D3AFFE中断了下来
77D3AFFE >  8BFF            mov     edi, edi
77D3B000    55              push    ebp
77D3B001    8BEC            mov     ebp, esp
77D3B003    8B4D 08         mov     ecx, dword ptr ss:[ebp+8]
77D3B006    56              push    esi
77D3B007    E8 C4D4FDFF     call    USER32.77D184D0
77D3B00C    8BF0            mov     esi, eax
77D3B00E    85F6            test    esi, esi
77D3B010    74 38           je      short USER32.77D3B04A

这里是USER32领空!所以我们要回到程序领空,在OD菜单里 查看->内存 在我们程序的.text区断访问设置中断

然后F9运行,OD就在004019C8断了下来,这里就是我们程序领空了
004019C2   .- FF25 14204000 jmp     dword ptr ds:[<&MFC42.#5163_?OnWndMsg@CWnd@@MAEHIIJPAJ@Z>]
004019C8   .- FF25 18204000 jmp     dword ptr ds:[<&MFC42.#6374_?WindowProc@CWnd@@MAEJIIJ@Z>]  
004019CE   .- FF25 1C204000 jmp     dword ptr ds:[<&MFC42.#4353_?OnAmbientProperty@CWnd@@UAEHP>
004019D4   .- FF25 20204000 jmp     dword ptr ds:[<&MFC42.#3798_?GetSuperWndProcAddr@CWnd@@MAE>
004019DA   .- FF25 24204000 jmp     dword ptr ds:[<&MFC42.#4837_?OnNotify@CWnd@@MAEHIJPAJ@Z>]
004019E0   .- FF25 28204000 jmp     dword ptr ds:[<&MFC42.#4441_?OnCommand@CWnd@@MAEHIJ@Z>]  

但不是我们所要找的位置,还要继续分析.这里是最重要的了,在这地方有N多的连续jmp指令,我们向下查找,
找到OnCmdMsg,也就是下面的00401B66,在00401B66按F2设置中断
00401B66   .- FF25 30214000 jmp     dword ptr ds:[<&MFC42.#4425_?OnCmdMsg@CDialog@@UAEHIHPAXPA>;  
00401B6C   .- FF25 34214000 jmp     dword ptr ds:[<&MFC42.#3597_?GetRuntimeClass@CDialog@@UBEP>;  
00401B72   $- FF25 38214000 jmp     dword ptr ds:[<&MFC42.#324_??0CDialog@@QAE@IPAVCWnd@@@Z>]  ;  

再F9运行起来 程序终于在00401B66断了下来

然后F8让它执行下一步,运行到这里,这里是MFC领空
73D9DE90 >  8BFF            mov     edi, edi
73D9DE92    55              push    ebp
73D9DE93    8BEC            mov     ebp, esp
73D9DE95    53              push    ebx
73D9DE96    8B5D 08         mov     ebx, dword ptr ss:[ebp+8]
73D9DE99    56              push    esi
73D9DE9A    57              push    edi
73D9DE9B    FF75 14         push    dword ptr ss:[ebp+14]
73D9DE9E    8B7D 0C         mov     edi, dword ptr ss:[ebp+C]
73D9DEA1    FF75 10         push    dword ptr ss:[ebp+10]

再像上面的 在OD菜单里 查看->内存 在我们程序的.text区断访问设置中断

再F9运行起来,在00401340中断下来,这里虽然是程序自己领空,但还不是我我们所要地址

00401340   .  B8 20234000   mov     eax, MyCalcul.00402320
00401345   .  C3            retn

F8两次后,又到MFC的73D32383 位置
73D32383   /EB 15           jmp     short MFC42.73D3239A
73D32385   |FF75 08         push    dword ptr ss:[ebp+8]
73D32388   |FF75 0C         push    dword ptr ss:[ebp+C]
73D3238B   |53              push    ebx
73D3238C   |FF76 04         push    dword ptr ds:[esi+4]
73D3238F   |E8 DAFEFFFF     call    MFC42.#1145_?AfxFindMessageEntry@@YGPBUAFX_MSGMAP_ENTRY@@P>
73D32394   |85C0            test    eax, eax

这时还要 像上面的 在OD菜单里 查看->内存 在我们程序的.text区断访问设置中断
F9运行起来,终在00401590断了下来 这里就是入口地址了!!

00401590   .  83EC 64       sub     esp, 64
00401593   .  A1 24304000   mov     eax, dword ptr ds:[403024]
00401598   .  66:8B15 2C304>mov     dx, word ptr ds:[40302C]
0040159F   .  53            push    ebx
004015A0   .  56            push    esi
004015A1   .  8BF1          mov     esi, ecx

以上地址会因程序的不同而不一样,但只要是MFC程序,按这个方法来找出入口地址都会找到的~

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 207
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
呵呵!学习了!我一般是用Ctr+F9几次就回到入口地址了!
2007-11-4 22:12
0
雪    币: 92
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
还不会,学习中……
2007-11-4 22:51
0
雪    币: 50161
活跃值: (20615)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
感谢分享和交流。
这个帖子看看,可能有参考作用:http://bbs.pediy.com/showthread.php?t=20078
2007-11-4 23:40
0
雪    币: 202
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
这个我怎么弄也找不到入口地址
2007-11-5 01:06
0
游客
登录 | 注册 方可回帖
返回
//