首页
社区
课程
招聘
[原创]硬件条件断点插件源码!!!(我的第一次)
发表于: 2012-3-9 13:25 21901

[原创]硬件条件断点插件源码!!!(我的第一次)

2012-3-9 13:25
21901
刚刚写好的!!!VC6.0
支持硬件访问,写入,执行条件断点。


如上图
Set 设置条件断点
格式如下:
所有字符都是小写的。空格不能多也不能少哈.
e [esp+8]==1000 44caa3 4     
e [44d008]==408d01 44caa3 4
// 下面这个e eax==7c92dcba 44caa3 4
// 4是没用的,但是必须输入
e eax==7c92dcba 44caa3 4
a [44dfb8]==44fbb0 4
w [44d09c]==0 4

e[esp+8]==100 错  e后少一个空格
e  [esp+8]==100 错 e后多一个空格
e [esp+ 8]==100 错 8前面不能有空格
e [Esp+8]==100 错 Esp要小写

比如:
e [eax-8]==fffb6f60 44caa3 4
就只能有3个空格,分别是e后面一个
fffb6f60 后面一个
44caa3 后面一个
4后面不能有空格

第一个字符:
e表示设置执行断点
a设置访问条件断点
w设置写入条件断点

举个例子:
e表示设置执行断点
[esp+8]==1000 条件表达式(满足这个表达式就会断下来)
44caa3 表示执行到这里会进行判断
4 表示[esp+8]要读取的内存大小
e [esp+8]==1000 44caa3 4
表示当执行到44caa3,并且取地址[esp+8]大小为4字节的内容
如果等于1000则断下来,不等于就运行。

w [44d09c]==0 4
表示写入44d09c大小为4字节的内存后,如果[44d09c]==0,
则断下来

断点设置后可以点菜单Info看是不是设置成功。
成功了会显示序号。
1 地址:xxxx 类形 a or w or e
如上图
Del 删除你设置的条件断点(接受输入序号,序号Info中显示的)
Info 可以查看你设置的条件断点

原理就是硬件断点断下来的时候OD会回调
int ODBG_Pausedex(int reason, int extdata, t_reg *reg, DEBUG_EVENT *debugevent);
这个函数。只要在这里判断就可以实现了。
有一个地方不太好就是反汇编窗口会变化,那怕没断下来。
对命令的判断使用的是deexl正则表达式。
只有一个头文件很方便。
附上deexl正则表达式的帮助文件.
在4楼
源码

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (17)
雪    币: 206
活跃值: (86)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
2
如果你不是通过Del删除的断点的话。
条件断点的信息扔然还在。
2012-3-9 13:30
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
o 看看效果
2012-3-9 13:38
0
雪    币: 206
活跃值: (86)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
4
原理就是硬件断点断下来的时候OD会回调
int ODBG_Pausedex(int reason, int extdata, t_reg *reg, DEBUG_EVENT *debugevent);
这个函数。只要在这里判断就可以实现了。
有一个地方不太好就是反汇编窗口会变化,那怕没断下来。
对命令的判断使用的是deexl正则表达式。
只有一个头文件很方便。
附上deexl正则表达式的帮助文件.
上传的附件:
2012-3-9 13:38
0
雪    币: 206
活跃值: (86)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
5
我自己测试了下的。
可以使用。
2012-3-9 13:41
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
测试了一下,不起作用哦
2012-3-9 13:48
0
雪    币: 206
活跃值: (86)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
7
为什么我试了起作用的呀
2012-3-9 13:49
0
雪    币: 206
活跃值: (86)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
8
是不是格式你没输入对饿。
还有就是16进制abcde123这样就行了。不要0abcde123。
e [esp+8]==1000 401000 4
e [eax-8]==fffb6f60 44caa3 4
e [44d008]==408d01 44caa3 4
e eax==7c92dcba 44caa3 4
e ecx==12ffb0 44caa3 4
a [403000]==1000 4
a [44dfb8]==44fbb0 4
w [44d09c]==0 4
这些格式都是可以的。
空格只是一个空格才行.
2012-3-9 13:51
0
雪    币: 206
活跃值: (86)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
9
比如:
e [eax-8]==fffb6f60 44caa3 4
就只能有3个空格,分别是e后面一个
fffb6f60 后面一个
44caa3 后面一个
4后面不能有空格
2012-3-9 13:53
0
雪    币: 169
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
挺不错的,要是加上断点条件管理编辑就好了
2012-3-9 15:01
0
雪    币: 563
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
好插件试试
2012-3-13 11:24
0
雪    币: 133
活跃值: (587)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
12
表达式只能应用== 运算符啊 。。。。。。。
2012-3-20 16:43
0
雪    币: 561
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
http://bbs.pediy.com/showthread.php?t=141697的插件版,期待改进易用性和增强断点管理
2012-4-5 09:27
0
雪    币: 1157
活跃值: (847)
能力值: ( LV8,RANK:150 )
在线值:
发帖
回帖
粉丝
14
我觉得可以换个思路,不要利用OD的 Pausedex 这个回调,而是去 HOOK OD的WaitForDebugEvent,  因为你的插件就是运行在OD的内部,HOOK WaitForDebugEvent
很方便,在 Fake_WaitForDebugEvent里面处理硬件断点,就不会切换汇编窗口了,而且在
当你的硬件断点频繁命中的时候,被调试的程序不会出现巨卡的情况,试试吧,我试了这个办法,
Nice
2012-11-23 12:00
0
雪    币: 659
活跃值: (499)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
15
我试了也不起作用- -
2013-7-15 11:31
0
雪    币: 156
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
支持原创,看上去,还比较有用呢,调试时,追值的时候很方便。
2013-8-24 10:29
0
雪    币: 10654
活跃值: (3564)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17
既然对格式要求那么严格!应该可以程序内部处理那些空格才对
2013-11-8 07:57
0
雪    币: 10654
活跃值: (3564)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
18
确实很好!要将好东西共享出来!
2013-11-17 21:07
0
游客
登录 | 注册 方可回帖
返回
//