首页
社区
课程
招聘
[求助]OD调试中部分内存断点无效,怎么处理?
发表于: 2013-8-2 16:55 11185

[求助]OD调试中部分内存断点无效,怎么处理?

2013-8-2 16:55
11185
用OD跟踪调试一个网络工具,在某些内存地方下了内存断点(访问和写都试过),运行一段代码后,下了断点的内存部分已经被改写,但程序并没有因为内存断点被中断,这应该是怎么回事?请前辈们赐教!非常感谢!

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

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
再补充问一下,私有内存下内存或硬件断点有效吗?我下的内存断点在私有内存中
2013-8-2 17:17
0
雪    币: 65
活跃值: (60)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
这种情况我也遇到过,主要还是因为 OllyDebug 是 Ring3 调试器。
像 ReadFile 和 ReadProcessMemory 这种需要缓冲区,并且通过 SysEnter 指令进入内核的,
在内核中向指定的缓冲区写入数据,由于不在 R3 下,所以 OD 的硬件断点确实断不下来。

以上是本人的一些小见解。
2013-8-2 18:59
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
VirtualProtect
2013-8-2 19:17
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢您的解疑,请问您找到解决的办法了吗?我就是想定位到内存被改变的代码处
2013-8-5 08:34
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
如果内存被VirtualProtect保护,那程序本身是不是也应该没法访问或改变它的内容呢?
2013-8-5 08:39
0
雪    币: 65
活跃值: (60)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
我只在 R3 干过,内核里面一点研究都没有。

要想拦截,用 OD 的条件断点给 ReadFile,ReadProcessMemory 加上,就是断在这些 API 的函数头,加上
DWORD PTR [ESP+8] >= 地址开始 && DWORD PTR [ESP+8] <= 地址结束
之类的东西,根据缓冲区参数位置,自己改那个数字 8。
另外进入内核更改缓冲区中的数据不一定就只有 ReadFile 和 ReadProcessMemory 两个函数,
其它的你知道的也断一断。

还有一种方式就是,你确实不知道它是用什么 API 改的,如果它在 R3 中有修改的地方,形成这样的情形:
A、硬件断点能断下来的修改 ---> B、硬件断点不能断下来的修改 ---> C、硬件断点能断下来的修改
你就可以根据 A 和 C 两次断点的位置,如果流程上不是非常的龌龊,你断不到的 B 就在这个中间了。

还有一点忘记说了,就是硬件断点是线程相关的,你在线程 A 里面加硬件断点,
然而它在线程 B 里面写入数据,你是断不下来的!!
这样的解决方法就是为每个线程加上断点。

给你推荐一个非常好用的,定位修改内存数据的代码处的工具:Cheat Engine,我一般都用这个!
2013-8-5 13:26
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我研究一下,非常感谢hmlky的指点!
2013-8-6 08:28
0
游客
登录 | 注册 方可回帖
返回
//