首页
社区
课程
招聘
[原创]mfc spy,把mfc程序的内部函数揪出来
发表于: 2005-1-14 00:05 106471

[原创]mfc spy,把mfc程序的内部函数揪出来

2005-1-14 00:05
106471

把那个放大镜拖到mfc写的程序的窗口上,如securecrt,vc6等,
松开鼠标就能看到一些内部函数地址了。
如oninitdialog,onok什么的一目了然。
拖到子窗口如铵钮上时,可以看出其id,当然,这个工作也可以由spy++完成。
结合其父窗口message map的输出,还可以知道当点击这个按钮时,会跳到哪段程序上执行

2005.01.16 附件更新:
加入静态库支持,附上源码。

2005.01.19 更新:
发现取QQ时的一个bug,已经改正,源码也已更新
ps:新文件名为mfcspy2.rar和src2.rar,旧文件名中不带2,请版主删除旧文件.
附件:mfcspy2.rar
附件:src2.rar


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

收藏
免费 7
支持
分享
最新回复 (93)
雪    币: 390
活跃值: (707)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
2
附件呢?
2005-1-14 09:05
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
3
就是阿,附件呢?
2005-1-14 09:21
0
雪    币: 216
活跃值: (370)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
4
最初由 firstrose 发布
附件呢?


不好意思,昨晚选了附件,忘了点上传按钮!
2005-1-14 09:43
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
5
是楼主自己写的吗?我先在我的VC的demo程序力测试一下,呵呵
2005-1-14 09:49
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
6
非常感谢!!!!
2005-1-14 09:56
0
雪    币: 242
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
还不错,顶了。。。。。。。
2005-1-14 10:11
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
8
结合其父窗口message map的输出,还可以知道当点击这个按钮时,会跳到哪段程序上执行

========
楼主可以仔细讲解一下这个过程吗?

我是这样作的,我用VC刚才编写了一个test程序,添加了一个按钮,这个按钮的事件函数是这样的

void CTestDlg::OnButton1()
{
AfxMessageBox("1111");
}

编译完以后,我运行,用你的工具找到OnCommand的函数入口,记下这个地址,再用OD载入test,在那个地址下断点,点击那个按钮,就会被OD断下来,F8到MFC的dll里面,慢慢的跟踪就会跟踪到test的按钮函数代码!!呵呵,当然了,我是比较懒的,在MFC的dll里面我直接下test的code段的内存访问断点,F9运行直接断在函数的入口!!!

呵呵,我已经测试通过,感谢楼主阿!其实当初那本<<深入浅出MFC>>真的应该好好看!这些都是最基本的MFC的消息传递的流程.

2005-1-14 10:14
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
9
其实OnCommand调用OnCmdMsg来进行消息分发,所以直接找这个函数的地址,用OD下断,然后再下exe的内存访问断点,直接停在按钮函数的入口,太爽了!

以后MFC的程序有好看的了.省了好多事情.嘿嘿
2005-1-14 10:19
0
雪    币: 216
活跃值: (370)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
10
最初由 great123 发布
结合其父窗口message map的输出,还可以知道当点击这个按钮时,会跳到哪段程序上执行

========
楼主可以仔细讲解一下这个过程吗?

........


就以mfcspy自己为例!
用它spy一下那个spy it的按钮,你可以看到结果如下
map HWND 000C05EA To CWnd* failed!
这不要紧,上面的框中出现了: 000C05EA(Button,id=03e9)
id=03e9很重要,记住它,
然后,spy一下mfcspy的主窗口,输出很长内容,最后一段如下:

