能力值:
( LV13,RANK:530 )
|
-
-
2 楼
紧跟着壳的步伐咧。
|
能力值:
( LV5,RANK:60 )
|
-
-
3 楼
不懂楼上说的是什么意思呀?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
2楼是要你单步跟踪..紧跟这壳走....嘿嘿
|
能力值:
(RANK:260 )
|
-
-
5 楼
编译器产生的int3指令,主要是用来调试,当程序跑飞了时,可以被调试器接管,所以int3指令常常是很多个指令在一起,填充在函数体之间的空隙,或者像VC那样,调试版的程序,编译器用0xCC来初始化局部变量,这样如果发生栈溢出,程序跑到数据区执行就可能被调试器发现。
而程序员有意地插入int3,最可能的情况是使用SEH来反调试,那么从正向角度考虑,它应该被一个try块所包围,从逆向的角度考虑,int3 指令是混在正常的指令流之中,而不是一种填充的形式,并且它上方不太远的地方一定会有一个安装SEH的地方,这个很容易识别,只要看到fs:[0],基本上就是了。
个人观点,如有错误请指正。
|
能力值:
( LV5,RANK:60 )
|
-
-
6 楼
没有,这个程序INT 3附近是没有FS:[0]这些的,INT 3的异常捕捉是由另外一个子进程来完成的
|
能力值:
( LV4,RANK:50 )
|
-
-
7 楼
默认是故意写入的
[QUOTE=脱壳请教;475156]没有,这个程序INT 3附近是没有FS:[0]这些的,INT 3的异常捕捉是由另外一个子进程来完成的[/QUOTE]
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
编译器产生的int3指令,主要是用来调试,当程序跑飞了时,可以被调试器接管,所以int3指令常常是很多个指令在一起,填充在函数体之间的空隙
===============================
我认为这个说法有问题,调试的时候编译产生的INT 3指令是动态的替换对应断点的指令,并不是函数体之间的空隙,而变量周围的0xCC 才是填充,程序经过断点处被(有两次机会)被调试器挂住。
在壳里面放INT 3弄不好会被调试器挂住(如果装了调试器的话),其实这种方法并不好。
不知道你将所有的INT 3全部用PE工具改成空指令,它会不能正常解码吗?
|
能力值:
(RANK:210 )
|
-
-
9 楼
最近流行int3,看出来了
|
能力值:
(RANK:570 )
|
-
-
10 楼
C3 CC CC CC CC CC
C2 XX CC CC CC CC CC
|
能力值:
( LV4,RANK:50 )
|
-
-
11 楼
判断是否被SoftICE跟踪?
|
能力值:
( LV5,RANK:60 )
|
-
-
12 楼
没错,这是大部分,但是还有一部分不是这样的
|
|
|