首页
社区
课程
招聘
[旧帖] [求助]OD内存断点的原理?真的是修改内存页属性? 0.00雪花
发表于: 2015-4-21 22:38 5129

[旧帖] [求助]OD内存断点的原理?真的是修改内存页属性? 0.00雪花

2015-4-21 22:38
5129
看了很多关于OD内存断点原理的介绍都是大概的说了下,修改断点地址所在内存页的属性。当访问该地址时,抛出访问异常,然后被OD截获。
但是既然是修改了真个内存页的属性权限(读,写,执行)。那么,应该是对该内存页地址范围内所有的访问均会抛出异常吧?
根据以上疑惑测试,对某一个内存地址,比如:0x405530下了内存读写断点。然后再访问该内存地址之前,有指令访问0x40552c,但是测试时,0x40552c没有断下来。而是在我下的405530处断下来。
感觉内存断点不止是修改内存页属性这么简单。求大神解答内存断点详细的原理。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 6802
活跃值: (3065)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
修改之后,再根据页内偏移来算的。我猜的。
2015-4-22 08:13
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
最笨的办法,检测每个页面访问异常,异常地址等于内存断点地址才终端,其他的直接放行。
具体od是怎么实现的就不清楚了。
2015-4-22 08:38
0
雪    币: 69
活跃值: (270)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
msf
4
我猜测:内存断点设置内存属性,并记录偏移和边界。每当触发内存访问异常时,OD接收到异常后,1,计算所访问的内存是否在断点范围内,如果在范围内就停下来反馈给用户;如果不在,就将页面属性设置回去,然后再执行上步操作,完成对内存的读写后,立马再设置内存属性。等待下次异常。

证据:内存断点下后,感觉整个OD都慢了很多。其中操作应该少不了。再根据int3断点的工作原理。个人总结的。

不知对不对。
2015-4-22 09:19
0
雪    币: 358
活跃值: (662)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
5
论坛不是有分析od的文章嘛?

http://bbs.pediy.com/showthread.php?t=65221&highlight=od+%E5%86%85%E5%AD%98+%E5%AD%98%E6%96%AD+%E6%96%AD%E7%82%B9+%E7%82%B9
2015-4-22 09:24
0
雪    币: 3003
活跃值: (464)
能力值: ( LV15,RANK:1395 )
在线值:
发帖
回帖
粉丝
6
下断点的时候是按照0x1000这么大下的,当发生异常被OD接收到的时候,会查询断点列表是否命中,没命中就改回原来的页属性继续执行了。
就拿你的例子来说,你在0x405530处下断点,就要修改0x405000-0x405999这么大范围的页属性,所以访问这个范围内的代码就会触发异常,然后被OD收到,此时OD 就会根据传入的地址比如(x40552c)在不在断点列表,不在就恢复页属性,继续执行,在就断下来交给用户处理。
这有个调试器,你可以自己单步跟踪看看整个过程:http://bbs.pediy.com/showthread.php?t=196455
2015-4-22 09:25
0
雪    币: 14
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
貌似确实是这个过程
2015-4-22 09:54
0
雪    币: 14
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
不错不错,原来内存断点性能这么低。对每次的异常都要做检查
2015-4-22 09:56
0
雪    币: 14
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢谢!这样看来内存断点的性能很低。
2015-4-22 11:12
0
游客
登录 | 注册 方可回帖
返回
//