message map=00403480(mfcspy.exe+003480)
msg map entries at 004033C0(mfcspy.exe+0033C0)
OnMsg:WM_SYSCOMMAND(0112),func=00401520(mfcspy.exe+001520)
OnMsg:WM_PAINT(000f),func=004015A0(mfcspy.exe+0015A0)
OnMsg:WM_QUERYDRAGICON(0037),func=00401650(mfcspy.exe+001650)
OnCommand: notifycode=0000 id=03e9,func=00401670(mfcspy.exe+001670)
OnMsg:WM_LBUTTONUP(0202),func=004017F0(mfcspy.exe+0017F0)
OnMsg:WM_MOUSEMOVE(0200),func=00401970(mfcspy.exe+001970)
OnMsg:0401,func=00401760(mfcspy.exe+001760)

注意这一行:
OnCommand: notifycode=0000 id=03e9,func=00401670(mfcspy.exe+001670)
这里有id=03e9!!跟上面的id一样
也就是说,点击那个铵钮的时候,mfc 会跳到 00401670 处执行
你注意到了没??
2005-1-14 10:49
0
雪    币: 343
活跃值: (611)
能力值: ( LV9,RANK:810 )
在线值:
发帖
回帖
粉丝
11
晕。我的mfc程序:(
2005-1-14 10:56
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
12
非常感谢楼上的解释,再次感谢.加我QQ:14322807,我们好好聊聊
2005-1-14 11:00
0
雪    币: 343
活跃值: (611)
能力值: ( LV9,RANK:810 )
在线值:
发帖
回帖
粉丝
13
对我的程序不起作用。呵呵:D
2005-1-14 11:01
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
14
这个工具算是2005年的比较重要的一个工具~~~~~对于我来说,呵呵

以前总是用SPY++配合OD扫描MFC的函数来进行.
2005-1-14 11:03
0
雪    币: 236
活跃值: (155)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
15
对MFC程序很有威胁,刚才发现一个问题,好像对静态编译的MFC程序好像不能工作。
2005-1-14 12:03
0
雪    币: 216
活跃值: (370)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
16
最初由 nOpnOp 发布
对MFC程序很有威胁,刚才发现一个问题,好像对静态编译的MFC程序好像不能工作。

对,目前是这样,不过我会考虑加入支持。请等等!
2005-1-14 12:05
0
雪    币: 236
活跃值: (155)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
17
最初由 goldenegg 发布

对,目前是这样,不过我会考虑加入支持。请等等!


很想和你交流一下,我这里也有一款自己做的工具可以查找按钮对应的消息处理入口,原理和你不一样。我是基于调试的。因为我这里有限制不能上传文件,所以请留下你的Email我给你发过来。footfish2002@hotmail.com是我的MSN,欢迎交流
2005-1-14 12:11
0
雪    币: 216
活跃值: (370)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
18
xungeng@gmail.com
2005-1-14 12:18
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
比spy++好用,感觉很直接!
2005-1-14 12:39
0
雪    币: 236
活跃值: (155)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
20
最初由 goldenegg 发布
xungeng@gmail.com

已经发了,你看一下你的邮件。
2005-1-14 12:44
0
雪    币: 329
活跃值: (343)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
21
很不错,希望加入对MFC静态编译的支持。精华+置顶:D
2005-1-14 12:48
0
雪    币: 236
活跃值: (155)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
22
刚才看了一下你的程序,发现做法很新颖,利用HOOK(WH_CALLWNDPROC)机制来将动态库注入到目标进程然后在内部利用MFC自己的CWnd类函数和内部数据结构来得到这些信息,很有创意!如果有错谬的地方请釜正!期待支持静态编译
2005-1-14 13:28
0
雪    币: 234
活跃值: (104)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
酷之极也!
2005-1-14 17:28
0
雪    币: 97697
活跃值: (200834)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
24
最初由 goldenegg 发布


就以mfcspy自己为例!
用它spy一下那个spy it的按钮,你可以看到结果如下
map HWND 000C05EA To CWnd* failed!
........


辛苦了!!!
2005-1-14 17:35
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
的确很有用!!感谢楼主!!
2005-1-14 17:52
0
游客
登录 | 注册 方可回帖
返回
//