能力值:
( LV2,RANK:10 )
|
-
-
2 楼
OD只支持四个硬件断点,
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
是的,不过我只有两个硬件断点啊?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
你确定是程序检测太严,还是你没有断到关键点处?
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
od可能支持的断点少
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
我确定是程序检测太严,某些关键点程序进行了检测的。
|
能力值:
(RANK:260 )
|
-
-
7 楼
除了自修改代码,一般很少有情况非用硬件断点不可。
特别是API断点。虽然程序可以对API入口进行检测,检测也有个限度。
比如它检测入口第一个字节是不是0xCC,你就下断点到第二条指令,具体需要看一下API的入口,很多API的入口第一条指令都是一条单字节指令push ebp,你就可以将断点的位置设为API+1.以此类推。
比如kernel32.CreateFileA,入口处是这样的
7C801A28 CreateFileA >MOV EDI, EDI
7C801A2A >PUSH EBP
第一条指令是双字节,第二条是单字节,那么你可以将int3断点设置在第二条或第三条指令,即
bp CreateFileA+2
或
bp CreateFileA+3
这样可以绕过大多数API校验。
当然我说的只是通常的情况,对于特殊情况,如果必要的话,还真得使用硬件断点。
只不过硬件断点实在有限。
PS.实际上硬件断点也可以检测的,只要程序另开一个线程,或产生一个异常,便可以得到当前线程的ThreadContext结构,这个结构当中是有调试寄存器的值的。
所以不管用什么断点,都需要小心得对付程序的检测,不是说硬件断点就可以放心了。
|
|
|