首页
社区
课程
招聘
[原创][2013/4/23]xspy v0.3,探测mfc/alt/wtl窗口,开源
发表于: 2013-4-19 11:22 12290

[原创][2013/4/23]xspy v0.3,探测mfc/alt/wtl窗口,开源

2013-4-19 11:22
12290
mfcspy大概只支持到vc6.0吧,这个xspy继承mfcspy,目标是支持所有mfc版本。并且加入对ATL/WTL的简单分析。
已经开源:http://bbs.pediy.com/showthread.php?t=178253

changelog:
2013年4月23日
0.3版本,初步支持x64位,暂时只测试了mfc90编译的x64程序
以后更新会放慢,根据使用反馈情况定

2013年4月23日
0.2版本发布,精确检测静态链接的MFC程序的信息,暂时只支持mfc42和mfc90的CWnd和CDialog的虚函数显示(因为我机子只有vs2008),其他MFC版本只显示到父类CCmdTarget。

2013年4月19日
0.1版本发布,暂时无MFC类成员变量信息显示

features:
借鉴mfcspy,目标是支持所有mfc版本
支持ATL/WTL的简单分析
分析速度比mfcspy更快

本程序仅作学习交流研究之用,还有很多bug和不完善的地方,如果你发现无法分析的程序,有可能的话请将样本程序发送至
lynnux@qq.com,有建议或意见也请发送至这个邮箱,非常感谢!

greets:
特别感谢 goldenegg http://bbs.pediy.com/showthread.php?s=&threadid=9805
另外感谢 LoveMeiL http://bbs.pediy.com/showthread.php?p=1143082

该工具已经加入http://tools.pediy.com/,非常感谢看雪老大,若有bug和建议反馈,我更新后一定放这里!

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 244
活跃值: (40)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
请问一下[00]vftable address = 是怎么获取的?
2013-4-19 12:39
0
雪    币: 3642
活跃值: (1972)
能力值: ( LV6,RANK:93 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=jiangjing;1168476]请问一下[00]vftable address = 是怎么获取的?[/QUOTE]

你说的是分析ATL/WTL窗口的结果吧?
如果是对话框,通过LONG_PTR winProc = ::GetWindowLongPtr(hWnd, DWLP_DLGPROC);
一般的窗口用LONG_PTR  winProc = ::GetWindowLongPtr(hWnd, GWLP_WNDPROC);

得到的地址就是atl里的thunk数据,参考d:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\atlstdthunk.h中的_stdcallthunk数据结构。主要包含窗口类的this指针和一个窗口回调过程

比如分析xspy自身:
----------获取ATL/WTL相关信息-------------
DWLP_DLGPROC address: 0x00596188 // 即::GetWindowLongPtr(hWnd, DWLP_DLGPROC);得到的结果
Dialog thunk address = 0x00596188 // thunk地址,即上面的值
class intstance = 0x0043F98C // 窗口类this指针
DialogProc= 0x001A96F0 // 回调函数
[00]vftable address = 0x001BB6BC // this地址头个成员就是虚函数表的指针
[vtbl+00]ProcessWindowMessage = 0x001A6640 // 虚函数表的第一个函数
GWLP_WNDPROC address: 0x75D2BB59  // 即::GetWindowLongPtr(hWnd, GWLP_WNDPROC);得到的结果

其中ProcessWindowMessage比较重要,所有消息都会经过这里。
ATL/WTL程序不像MFC程序那样,没有message map结构,因此读到的信息没有MFC多。
2013-4-19 13:42
0
雪    币: 3305
活跃值: (2027)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
神器自然要收藏了。
2013-4-19 15:30
0
雪    币: 3642
活跃值: (1972)
能力值: ( LV6,RANK:93 )
在线值:
发帖
回帖
粉丝
5
自己顶。0.2版本发布。
CWnd和CDialog信息暂时只有mfc42和mfc90显示得出来,其他MFC版本因我机子只装了VS2008没法弄,只能显示到CCmdTarget的虚函数那层,如果你想帮忙,请随便创建一个MFC对话框工程,在C++命令行里加入/d1reportAllClassLayout,然后编译,把输出窗口里的那些信息复制发送到lynnux@qq.com,当然请注明vs版本,最好连编译好的MFC程序一起发送过来。
2013-4-23 11:04
0
雪    币: 291
活跃值: (169)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
非常不错的工具
2013-4-24 10:29
0
雪    币: 400
活跃值: (239)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
7
好东东!!顶一下!!!!!11
2013-4-24 21:35
0
雪    币: 50161
活跃值: (20610)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
8
有些可惜,为啥不同步更新一份呢?更新,还可以引些人气关注你的Blog.
2013-5-3 20:49
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
很好的工具,感谢提供!
2013-8-6 11:49
0
雪    币: 3642
活跃值: (1972)
能力值: ( LV6,RANK:93 )
在线值:
发帖
回帖
粉丝
10
顶个,已经开源
2013-9-3 15:51
0
雪    币: 80
活跃值: (87)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
好东西,好东西。
2013-9-4 11:58
0
雪    币: 2664
活跃值: (3400)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
12
留名
2014-4-11 11:02
0
雪    币: 2103
活跃值: (162)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
就是咯 为啥不同步更新呢?我发布的就一直更新呢
2014-7-10 14:33
0
雪    币: 144
活跃值: (163)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
mark
2014-9-22 21:04
0
雪    币: 5021
活跃值: (4793)
能力值: ( LV10,RANK:171 )
在线值:
发帖
回帖
粉丝
15
感谢!
2018-8-29 11:52
0
游客
登录 | 注册 方可回帖
返回
//