夜晚是黑虫子的天下

Seh异常原理和在免杀中的利用

上一篇 / 下一篇  2008-05-08 18:15:09

作者  :兽人
日期  :2006/05/07
目的  :Seh异常在花指令里的应用

www.8way.be首发

定义:
Seh异常就是数结构化异常处理,Win32 结构化异常处理是操作系统提供的一种服务。
在编译器的 SEH 层减少了直接使用纯操作系统的 SEH 所带来的危害的同时,也将纯
操作系统的 SEH 从大家的面前隐藏了起来。

但程序遇到Seh异常时,异常交给系统处理(这将是一个非常负责的过程,很容易跟飞),所以利用Seh异常可以一定程度的防止程序被调试。(seh异常在壳里是很常见的)

原理:
异常的基本过程(个人理解是这样):


   
我们来看两个实例
实例文件下载
push 00401051          //地址00401051压入堆栈
push dword ptr fs:[0]      //fs[0]压入堆栈,执行完成后,fs[0]指向栈顶
mov dword ptr fs:[0],esp  //构造1个err结构
mov esi,0              //简单的赋值语句
mov eax,dword ptr ds:[esi]  //产生异常
(OD中异常后,按shift+F8继续运行)
------系统处理(非常复杂,可以自己跟跟看)-----------
    若要跟踪,先在A地址下断点
执行后,windows检查到异常,执行线程马上被中段,从用户模式转到内核模式
控制权交到操作系统的异常调试程序(exception dispatcher),由它负责找到
处理这个异常的方法,即所有应用程序的异常最终都是由windwos来处理的,
同一个版本的windows有固定的异常处理代码.
------跳到地址A--------------------------------------


lea eax,dword ptr ss:[esp-8]  //开辟8字节的空间,并把栈顶指针保存到eax
xchg dword ptr fs:[0],eax    //执行完成后,fs[0]指向栈顶,eax等于原fs[0]
mov ebx,0040102B        //地址ebx=0040102B
push ebx              //ebx压入堆栈,即地址0040102b
push eax              //fs[0]压入堆栈
mov esi,0              //简单的赋值语句
mov eax,dword ptr ds:[esi]  //读取线性地址0,产生异常
  (OD中异常后,按shift+F8继续运行)
------系统处理(非常复杂,可以自己跟跟看)-----------
若要跟踪,先在A地址下断点
执行后,windows检查到异常,执行线程马上被中段,从用户模式转到内核模式
控制权交到操作系统的异常调试程序(exception dispatcher),由它负责找到
处理这个异常的方法,即所有应用程序的异常最终都是由windwos来处理的,
同一个版本的windows有固定的异常处理代码.
------跳到地址A--------------------------------------


利用:
看了以上这些,我们知道,通过这一下段Seh异常代码,我们可以防止
他人跟踪,并跳到地址A(这点最重要)继续执行。我们可以把它当作jmp来使用,
具体的应用就看你们自己自由发挥了。


其他几个Seh异常代码(异常后跳到地址:********)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
push ********
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
mov esi,0
mov eax,dword ptr ds:[esi]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
push ********
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
mov ebx,0
div ebx
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nop
push ********
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
int 3
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
push ********
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
nop
int 68
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
push ********
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
nop
vxdcall 134543
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
push ********
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


灰鸽子免杀全攻略
先看下我的方案:我们要处理的文件一共有5个,分别
                            →HOOK.dll④
H_Client.exe  Setup.exe → MAINDLL

  ①        ②        ③    → KEY.dll⑤


-----------------------------------------------------------------
我再来给大家讲讲我怎样分别对待这些文件:

H_Client.exe 用 木马控制端免杀器.rar ,既可以免杀,又自己指定一个密码,避免木马被他人
盗用。

HOOK.dll 和 KEY.dll 体积小 用变形Morphine2.7加壳就可以免杀,方便实用。

MAINDLL 有800多kb 要是偷懒也用 Morphine2.7 加壳免杀的话,做出来的服务端会有900多kb,
所以我用压缩效果比较好的北斗星.exe先加壳,再给它加道花指令,ok。

Setup.exe 就好办了,它的体积也不大,我们可以有很多选择,用变形Morphine2.7加壳和
用北斗星.exe先加壳,再给它加道花指令来免杀效果都是非常好的。不过昨天强哥给了我一个好壳
我就先试试效果吧,嘿嘿!~F.S.T驱动壳.exe 闪亮登场。

