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

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

2005-1-14 00:05
105605
把那个放大镜拖到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

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞7
打赏
分享
最新回复 (93)
雪    币: 390
活跃值: (707)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
firstrose 16 2005-1-14 09:05
2
0
附件呢?
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
great123 2005-1-14 09:21
3
0
就是阿,附件呢?
雪    币: 226
活跃值: (330)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
goldenegg 2 2005-1-14 09:43
4
0
最初由 firstrose 发布
附件呢?


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

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

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

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

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

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

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

以后MFC的程序有好看的了.省了好多事情.嘿嘿
雪    币: 226
活跃值: (330)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
goldenegg 2 2005-1-14 10:49
10
0
最初由 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 处执行
你注意到了没??
雪    币: 343
活跃值: (611)
能力值: ( LV9,RANK:810 )
在线值:
发帖
回帖
粉丝
ForEver 20 2005-1-14 10:56
11
0
晕。我的mfc程序:(
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
great123 2005-1-14 11:00
12
0
非常感谢楼上的解释,再次感谢.加我QQ:14322807,我们好好聊聊
雪    币: 343
活跃值: (611)
能力值: ( LV9,RANK:810 )
在线值:
发帖
回帖
粉丝
ForEver 20 2005-1-14 11:01
13
0
对我的程序不起作用。呵呵:D
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
great123 2005-1-14 11:03
14
0
这个工具算是2005年的比较重要的一个工具~~~~~对于我来说,呵呵

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

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

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


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

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


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


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