能力值:
( LV2,RANK:10 )
|
-
-
2 楼
改了是要有记录的,比如用链表。要不然你改了cc怎么恢复呢。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
 0XCC产生异常 OD捕获到了 就跳转到异常处理函数 异常处理函数
异常处理函数就是 停止代码继续执行
F9 执行以前0XCC破坏掉的汇编指令(肯定要记录下以前的) 然后再跳回去
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
改了要记录,但按F9就要恢复这个断点处的原指令然后从原指令处开始运行,那这个CC断点怎么恢复呢?
|
能力值:
( LV12,RANK:760 )
|
-
-
5 楼
OD1附加OD2,然后OD2对某程序附件,然后od2对某程序下F2,断下来,此时od1对OD2下断bp SetContextThread~,然后od2里F9,就可以看到某个过程鸟~
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
你可以单步过去,再把cc写回去啊。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
OD捕获到这个异常,是转到OD的异常处理函数吧,你的意思是,F9要记录下原断点处的指令,然后执行,再跳回去,那你的意思是这条指令不是在原来的断点处地址执行的?在其他地方执行了再跳回下一条指令处继续执行?
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
他肯定不是单步再写回去的,如果指令是pushf,单步就会破坏原有指令执行的结果了
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
我跟了但是也找不到他具体怎么实现的,初学,一大堆汇编代码还是看不太懂的,你能简单给我说说这个过程吗?谢谢
|
能力值:
( LV3,RANK:20 )
|
-
-
10 楼
看雪里有很多科锐学员写的调试器, 开源的, 你可以下载来参考一下, 和OD原理一样的
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
V大 方法很不错的说
|
能力值:
( LV4,RANK:50 )
|
-
-
12 楼
大多数调试器对当前的断点就是这么做的啊。先恢复当前eip下的指令,然后单步,单步后再把刚才的指令修改成0xcc,然后继续执行。
pushf我觉得是个特例,作为单字节指令,也可以特殊化处理。比如把下条指令变成CC,然后内部处理掉就是。
还可以想象下,假设pushf没有特殊化处理可能的结果是什么?
原来的pushf,栈中的word没有T标志,修改后的pushf,栈中的word多了个T标志。对客户程序有什么样的影响?客户会怎么样使用这个flag?好象没有。
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
我理解楼主的意思是先设了单步,改了tf位,然后压了栈,就相当于改了eflags。这样大不了你自己再把栈里的数据处理一下,反正就这么个特例。
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
谢谢你的指导。我对pushf的处理感到有些棘手是因为看到ZProtect中使用了大量的pushf进行指令转移,担心不小心改变了标志位在脱壳的时候会带来一些麻烦。
|
能力值:
( LV4,RANK:50 )
|
-
-
15 楼
相互学习,你的问题也开启了我的思路,我以前真没想过断点处理时的pushf.
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
楼主,你的头像闪的我好难受,不回答了
|
|
|