----------------------------------------------------------------

下面我们开始,先把 Setup.exe 里面的 3个dll都导出来。MAINDLL 导出来了,命名为1.dll
里面的2个小dll也导出来了, 分别为key.dll 和 hook.dll 。

来先把HOOK.dll 和 KEY.dll 用变形Morphine2.7加壳免杀。加壳完成,用杀毒软件
杀一下看看效果怎么样。大家注意我的杀毒软件都是正版的,而且都是最新的病毒库,嘿嘿。

先用kv 试下吧,ok 了。瑞星通过,昏 让金山k 掉了,记得昨天还不杀的。
不过也没有什么啦,我们只要再给它加道花指令就可以免杀了,卡巴也通过了。

看来是 4个 过3个,呵呵!~

好了,我们再把 2个小dll导入MAINDLL.dll,给它免杀,我用压缩效果比较好的北斗星.exe先加壳,再给它加道花指令,ok。
看看现在杀不杀,加壳以后是2杀,2不杀,有意思啊, kv 和卡巴 杀,瑞星和金山不杀。
杀毒软件真的是各有所长,各有所好。 开始给加壳后的MAINDLL.dll 加花指令。

哦,对了。我还要给大家演示万能加花指令的方法,大家更我来。这里需要一个
增加区段的工具 zeroadd.exe ,hao|sha 是我自己定义的区段名,100 是区段的大小。
好了,添加成功,我们来看一下,多了一个 hao|sha2的区段吧。等下我们就到这里写
花指令。

花指令:
VC++ 5.0
PUSH EBP                   
MOV EBP,ESP                 
PUSH -1                     
push 515448           
PUSH 6021A8           
MOV EAX,DWORD PTR FS:[0]         
PUSH EAX                   
MOV DWORD PTR FS:[0],ESP         
ADD ESP,-6C                 
PUSH EBX                   
PUSH ESI                   
PUSH EDI 
jmp 00408C0F






00950647 入口地址

再找我们的 hao|sha2的地址,点一下m ,hao|sha2的地址是009b6000,我们就到 009B6030 写花指令吧。

009B6030 新入口地址

接下来要把 009B6030 改为新入口地址

原 000E0647 基地 00400000

现在我们要算一下,这个新入口要怎么写 没写16进

00950647 - 00400000 - 000E0647 = 470000  我们要的差

009B6030 - 00400000- 470000  = 146030  我一直是这样算的,也不知道

科学不,呵呵,反正这个没有人教。 试下看可以不  ,地址是改对了,好象

花指令没有写好,我们来检查一下我昏, 少写一个push ebp,再来。

Microsoft Visual C++ ,好了,修改成功,我来杀一下。

呵呵 过了3个,就让卡巴给杀了, 再不加几道话指令就可以免杀了,
我们不耽误时间了来弄一下,exe。先把 MAINDLL.dll 导回Setup.exe 去,再免杀。这个加3层壳
好象不行,我们换个。我*,这个壳果然是茾@牵?个杀毒软件一个都不杀它,呵呵。大家看清楚,嘿嘿




木马免杀浓缩精华版教程
第一部分:对国内外杀毒软件分析


 
  在讲定位内存特征码前,先要分析国内外著名杀毒软件的内存查杀特点。

大家在使用木马过程都会发现,内存查杀,一般都指得被瑞星的内存查杀。瑞星

的内存查杀功能是同类杀毒软件中最强的一款杀毒软件。像强悍的卡巴,金山,

等等它们的内存查杀意义不大,会制作免杀木马的人都知道,像这类杀毒软件,只要

文件免杀,内存也就免杀了.还有江民也有内存查杀功能,但内存查杀功能比较弱.只

针对影响力非常大的病毒程序.一般的黑客软件都没有提取内存特征码.


           第二部分:木马免杀的对策

 一. 要使一个木马免杀,首先要准备一个不加壳的木马,这点非常重要,否则

下面的免杀操作就不能进行下去。

 二.然后我们要木马的内存免杀,从上面分析可以看出,目前的内存查杀,只有

瑞星最强,其它杀毒软件内存查杀现在还不起作用所以我们只针对瑞星的内存查杀

,要进行内存特征码的定位和修改,才能内存免杀。

 二.对符其它的杀毒软件,比如江民,金山,诺顿,卡巴.我们可以采用下面的方

法,或这些方面的组合使用.1>.入口点加1免杀法.

