首页
社区
课程
招聘
[求助]关于OD硬件写入断点的疑惑?
发表于: 2008-10-27 13:31 7017

[求助]关于OD硬件写入断点的疑惑?

2008-10-27 13:31
7017
近日调试一程序,由于该程序检测较严,因此只能设置硬件断点,当设置了硬件执行时,能断下来,可对某一地址设置硬件写入断点后,原来设置的硬件执行断点不能断下来了,删除硬件写入断点后又能断下了,这时OD的BUG吗?另外设置硬件写入断点后,程序的某些写入点不能被断下,程序的关键写入处也没能断下,这是什么原因,有人知道吗?

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

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 463
活跃值: (111)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
OD只支持四个硬件断点,
2008-10-27 14:53
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
是的,不过我只有两个硬件断点啊?
2008-10-27 15:09
0
雪    币: 179
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
你确定是程序检测太严,还是你没有断到关键点处?
2008-10-27 15:16
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
od可能支持的断点少
2008-10-28 15:25
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我确定是程序检测太严,某些关键点程序进行了检测的。
2008-10-28 16:06
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
7
除了自修改代码,一般很少有情况非用硬件断点不可。

特别是API断点。虽然程序可以对API入口进行检测,检测也有个限度。

比如它检测入口第一个字节是不是0xCC,你就下断点到第二条指令,具体需要看一下API的入口,很多API的入口第一条指令都是一条单字节指令push ebp,你就可以将断点的位置设为API+1.以此类推。

比如kernel32.CreateFileA,入口处是这样的
7C801A28 CreateFileA       >MOV     EDI, EDI
7C801A2A                   >PUSH    EBP

第一条指令是双字节,第二条是单字节,那么你可以将int3断点设置在第二条或第三条指令,即

bp CreateFileA+2

bp CreateFileA+3

这样可以绕过大多数API校验。

当然我说的只是通常的情况,对于特殊情况,如果必要的话,还真得使用硬件断点。

只不过硬件断点实在有限。

PS.实际上硬件断点也可以检测的,只要程序另开一个线程,或产生一个异常,便可以得到当前线程的ThreadContext结构,这个结构当中是有调试寄存器的值的。

所以不管用什么断点,都需要小心得对付程序的检测,不是说硬件断点就可以放心了。
2008-10-28 23:39
0
游客
登录 | 注册 方可回帖
返回
//