首页
社区
课程
招聘
终于知道如何在OllyDbg下设消息断点了
2004-10-14 17:09 11425

终于知道如何在OllyDbg下设消息断点了

2004-10-14 17:09
11425
首先运行一个程序,打开"窗口"界面,选择所调试程序的主窗口,右键.选择"消息断点在 ClassProc",然后在列表中选一个需要的消息(如:WM_RBUTTONDOWN),下面的选项选择"中断在相同标题的窗口",然后确定就可以了.现在在窗口上点一下右键试试看吧...

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

收藏
点赞1
打赏
分享
最新回复 (13)
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
owlcn 2004-10-14 17:11
2
0
希望各位大虾把自己使用OllyDbg的经验总结一下,做一个专辑比较好.像我们这些新手一上来一头雾水.感觉OD超不适应.不过慢慢研究出来了.还是觉得非常好用的.大家有空多帮帮我们这些虾米.谢谢哈.
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
一真 2004-10-14 17:51
3
0
OD不错!不过还有很多功能不会也不懂。
雪    币: 216
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jrs13579 2004-10-14 19:55
4
0
最初由 owlcn 发布
首先运行一个程序,打开"窗口"界面,选择所调试程序的主窗口,右键.选择"消息断点在 ClassProc",然后在列表中选一个需要的消息(如:WM_RBUTTONDOWN),下面的选项选择"中断在相同标题的窗口",然后确定就可以了.现在在窗口上点一下右键试试看吧...


非常不错!!我试了一下存在以下问题:断下后无法返回程序领空,第二次运行后此消息断点无效!
不知楼主情况如何,能否举一实例说明?
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
owlcn 2004-10-14 19:58
5
0
第一个问题,断下后是在User32领空.这时候按Alt+F9可以回到程序领空.不过好像是到了退出WinProc的地方...还得慢慢往里跟找到处理消息的地方.
第二个问题.没遇到过.你按Alt+B看看,断点是不是被禁用了.
雪    币: 216
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jrs13579 2004-10-14 20:55
6
0
多谢楼主的及时回复,但是我按Alt+F9还是不能返回程序领空。我下的是WM_LBUTTONDOWN,其余和楼主的方法一样,点击按钮后立即中断。附上程序,麻烦楼主一试!我是个菜鸟,愿和大家共同探讨!附件:CrackmeMe.rar
雪    币: 791
活跃值: (2145)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rooky2000 2004-10-15 09:04
7
0
我也是返回不到程序领空
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
owlcn 2004-10-15 09:17
8
0
奇怪啊.应该和调试什么程序无关.我试了其他程序也能返回啊.
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
caonima 2004-10-15 12:06
9
0
顶。
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
peihexian 2004-10-15 12:44
10
0
我试了一上午,只断过一次,其他的就不知道哪里操作有误,怎么也断不下来了!
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
peihexian 2004-10-15 12:45
11
0
对了,我机器的环境为win2k server sp4及所有最新的patch,OD的版本为1.10
雪    币: 216
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jrs13579 2004-10-15 18:40
12
0
不知楼主能否作一动画让大家参考参考,看看是什么地方有问题?
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fxli 2004-10-16 02:35
13
0
这是OD帮助中窗口部分的中文译文,翻的不准确请谅解!
这一个窗囗显示被除错的应用程序和他们的最重要的叁数拥有的所有视窗的列表。

以 NT 为基础的系统藏窗囗程序 (处理对窗囗的所有信息的功能) 的位址。 这对不同的程序使视窗属性的子集失效是有效的,但是对调试器产生问题。 OllyDbg 能通过执行GetWindowLong 在被调试应用程序的上下文中使用代码注入来读出窗囗程序的位址。这一个方法是耗时的和有时 ( 尤其对于多线程的应用程序) 不安全的。 只有当被调试应用程序暂停、而且通过允许代码注入得到 WinProc 位址的择项使注入被激活的时候,我使用它。

由于缺乏空间,这一个窗囗的许多栏包含正常地被藏在栏中的另外信息。 举例来说, 栏 WinProc 标志子视窗 (窗囗程序是不同类程序),栏ID以十进位的形式显示控制的ID,而且风格解码如一组 WM_xxx 标志的窗囗风格。 为了要检视另外的信息, 变化对应栏的宽度。

你能设定在窗囗信息上的断点, 举例来说 WM_PAINT, 或组,像鼠标信息。

为了设定在信息上的断点, OllyDbg 用解释 "<WinProc>" 特别地建立精致的条件逻辑断点。 为了见到它如何工作,假定我们有句柄为 00001234的按钮,并且要求在所有的按钮信息上在暂停。 在断点之后被设定,开启它用一个条件逻辑断点。 你将会见到下列选择项设定:

条件:      [ESP+4]==00001234  &&  [ESP+8] IN (0F0..0F7,135)
解释:      <WinProc>
中止程序:  On condition

在进入窗囗程序,堆栈包含:
[ESP+00]        Return address   返回位址
[ESP+04]        Window's handle  窗囗的句柄
[ESP+08]        Message          信息
[ESP+0C]        wParam
[ESP+10]        lParam

现在它是清楚的,条件的第一个部份: " 窗囗的句柄一定是 00001234" 和第二部分是: 信息是(BM_GETCHECK..BM_SETIMAGE,WM_CTLCOLORBTN)之一。

重要的提示: 窗囗的句柄在窗囗每一次被建立是不同的,因此,如果你只设定在真实的窗囗上的暂停点,这一个暂停点只有对于这一个窗囗的寿命是有效的。
     fxli 04-10-16
雪    币: 178
活跃值: (134)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
pmma 1 2004-11-5 20:16
14
0
我经常用它做消息短点,总的感觉是有的能回,不能回的用大多是到WinProc里面,加个条件,实在不幸,用SENDMESSAGEA吧
游客
登录 | 注册 方可回帖
返回