2>.变化入口地址免杀法
3>.加花指令法免杀法

4>.加壳或加伪装壳免杀法.

5>.打乱壳的头文件免杀法.

6>.修改文件特征码免杀法.



第三部分:免杀技术实例演示部分



一.入口点加1免杀法:

1.用到工具Editor

2.特点:非常简单实用,但有时还会被卡巴查杀.

3.操作要点:用PEditor打开无壳木马程序,把原入口点加1即可.


二.变化入口地址免杀法:

1.用到工具:OllyDbg,PEditor

2.特点:操作也比较容易,而且免杀效果比入口点加1点要佳.

3.操作要点:用OD载入无壳的木马程序,把入口点的前二句移到零区域去执行,然后

又跳回到入口点的下面第三句继续执行.最后用PEditor把入口点改成零区域的地址.

三.加花指令法免杀法:

1.用到工具:OllyDbg,PEditor

2.特点:免杀通用性非常好,加了花指令后,就基本达到大量杀毒软件的免杀.

3.操作要点:用OD打开无壳的木马程序,找到零区域,把我们准备好的花指令填进去

填好后又跳回到入口点,保存好后,再用PEditor把入口点改成零区域处填入花指令

的着地址.


四.加壳或加伪装壳免杀法:



1.用到工具:一些冷门壳,或加伪装壳的工具,比如木马彩衣等.

2.特点:操作简单化,但免杀的时间不长,可能很快被杀,也很难躲过卡巴的追杀.

3.操作要点:为了达到更好的免杀效果可采用多重加壳,或加了壳后在加伪装壳的

免杀效果更佳.


五.打乱壳的头文件或壳中加花免杀法:

1.用到工具:秘密行动 ,UPX加壳工具.

2.特点:操作也是傻瓜化,免杀效果也正当不错,特别对卡巴的免杀效果非常好.

3.操作要点:首先一定要把没加过壳的木马程序用UPX加层壳,然后用秘密行动这款

工具中的SCramble功能进行把UPX壳的头文件打乱,从而达到免杀效果.


六.修改文件特征码免杀法:


1.用到工具:特征码定位器,OllyDbg

2.特点:操作较复杂,要定位修改一系列过程,而且只针对每种杀毒软件的免杀,要

达到多种杀毒软件的免杀,必需修改各种杀毒软件的特征码.但免杀效果好.

3.操作要点:对某种杀毒软件的特征码的定位到修改一系列慢长过程.



第四部分:快速定位与修改瑞星内存特征码

一. 瑞星内存特征码特点:由于技术原因,目前瑞星的内存特征码在90%以上把字符

串作为病毒特征码,这样对我们的定位和修改带来了方便.


二定位与修改要点:1>.首先用特征码定位器大致定位出瑞星内存特征码位置

2>.然后用UE打开,找到这个大致位置,看看,哪些方面对应的是

字符串,用0替换后再用内存查杀进行查杀.直到找到内存特征

码后,只要把字符串的大小写互换就能达到内存免杀效果.



第五部分:木马免杀综合方案


修改内存特征码--->1>入口点加1免杀法---> 1>加压缩壳--->1>再加壳或多重加壳

2>变化入口地址免杀法 2>加成僻壳 2>加壳的伪装.
3>加花指令法免杀法 3>打乱

壳的头文件

4>修改文件特征码免杀法


注:这个方案可以任意组合各种不同的免杀方案.并达到各种不同的免杀效果.


第六部分:免杀方案实例演示部分


1.完全免杀方案一:

内存特征码修改 + 加UPX壳 + 秘密行动工具打乱UPX壳的头文件.


2.完全免杀方案二:

内存特征码修改 + 加压缩壳 + 加壳的伪装


3.完全免杀方案三:

内存特征码修改 + 修改各种杀毒软件的文件特征码 + 加压缩壳


4.完全免杀方案四:

内存特征码修改 + 加花指令 + 加压壳


5.完全变态免杀方案五:

内存特征码修改 + 加花指令 + 入口点加1 + 加压缩壳UPX + 打乱壳的头文件

还有其它免杀方案可根据第五部分任意组合.

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-05-16  
    123
45678910
11121314151617
18192021222324
25262728293031

我的存档

数据统计

  • 访问量: 259
  • 日志数: 22
  • 图片数: 1
  • 建立时间: 2008-05-06
  • 更新时间: 2008-05-09

RSS订阅

Open Toolbar