首页
社区
课程
招聘
[原创]追踪MFC的按钮事件学习笔记
发表于: 2009-6-17 17:17 21793

[原创]追踪MFC的按钮事件学习笔记

2009-6-17 17:17
21793

追踪MFC的按钮事件学习笔记(注:word文档中有图)

阅读了“MFC程序逆向 – 消息篇(上)+(下)”一文后,收获颇丰。作者提到对于对话框程序,在这个函数函数入口处设置断点最好(请记住这个函数:CCmdTarget::OnCmdMsg())。在学习的过程中,对OD的一些使用方法进一步加深了理解。
首先用VC6.0建立一个基于对话框的MFC程序,分别采用动态链接(TraceButtonDynamic.exe)和静态链接(TraceButtonStatic.exe)生成。
1.        动态链接的程序分析
(1)首先用IDA找到CCmdTarget::OnCmdMsg()的地址。在我的计算机中为0040157C.
(2)用OD载入,CTRL+G,输入0040157C,来到0040157C 。
        可以看到有一jmp语句,Enter进入。这里就是:OnCmdMsg()的入口处。
        向下翻倒push    dword ptr [eax+14], F2下断,运行程序。
        单击“hello,world”按钮,可以看到00401480,就是按钮所处理的东西。
        CTRL+G,输入00401480,来到00401480。OK,搞定。
(3)更简单的方法。
        重新载入TraceButtonDynamic.exe。Alt+ E,载入DLL模块,双击MFC42.         
        来到MFC42.dll
        CTRL+S, 输入
        push    dword ptr [ebp+14]
        push    dword ptr [eax+10]
        push    dword ptr [ebp+10]
        push    dword ptr [eax+14]
        push    dword ptr [ebp+C]
        push    dword ptr [ebp+8]
        单击查找。
        在“push    dword ptr [eax+14]”, F2下断即可
2.静态链接的程序分析。
     Od载入。CTRL+S,输入指令序列。
     单击查找,在“push    dword ptr [eax+14]”, F2下断即可。

     当然还可以在语句序列下面的call处F7进入(本例为call    004157F5)。进入后,直接在
    “call            dword ptr [ebp+14]”这条语句出下断。当然可以用搜索的方法。

附件中是程序和文档。
以上是本人的一些学习心得,不妥之处,敬请指正。
                                                                  2009-09-17
                                                                  By littlewisp


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (21)
雪    币: 5299
活跃值: (3689)
能力值: ( LV13,RANK:283 )
在线值:
发帖
回帖
粉丝
2
自己做沙发,呵呵。
2009-6-17 17:18
0
雪    币: 2575
活跃值: (502)
能力值: ( LV2,RANK:85 )
在线值:
发帖
回帖
粉丝
3
MFC程序好像论坛有一个工具可以辅助分析的
2009-6-17 21:37
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
4
谢谢,今天跟了下,加深了印象,还是手动好,有时工具和脚本会莫名出问题
2009-6-18 00:06
0
雪    币: 72
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
这样也行啊?
2009-6-18 01:28
0
雪    币: 5299
活跃值: (3689)
能力值: ( LV13,RANK:283 )
在线值:
发帖
回帖
粉丝
6
您说的是MFCSPY吧,用过了,对2003和2005好像不行,只能自己跟踪下断了。有机会学习一下MFCSPY
2009-6-18 09:27
0
雪    币: 213
活跃值: (147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
OnCmdMsg()
这个标记十分重要,哈哈
2009-6-19 10:22
0
雪    币: 236
活跃值: (155)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
看看我的工具,可能对你有帮助
http://bbs.pediy.com/showthread.php?t=81855&highlight=
2009-6-19 10:54
0
雪    币: 5299
活跃值: (3689)
能力值: ( LV13,RANK:283 )
在线值:
发帖
回帖
粉丝
9
谢谢nOpnOp,这个更方便,也挺好用。
2009-6-19 11:06
0
雪    币: 46
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
学习下!!!!

2009-6-25 14:38
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
学习下!!!!
2009-6-27 16:06
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
好东西,学习,学习!!!!
2009-6-27 17:26
0
雪    币: 132
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
值得学习,支持。。不过楼主笔误了哦,写成09年9月17号了~
2009-6-27 22:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
好东西,学习一下
2009-6-28 11:05
0
雪    币: 129
活跃值: (1095)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
学习了~~~~~~~~
2009-6-29 22:03
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
这个和“用特征码定位关键代码,秒杀MFC程序”有异曲同工之妙啊。
2009-6-30 15:49
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
OnCmdMsg 离消息处理入口还远着哪,不过是必经之路
2009-7-1 16:22
0
雪    币: 164
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sas
18
学习中!!!!!!1
2009-7-2 15:23
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
很好 1111111111111
2009-7-2 16:00
0
雪    币: 207
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
不错,受启发了.
2009-7-2 20:38
0
雪    币: 236
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
知道方法了。
那怎么防御呢?

难道不使用button吗?
2010-3-3 19:09
0
雪    币: 249
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
很难防御,除非你不用mfc机制,直接在pretranslatemessage()处理
2010-3-3 22:47
0
游客
登录 | 注册 方可回帖
返回
//