首页
社区
课程
招聘
OD不能下消息断点
发表于: 2013-2-1 13:18 8471

OD不能下消息断点

2013-2-1 13:18
8471
我这个OD是从咱看雪上下载下来的,版本是1.0.10.0,我的操作系统是win7旗舰版。
我用vs2005向导生成了个基于对话框(CDialog)的MFC应用程序,用OD调试之。
打开OD的windows窗口,想下个消息断点。
该MFC应用程序有三个HWND,一个是主窗口,另两个是它的按钮,按钮的窗口过程的地址在系统地址范围之内,但用VS自带的spy++工具查看之,窗口过程地址均是在0x80000000以下,而且经过实验推论,spy++提供的信息均是对的,OD显示的这三个窗口句柄信息,除了窗口过程地址信息是错的外,其他的都正确。
我在OD的帮助文档上查找了相应的帮助主题,关于windows一篇中有这么一句话:
/*
基于NT的操作系统隐藏了窗口过程(处理所有窗口消息的函数)的地址。这样可以有效的禁止属于不同进程窗口的子类化[subclassing],但这也给调试器带来的麻烦。OllyDbg 向被调试程序代码注入,通过执行 GetWindowLong 函数来获得窗口过程的地址。这种方式非常耗时,有时(特别是多线程程序)还不安全。只有在被调试程序暂停,同时在选项允许代码注入以获得WinProc地址[Allow code injection to get address of WinProc中设置为允许注入时,我才会使用这种方法。
*/
我小心谨慎地严格按上述执行了一遍,可是OD中显示的窗口过程地址依然是错的,这也意味着,OD的消息断点功能不能用了。
OD实现这个功能,据帮助文档上所说,是用一种代码注入技术,那么会不会跟我用的win7系统有关?于是,我又用xp系统试了一下,还是不行。
我黔驴技穷了,消息断点这么有用的功能却因这一BUG而不能用了,多遗憾啊,求大神们解救,不胜感激。

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

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 0
活跃值: (85)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
求救啊,俺心都要碎了,谁能修复俺这残破的心
2013-2-1 14:41
0
雪    币: 46
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我也发现这个了 还有2.0的版本也没人开发
2013-2-1 16:03
0
雪    币: 0
活跃值: (85)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
是啥原因呢?
2013-2-1 16:33
0
雪    币: 350
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
人家写的是 ClsProc, 不是WndProc
2013-2-1 17:35
0
雪    币: 0
活跃值: (85)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6

windows窗口其中有两个栏目,一个是ClsProc,另一个是WndProc,都是不对的。之前我没表达清楚,望请见谅。
2013-2-3 09:41
0
雪    币: 0
活跃值: (85)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
求兄弟们可怜,希望能在12个小时内帮俺解决,否则只能寻求来生了
2013-2-4 09:18
0
雪    币: 19
活跃值: (67)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
LZ你去寻求来生了吗
2013-2-5 19:10
0
雪    币: 288
活跃值: (212)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
9
这不简单,多下几个不同版本的OD来用就知道了。我经常遇到很多类似的问题,换一下别的OD一般就解决。
2013-2-5 20:12
0
雪    币: 46
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
把操作系统格式化,重装XP
2013-2-8 10:57
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
由于工作需要 我经常需要写一个dll注入远程目标exe中,subclass或者superclass目标进程中的窗口过程,楼主如果只是测试OD下消息断点的话,我建议自己写一个win32窗口应用程序,MFC的Dialog-based app中各种message routing 各种需函数寻址,而且MFC有肯能会在内部subclass target window
如果楼主非要下消息断点的话,如果是用于学习目的 我建议楼主 用GetDestWnd + SetwindowLong(GWL_WNDPROG)  替换为自己的僵尸过程

LRESULT CALLBACK SublcassWindowProc(          HWND hwnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam
)
{
     _asm
     {
         mov eax,eax
         mov ebx,ebx
     }
    CallOrgWinProc(....)
}
////////////////////////////////////

让OD跑起来,然后动态搜索   mov eax,eax  mov ebx,ebx   这代码附近就是楼主要的消息断点
在函数头处加一个条件断点:  [esp+8]==WM_MessageYouWant;
2013-2-22 18:22
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
把钱给我把,无聊死了
2013-2-22 18:31
0
雪    币: 0
活跃值: (85)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
感谢 cpp肥兔
2013-3-18 10:02
0
雪    币: 0
活跃值: (85)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
不好意思,我无法给你钱,因为你并没有把你的银行卡发给我
2013-3-18 14:44
0
游客
登录 | 注册 方可回帖
返回
//