能力值:
( LV2,RANK:10 )
2 楼
再补充问一下,私有内存下内存或硬件断点有效吗?我下的内存断点在私有内存中
能力值:
( LV3,RANK:30 )
3 楼
这种情况我也遇到过,主要还是因为 OllyDebug 是 Ring3 调试器。
像 ReadFile 和 ReadProcessMemory 这种需要缓冲区,并且通过 SysEnter 指令进入内核的,
在内核中向指定的缓冲区写入数据,由于不在 R3 下,所以 OD 的硬件断点确实断不下来。
以上是本人的一些小见解。
能力值:
( LV2,RANK:10 )
4 楼
VirtualProtect
能力值:
( LV2,RANK:10 )
5 楼
谢谢您的解疑,请问您找到解决的办法了吗?我就是想定位到内存被改变的代码处
能力值:
( LV2,RANK:10 )
6 楼
如果内存被VirtualProtect保护,那程序本身是不是也应该没法访问或改变它的内容呢?
能力值:
( 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,我一般都用这个!
能力值:
( LV2,RANK:10 )
8 楼
我研究一下,非常感谢hmlky的指点!