首页
社区
课程
招聘
[求助]請問od如何使ESP==某值時中斷
发表于: 2008-10-27 18:14 4772

[求助]請問od如何使ESP==某值時中斷

2008-10-27 18:14
4772
比如說我想要在process運行時若esp==某個值就立刻停下來,不知道要怎麼做
好像不是下hw或bp那些?謝謝

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

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 590
活跃值: (177)
能力值: ( LV9,RANK:680 )
在线值:
发帖
回帖
粉丝
2
ESP定律
OD命令行:hr 0012FFA0
解释:当esp==0012FFA0时断下
……
2008-10-27 18:48
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
3
楼上的算说对了一小点,但没说到点子上。

楼上没有理解楼主的问题,说的是脱壳的“esp定律”,答非所问了,呵呵。

你下hr 0012FFA0,是在0012FFA0处下硬件访问断点,也就是当访问内存地址0012FFA0时产生中断。

首先,如果不通过esp,而通过其它方式访问该地址,比如该地址是一个局部变量,也会产生中断。

其次,如果esp赋值但并不访存,是不会产生中断的,举例:假设esp = 0012FFA8,执行sub esp, 8指令后,esp的值已经是0012FFA0了,但并不中断。只有此时执行pop指令,或其它访问0012FFA0处变量的指令,才会触发断点。

我来回答楼主的问题。

楼主要的问题是监视一个寄存器(比如eax,或esp等)的值,这不能通过OD的通常的“断点”功能来实现,而是叫做“跟踪”功能。

跟踪可以实现此功能,但一般来说跟踪会比正常执行慢几个数量级。如果程序需要执行很久才能满足条件,或者根本不能满足条件,那么跟踪是不会停下来的,只能手动停止。

跟踪的办法,在OD中按CTRL+T,便会打开跟踪窗口,在“条件为真”(condition true)那里写上 esp==0012FFA0,点确定便开始跟踪了。

还有一种方法,是使用命令tc esp==0012FFA0,关于其它跟踪命令,请查看命令手册。

PS. 我回答的问题是不是楼主想要问的?
如果理解错了,请把问题重新描述一遍。
2008-10-27 21:23
0
雪    币: 590
活跃值: (177)
能力值: ( LV9,RANK:680 )
在线值:
发帖
回帖
粉丝
4
呵呵,原来如此
跟踪功能到现在我都没有用过,学习一下
2008-10-28 07:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不错
可惜不动
2008-10-28 09:32
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学习中……………………
2008-10-28 09:33
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
7
不动可能是你条件表达式没写正确

比如 tc eax == 0x1234

不小心写成了 tc 0x1234

那么,因为0x1234这个表达式的值为“真”,那么一开始跟踪便马上停下来了,结果就像是单步执行了一条语句。

根据我的推断,“跟踪”功能内部可能就是采用“单步”的方式实现的,所以我上面也提到了,“跟踪”比正常执行要慢 几个数量级,而不是慢一点的问题。

所以一般都是在条件快要达成的时候使用“跟踪”功能。

如果你一载入程序就开始“跟踪”,可能会非常考验你的耐心的。
2008-10-28 12:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
謝謝,书呆彭兄,我都不知道原來有這一手,本想說是不是要學習script才能做到這一點,也感謝
playboysen兄的回答
2008-10-28 15:18
0
游客
登录 | 注册 方可回帖
返回
//