首页
社区
课程
招聘
[原创]通过分析调用堆栈定位MFC按钮事件
发表于: 2019-1-25 21:34 7864

[原创]通过分析调用堆栈定位MFC按钮事件

2019-1-25 21:34
7864

1,逆向分析这个东西的前提是你得懂这个东西,例如,就像逆飞机一样,你连飞机是什么都不知道,当然你也就逆不出来,逆之前, 你得自己会造飞机,只是你没有别人造的好。分析过程中,不需要弄懂每个细节,只需关注重点部分和整体流程。学会根据经验猜测。

2,原理:
我们新建的MFC程序,界面上就放2个按钮,事件处理函数随便写。然后我们在按钮那里设置断点。

程序运行起来后,我们点击button1,程序就断下来了,然后我们就查看它的调用堆栈,谁调用了这个按钮处理函数,找到事件分发函数。
_AfxDispatchCmdMsg就是分发函数。

双击 _AfxDispatchCmdMsg 进入到如下函数,这个就是处理过程。然后我们分析这个函数的参数,有点不太一样它有7个参数,可以作为一个特征。
_AfxDispatchCmdMsg(CCmdTarget * 0x0018fe50 {CSssDlg}, unsigned int 1000, int 0, void (void)* 0x00401014 CSssDlg::OnButton1(void), void * 0x00000000, unsigned int 12, AFX_CMDHANDLERINFO * 0x00000000) line 88 

_AfxDispatchCmdMsg(CCmdTarget * 0x0018fe50 {CSssDlg}, unsigned int 1000, int 0, void (void)* 0x00401014 CSssDlg::OnButton1(void), void * 0x00000000, unsigned int 12, AFX_CMDHANDLERINFO * 0x00000000) line 88 

调用堆栈已经显示了调用这个函数时的所有参数:比如nID=1000,我们需要大胆猜测这个东西是什么,nID有可能是按钮的编号。拿着这个疑问我们来试第二个按钮:
_AfxDispatchCmdMsg(CCmdTarget * 0x0018fe50 {CSssDlg hWnd=0x001d1e92}, unsigned int 1001, int 0, void (void)* 0x0040107d CSssDlg::OnButton2(void), void * 0x00000000, unsigned int 12, AFX_CMDHANDLERINFO * 0x00000000) line 88
nID变成了1001,哈哈猜对了,nID基本就是窗口编号。
_AfxDispatchCmdMsg(CCmdTarget * 0x0018fe50 {CSssDlg hWnd=0x001d1e92}, unsigned int 1001, int 0, void (void)* 0x0040107d CSssDlg::OnButton2(void), void * 0x00000000, unsigned int 12, AFX_CMDHANDLERINFO * 0x00000000) line 88
nID变成了1001,哈哈猜对了,nID基本就是窗口编号。
我们注意到倒数第3个参数是传递的是按钮事件函数的地址。
_AfxDispatchCmdMsg函数的特征是什么呢,特征码的选取是随机的,爱取什么就取什么,只要满足它能代表这个函数的唯一想就可以了。
 
3 OD分析

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

最后于 2019-1-25 23:58 被毕达哥拉斯编辑 ,原因: 上次未写完,现在进行补充
收藏
免费 5
支持
分享
打赏 + 4.00雪花
打赏次数 2 雪花 + 4.00
 
赞赏  kanxue   +2.00 2019/02/02 春节快乐
赞赏  junkboy   +2.00 2019/01/26
最新回复 (22)
雪    币: 2575
活跃值: (502)
能力值: ( LV2,RANK:85 )
在线值:
发帖
回帖
粉丝
2
感谢分享~
2019-1-25 22:36
0
雪    币: 6258
活跃值: (3320)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
结束了?
2019-1-25 22:50
0
雪    币: 1808
活跃值: (578)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
4
chinasmu 结束了?
还没写完呢,明天继续补上
2019-1-25 22:51
0
雪    币: 11716
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
支持          
2019-1-26 08:20
0
雪    币: 26398
活跃值: (63257)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
6
支持!坐等楼主更新
2019-1-26 11:07
1
雪    币: 351
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
手动点赞
2019-1-26 17:14
0
雪    币: 5573
活跃值: (2153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
感谢分享!
2019-1-26 17:38
0
雪    币: 3797
活跃值: (769)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
头次接触MFC,被绕晕了
2019-1-29 07:59
0
雪    币: 1808
活跃值: (578)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
10
gaoan 头次接触MFC,被绕晕了
接触MFC之前,最好先接触Win32程序
2019-1-29 09:58
0
雪    币: 403
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
谢谢分享,
2019-1-29 11:28
0
雪    币: 12848
活跃值: (9142)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
12
这跟直接用VS调试有啥区别
2019-1-29 12:37
0
雪    币: 198
活跃值: (256)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
写的不错
2019-1-30 05:44
0
雪    币: 9057
活跃值: (1615)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
14
不错,分析清楚,感谢分享。我就喜欢特征码一步到位…
2019-1-31 09:25
0
雪    币: 8826
活跃值: (3063)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
好文章
2019-2-2 18:48
0
雪    币: 4922
活跃值: (4622)
能力值: ( LV10,RANK:171 )
在线值:
发帖
回帖
粉丝
16
思路简洁清晰,谢谢分享
2019-2-4 10:10
0
雪    币: 131
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
思路非常清晰,这样有质量的帖子不多。楼主要准备写个通杀的程序吗?
2019-2-9 00:42
0
雪    币: 279
活跃值: (123)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
很好,终于学会找mfc的按钮事件了
2019-2-10 15:32
0
雪    币: 279
活跃值: (123)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
不同电脑这个编码值是不一样的
2019-2-10 16:14
0
雪    币: 1808
活跃值: (578)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
20
罗小墨 不同电脑这个编码值是不一样的
讲得是思路,你可以去找不同版本的相同的特征码。更好的寻找mfc按钮事件,参照我的另外2篇文章
2019-2-10 16:41
0
雪    币: 83
活跃值: (1087)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
21
毕达哥拉斯 讲得是思路,你可以去找不同版本的相同的特征码。更好的寻找mfc按钮事件,参照我的另外2篇文章
不同版本 怎么找
2019-2-11 08:44
0
雪    币: 1808
活跃值: (578)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
22
killpy 不同版本 怎么找
大佬就别笑话我了
2019-2-12 10:17
0
雪    币: 1199
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
我们注意到倒数第3个参数是传递的是按钮事件函数的地址。
pfn是倒数第四个参数吧?
2019-7-5 23:04
0
游客
登录 | 注册 方可回帖
返回
//