能力值:
(RANK:570 )
|
-
-
2 楼
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
不停的按执行到返回,就可以回到源程序的领空了
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
谢谢,学习了
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
修正一下错误,用我说的方法按执行到返回(ctrl+F9)和楼主的方法下当前段的内存访问断点都是有局限性的:我的返回到的地方已经过了一些代码了(最糟糕的,还不一定返回的来),楼主的如果程序不是返回到当前段,而是其他的地方也是拦截不住的(可以对付大多数情况)。最有效的方法是F7跟进系统代码里,几个ret后会看到ZWContinue函数一定要F7跟进,它会调用ntdll.KiFastSystemCall(不知道有没有写对!)也是一定要F7跟进,里面有着sysenter指令,你F8过了这条指令就返回了,很有效,貌似可以针对任何情况。
ExeStealth的壳就是采用这种方法的,第一个SEH可以用楼主的方法返回,壳跳转到OEP的方法也是这样的,但是它跳到的是另一个段,跟进系统空间后返回就可以dump下来,用一级跟踪修复IAT表就轻松搞定了。顺便就说一下ExeStealth这个壳的特点和脱壳方法,对象不是新版的,版本号忘了(汗呀!)从二哥的豪华版脱壳进阶哪里下的:这个壳最主要的优点在于流程非常清晰,特别适合有一些基础的脱壳手练习,有一些很弱的花指令,壳程序位于最后一个段,有两段自修改壳程序的SMC代码,进入后有一段,然后就是进入系统空间的SEH,用楼主或我上面说的来返回,有一个检测IsDebuggerpresent函数的反调试,里面所有的函数名字符串都是加密了的,临时解密出来用LoadLibrary和GetProcAddress函数获取,然后就马上填充00覆盖了,原程序的段解密在SEH后面进行,动态申请空间,IAT表都是在动态内存里,然后就是00覆盖掉已经执行的壳代码,又是一个进入系统空间的SEH,从sysenter返回后就可以dump了,由于IAT表在动态内存里,调用函数都是先跳到动态内存地址再跳进系统函数里,用OD的dump功能dump下来,重建输入表功能太弱不使用,用Import的一级追踪就全部出来了。真的,这个壳的特点就是流程太明显了,没有垃圾操作,单步下来,全部都是一个壳应该做的事,很清晰明了,适合练手!!!
还搞不懂它的运行机制,今天太晚了,明天好好复习一下seh,看看到底是什么因素影响着这种SEH方式的返回地址。当然希望高手进来给予解答一下或指点一下,不胜感激!!!!
|
能力值:
( LV8,RANK:120 )
|
-
-
6 楼
[QUOTE='UD]Arthas;449890']修正一下错误,用我说的方法按执行到返回(ctrl+F9)和楼主的方法下当前段的内存访问断点都是有局限性的:我的返回到的地方已经过了一些代码了(最糟糕的,还不一定返回的来),楼主的如果程序不是返回到当前段,而是其他的地方也是拦截不住的(可以对付大多数情况)。最有效的方法是F7跟进系统代码里,几个ret...[/QUOTE]
谢谢你回复了这个多,呵呵。
我写的方法是调试程序内部异常处理用的。目前处理后的代码都是在代码段,所以内存断点有效。这个方法不是调试壳中异常处理的,上边有注明。
如果都[F7]进去,要跟的代码太多,一个内存访问断点就搞定了。
[Shift+F9]是不行的。在程序内部肯定跑飞。
当前提到的程序内部异常处理是作者在进入程序入口处后,特意加的保护处理。就是为了干扰别人调试用的。
|
能力值:
( LV8,RANK:120 )
|
-
-
7 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
不错啊,学习了!
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
这个是不是和SDK的原理差不多呢?
|
能力值:
( LV8,RANK:120 )
|
-
-
10 楼
今天把文章题目和内容修改了下,这样会表达的更加明确些。
|
能力值:
( LV8,RANK:120 )
|
-
-
11 楼
貌似没关系,可能我们说的不是一个东西,呵呵。
|
能力值:
( LV8,RANK:120 )
|
-
-
12 楼
只知道一个病毒的原理是不行的,想看原理直接IDA就OK。
但如果想按照病毒所执行的顺序去动态跟踪分析程序,那么必须得突破这个恶意的异常处理干扰,才能知道执行完毕这个系统异常处理后,病毒接着最先执行了什么恶意代码,然后执行了什么恶意代码,这些光靠猜测是不准的。
|
能力值:
( LV4,RANK:50 )
|
-
-
13 楼
更新了一点东西,添加上了ExeStealth壳的运行流程和脱壳方法。
虽然我说的第一个方法很垃圾,但还是纠正一下,我说的是执行到返回(ctrl+F9),不是忽略执行(shift+F9),至于说跟进系统空间代码太多的问题,我没有见过楼主的病毒不知道,在我举例的这个壳里面,很短的,你F8执行下来ret后马上就可以看到ZWContinue函数了,进去后sysenter指令就近在眼前了,很快速。
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
我还是没明白
我的理解是这个病毒调用的都是系统的东西,比如一写注册表,都去让系统来完成,自己只是负责调用和分配任务,如果脱离了这个系统,那么这个病毒就毫无作用,也就是无法运行,貌似壳子的SDK也是这个样子的,这些都是我的个人看法,如果有什么不对,还望各位大大能够指出来,不要笑话我
|
能力值:
( LV8,RANK:120 )
|
-
-
15 楼
[QUOTE='UD]Arthas;450158']更新了一点东西,添加上了ExeStealth壳的运行流程和脱壳方法。
虽然我说的第一个方法很垃圾,但还是纠正一下,我说的是执行到返回(ctrl+F9),不是忽略执行(shift+F9),至于说跟进系统空间代码太多的问题,我没有见过楼主的病毒不知道,在我举例的这个壳里面,很短的,你F8执行下来ret...[/QUOTE]
我们说的好象不是同一个种类的异常处理。
您说的始终是壳制造的异常,所以处理代码短。
我说的是程序中的异常,不是壳。是程序调用MFC框架类构造的异常,需要跟很多代码的。
我明白您说的是“(ctrl+F9)”,我写的(shift+F9)是我方法中需要用到的。在某些情况下是不可以“(ctrl+F9)”的,程序会运行出错或跑飞。
您可能没看懂我写的内容的关键点,我们讨论的不是一个话题。您说的是壳内,我说的是程序内部。
|
能力值:
( LV8,RANK:120 )
|
-
-
16 楼
 呵呵,我们说的不是一个话题。这个和SDK和壳和异常处理的方式无关。
是介绍:开发人员故意在程序的开头制造一个或多个异常,使用系统提供的方式去处理这个异常,然后捕捉处理异常后,要执行的代码的位置。主要是介绍使用简单方法获得异常处理后要执行代码的位置,不是怎么处理的异常。:)
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
我明白了,就是那个病毒作者在使坏
|
能力值:
( LV4,RANK:50 )
|
-
-
18 楼
最后顶一下,大家还是让它沉下去吧,呵呵
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
最不喜欢动态调试了
每次都看得晕晕的
佩服LZ精神
|
能力值:
( LV8,RANK:120 )
|
-
-
20 楼
 呵呵,感谢大家还回来看看帖子。
这个文章里的内容在逆向程序时,还是很有用处的。
我就常在我的程序入口内,在程序工作前,做些干扰性的异常(比如MFC类的异常处理),貌似反动态跟踪效果还不错,呵呵。最起码可以难住那些菜鸟们。
|
能力值:
( LV4,RANK:50 )
|
-
-
21 楼
对我还很有用的,谢谢。
|
|
|