能力值:
( LV9,RANK:680 )
|
-
-
2 楼
ESP定律
OD命令行:hr 0012FFA0
解释:当esp==0012FFA0时断下
……
|
能力值:
(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. 我回答的问题是不是楼主想要问的?
如果理解错了,请把问题重新描述一遍。
|
能力值:
( LV9,RANK:680 )
|
-
-
4 楼
呵呵,原来如此
跟踪功能到现在我都没有用过,学习一下
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
不错
可惜不动
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
学习中……………………
|
能力值:
(RANK:260 )
|
-
-
7 楼
不动可能是你条件表达式没写正确
比如 tc eax == 0x1234
不小心写成了 tc 0x1234
那么,因为0x1234这个表达式的值为“真”,那么一开始跟踪便马上停下来了,结果就像是单步执行了一条语句。
根据我的推断,“跟踪”功能内部可能就是采用“单步”的方式实现的,所以我上面也提到了,“跟踪”比正常执行要慢 几个数量级,而不是慢一点的问题。
所以一般都是在条件快要达成的时候使用“跟踪”功能。
如果你一载入程序就开始“跟踪”,可能会非常考验你的耐心的。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
謝謝,书呆彭兄,我都不知道原來有這一手,本想說是不是要學習script才能做到這一點,也感謝
playboysen兄的回答
|
|
|