Virus 版 (精华区)

发信人: Kernel (好冷), 信区: Virus
标  题: 笑谈AV技术(转载)
发信站: 哈工大紫丁香 (Tue Dec  2 23:04:40 2003), 站内信件


 笑谈AV技术
                                 
                   一.序言
   AV技术一直是被称为神话的东西(国内就是这样的),但是这种技术本不神秘,
很多AVER对其保密,恐怕只是为了给众人一些神秘感而已,在这就是可以带来广
告效应,不过今天我将会揭开AV技术的神秘面纱。
                   二.传说中样本截获技术
   经常看到AVsoft的广告上说什么什么病毒被**公司率先截获——其实这种截
获并不神奇,当然对于一般人这种截获的方法过于复杂,不过不知道有没有人听
过蜜罐系统——对,对,就是这个东西!这个东西就是职业AV用来截获样本的
方法之一(XI~~,这种蜜罐与分析Hacker行为的那个不一样!),另一种就是邮件
察看的方法来获取样本——很多Vxer会把样本寄给AVER的(XI~,花猫常寄给Macfe
e吧?),这种邮寄包括两种::
           1.VXER寄给AV的。
           2.感染者发来的。
   但是对于一般人,不论是昂贵而时常无效的蜜罐,还是E-mail实时查询系统
都是不能接受的。那么怎么办呢?这里将向业余Virus爱好者介绍一种方法——虽
然效率不高,不过勉强可以接受。
    首先要准备一台机器(只有一台机器的兄弟就不要玩这种危险游戏了),装上
ADSL(别说你没有ADSL!!(吐血~~)??*_*??),安装Win2k+Sp1(不装SP1就太傻了,会
受到无数初级菜鸟的Scan...人的素质呀!),再安装IIS6.0和SQL Server 2002,能
开的服务都打开,最好再装上NAV(防止重复获得已知病毒的样本),并装上ISA Fi
reWall来监控网络流,也装上Sniffer XP来做底层包截获,最后装上文件变化记录
器(自己写一个吧,CRC32比对而已,监视文件可以只有几种类型的几个文件就行了)
X~~,现在用Ghost备份这台机器的硬盘,然后刻到光盘上(刻录机可以借的吧?)。
    好了现在已经准备了一台这样的DIY型蜜罐了,到HotMail注册一个E-mail,然
后加入N个国外的新闻组等热闹的地方(这样子才有可能得到样本!!)。接下来就是在
先等待了,查Outlook的Mails,等到Sniffer XP的监视出现流量异常或NAV被关闭或NA
V失效,此时应该多打开几次一些Program目录下的程序以确保病毒的感染,然后——I
PC$和IIS进来的病毒或蠕虫会开一些新进程,用Ctrl+Alt+Del把他们查出来,找到那些
文件——复制到存样本的小盘里(推荐USB移动硬盘),然后把文件变化记录器中变化的
文件拷出来。这样子就得到了疑似样本了。
                   三.神话——样本分析大法(这里仅介绍提取代码的方法)
    说到样本分析,不免作一下分类——主要是因为样本有Office文档,脚本,PE文件,

网络数据包等等形式,不过在介绍分析之前,我们需要一些基本工具(业余AVER的装备,有

点贵了。)::
                  一台够酷的机器(能运行VMWare就行了),够大的内存和硬盘。
                  安装Win2k+sp2,最新的SoftIce(不常用的),IDA pro,PEDump
                  Language 2002(察看加壳的),VMWare.
                  在VMWare内装Win2k+sp2,和最新的SoftIce(动态分析用的)以
                  及文件变化记录器。
    这就是基本装备了——我还装了MASMV8.01和Vs6.0,然后开始动动大脑研究样
本了。

                   1.脚本病毒  
    这里先拿脚本病毒开刀了——XI~~,比较简单易得,对于脚本样本也可以在分为三类:

                   A.无变形无加密型
                      对于此类脚本病毒的代码提取,只要用Notepad(记事本)
                      打开就行了...
                   B.变形型
                      因为没有加密,所以很容易还原其变形,这种还原就叫做变形还
原。
                      这里不想写出还原脚本变形的代码,不过可以暂且讲一下原理:

                          类如代码
                              set xxxx=vv.CreateObject(yyyy)——注意vv.CreateO
bject
                              得vv可以省略!
                              这样的代码可以还原为set yyyyobj=vv.CreateObject(
yyyy)
                              并且脚本中xxxx全换为yyyyobj
                          再如代码
                              set xxxx=vvobj.ss(ttt)
                              调用某个对象的功能的代码,可以将xxxx还原为
                              vvss_doing
                          再如xxxx=****
                              这样的定义变量或数组,可以还原为Var_***中
                              得前4个字符或者Var_XX,XX为其编号(就是它是第
                              几个这样定义的变量)
                      这样的还原之后就可以得到变形脚本病毒的最简代码了。对于

                      其用于变形的代码可以略去——因为查杀时使用脚本还原引擎。

                   C.加密型
                      因为有加密,所以要先去除加密。
                      这样子就必须先用Notepad打开样本找到,转去执行病毒部分
                      得代码,
                        类如在XX脚本病毒中的
Execute(
Dim KeyArr(3),ThisText
KeyArr(0) =OtherArr(0) 
KeyArr(1) =OtherArr(1)
KeyArr(2) =OtherArr(2)
KeyArr(3) =OtherArr(3) 
For i=1 To Len(ExeString)
TempNum = Asc(Mid(ExeString,i,1))
If TempNum = 18 Then
TempNum = 34
End If
TempChar = Chr(TempNum + KeyArr(i Mod 4))
If TempChar = Chr(28) Then
TempChar = vbCr
Else If TempChar = Chr(29) ThenTempChar = vbLf
End If
ThisText = ThisText & TempCharNext)  
Execute(ThisText)     
                     我们只要把Execute(ThisText)换成如下代码
                     Set FSO=CreateObject("Scripting.FileSystemObject")
                     Set OS=FSO.CreateTextFile("样本代码.txt",1,True)
                     OS.Write ThisText
                     OS.Close
                     在执行一次脚本样本之后就可以得到样本的代码了——
                     存在"样本代码.txt"中了。然后是否要用还原大法就看
                     自己的心情吧...(XI~~)
                     (这种提取方法同样可以用程序代替——看看
                     现在的AVER们~~)
        
                   2.宏病毒
    在提取宏病毒的时,我们将采用程序方法提取,X~~,很不错!
主要是基于Object的使用,这种提取很简单,可以用VB来做,下附
代码(用于提取Word宏病毒代码):
           '首先用病毒的Doc,替代原先office系统中的NorMal.doc
           '具有危险性!!
            Set FSO=CreateObject("Scripting.FileSystemObject")
            Set OS=FSO.CreateTextFile("样本代码.txt",1,True)        
            Set WordObj=CreateObject("Word.Application")
            Set NT=WordObj.NormalTemplate.VBProject.vbcomponents(1).CodeModule

            OS.Write NT.Lines(1,NT.CountofLines)
            OS.Close
            NT.DeleteLines 1, NT.CountofLines
            '清除病毒!!
    现在样本的代码全在"样本代码.txt"中了,去看看吧(X~~,用C++写也行,不过很累).
..
    
                  3.PE文件样本(这里仅研究感染型病毒得代码提取) 
    这是最阴暗的时代中最阴暗的一种样本,经常会造成机器大伤亡,所以在开始代码

提取之前,一定做好心理准备!!
    A.分类检查
                由于样本可能为蠕虫类,所以用Language 2002察看是否加壳,加壳
                的一般可以忽略了——只有蠕虫才这样做的.
                没有壳的用PEDUMP察看一下入口,如果入口不在00401XXX,则极有可

                能为非EPO的病毒...
    B.再次抽样
                因为A中的判断可能有错误,于是要在VMW中进行再次抽样,在虚拟机

                中运行it,然后再运行几次it,然后把文件变化记录器中改变的文件Copy

                出来(最好是被感染的Notepad.exe),X~~,现在我们转去C
    C.再次判断
                用以感染的新样本与本机上正常的该文件比对(不要说不知道,比对的方
法)
                如果无变化——这个不大可能吧(文件变化记录器出了问题?)
                若有变化,则用PEdump察看入口地址:
                若样本是Notepad::如果有Epo,则入口地址为00401000;如果入口
                                 不是00401000,则为非EPO的感染。
                若样本为其他文件,最好查找本机没有感染的该文件,用其入口
                作为标准入口,来进行EPO检测。
    D.感染型PE病毒的代码提纯工艺::
    
                 因为这种病毒可以有EPO,Polymorphics,Metamorphics等可怕的东西来

                 折磨业余Aver,不过对付这些东西,不能过急,要沉稳,要逐个击破!

              
         a.普通型病毒
               这类病毒(称为非EPO简单型)大多为两类::分块插入文件(CIH),非分块

               入的(添加节,或者找大节的空白插入)。      
         (1)非分块式
               用IDA打开被感染的文件,稍作等待——让IDA pro有充足的时间做充分的
反汇
               编,然后跳转到文件入口,开始研究代码——X~~,发现该节结束的代码类
似于:
                                 push XXXXXXXX
                                 ret
               这样的返回时改变返回地址的代码,则表明我们找对了代码,现在只要把
从入
               口到这个节结束的代码Copy就可以了。X~~,接下来察看代码如果发现代码
中有
               Call XXXX(这里的XXXX表示子程序),但是XXXX不在提取的代码中,则该病
毒为
               分块式 goto (2),反之则XXXX在提取的代码中,则表示病毒提取成功。

         (2)分块式
               真是恭喜了,要用SoftICe了,不过是在虚拟机中运行(不用讲原因了吧)
,逐行
               运行——一直到出现一段与如下代码功能相同的代码为止::
               
                          mov ecx,YYYYYYYY
                          mov esi,XXXXXXXX
                          rep movsb
                          Call [VVVVVVVV]
                          ret
               这些代码在分块式病毒常用做合并分块,所以(大家都知道了)只要把XXX
XXXXX开始
               YYYYYYYY大的区域的代码Copy出来,放到(1)的代码后面就行了,然后ju
mp到VVVVVVVV
               继续重复此种工作,直到出现类似下面功能的代码::
                          mov ecx,YYYYYYYY
                          mov esi,XXXXXXXX
                          rep movsb
                          xor eax,eax
                          Call [eax]
                          ret
               这样有Call [0]错误的代码——利用SEH技术,来运行合并好的病毒代码

               那么只要把XXXXXXXX开始yyyyyyyy大的代码Copy到(1)的代码后面就完成

               代码提取的工作了。
         b.EPO型病毒
              (这里仅讨论单纯的EPO。)
              说到EPO,就让人想起暴力法提取样本代码,上面提取普通型病毒的代码采

              用的方法都是手动的,但对于EPO,则不同,我们需要用程序来提取代码—

              这里仅仅给出程序的思路,不给出代码(花猫说的::授人以渔!)
                  准备:感染病毒的文件和没有感染病毒的该文件。
                  程序流程::
                          1.创建新的文件(叫EPOpp.exe)
                          2.写入样本文件的文件头
                          3.比对感染病毒的文件和没有感染病毒的该文件,
                            把相同部分用90h代替写入新文件中(注意相对位置),
                            不同的地方以感染病毒的文件为准写入新文件。
                          4.提取最简样本结束
              对EPOpp.exe用IDA反汇编(这样自有点风险),找到一大堆NOP中的
                        Call [XXXXXXXX]或Jmp dowrd ptr [xxxxxxxx](在IDA中
                        [xxxxxxx]以子程序形式存在)
              跳转到XXXXXXXX,提取代码,任务完成...(可以照着a里的方法来提取代码
了,
              如果加密则goto C)
          c.加密型病毒
                 (这里仅讨论单纯的加密。)
                 这种病毒也有非分块和分块的区别
          (1).非分块式
                 用IDA打开,转到入口处,在数十行没有用得代码(june Code)之后会发

                 类似这样的代码:
                 ....
                      mov reg1,xxxxxxxx
                      mov reg3,xxxxxxxx
                      mov reg2,xxxxxxxx                  
                 Loc_X_XXXX:
                      Xor [reg1],reg2
                      add reg1,4
                      cmp reg3,4
                      jnz loc_X_xxxx
                 Loc_Y_YYYY:     
                      db xxh
                  ....
                 记下jnz loc_X_xxxx下一行代码的位置(记做pp吧),用SoftIce在VMW中
打开
                 样本,在pp处下断点!(注意要SoftIce自己接管SEH!!!),运行,就可
以得
                 到解密的代码了,再用a的方法提取就行了
          (2).分块式
                 在(1)的方法之后仍不能得到完全解密的代码,那么就是遇到分块式的
了,不
                 过没关系,因为可以用SoftICe来逐块提取,具体方法还请各位看官动
动脑子。
                 
          d.变形型
                 对于这种类型,主要先要通过a,b,c把代码搞出来,然后用一个类似脚
本分析
                 的变形还原程序——这里仅仅讲讲思路::
                 首先手动找到代码中Metamorphics引擎的代码,分析其变形规则(该部
分代码
                 通常是代码中最长最怪的部分),找出其规则(跟变形设计的流程正好反
过来.)
                 接着设计还原引擎——把变形规则转换成还原规则(通常这部分工作要
用很长时
                 间),然后编写代码,感觉就像是在写变形引擎(反向变形)。
                 最后用写好的引擎还原病毒代码为最简代码。
                                                             
                                                
                   4.网络包样本 
   这种样本通常没有什么可恶加密和变形,所以只要找出其编码方法就万事大吉了,而它
的编码
程序代码常常附在包后部——具体怎么做就看业余AVER自己的了(我讲了那么多AVER的"机
密",也该
保留一些了)。
                 
                                                                  
                         
                四.传奇——特征码
   这部分采用聊天形式的形式
   AVER(Me)(简称A),Vxer Learner(some one)(简称V)
   V:你好,我这有个游戏,要吗?(~~以上来就这样说话?)
   A:Ok,Send it to me...(考,要整我?)
   
   V:怎样?
   A:Win32.V(some one).6843,你怎么还发这样的老病毒给我?好像你不再写新的似的。

   
   V:你用什么找出那是我写的?
   A:用特征码
   
   V:什么是特征码?哪些代码可以成为特征码?
   A:特征码就是某个病毒所具有的与其它病毒不同,而且又可以把她和正常程序区别开的
代码。
     很多东西都可以做特征码,比如你的签名——太明显,一目了然。
     不过我还加了一段你的病毒中比较特殊的代码,双保险。
   
   V:恩~,那么一个病毒的特征码有哪些部分组成?
   A:矣,有趣了,你也有些常识了。
     通常一个病毒的特征码是有很多部分组成::一般双保险的结构如下
       _______________________________________________________________________
______________
       |第一特征码的大小|具体特征码|次级特征码相对第一特征码的RVA|次级特征码大
小|具体特征码|
       
       一个病毒的特征码一般有一个双保险结构构成,不过也有多个的...
       
   V:呵呵,这样呀。那么特征码能有多大?
   A:为了用户,我们必须做得很小:1:20的压缩比
     一个病毒的特征码不能超过40字节。
    
   V:矣~~,你们的特征码数据库怎么存储特征码的?我要搞点破坏。
   A:这个——不同的AVSoft的数据库结构不相同,不过大体上都得
     有特征码,病毒描述信息等部分组成。这么关心这个,不如自
     己去破开一个数据库看看结构不就行了。
     
   V:特征码查毒有多大的误报率?
   A:想听实话?
   V:没错,要是想听假的,才不问你。
   A:实话说了:14%
   V:你们AVER的广告和实际太...~~~(下线) 
                        
     

               五.虚拟机
               (暂时保留了,因为涉及了部分中国品牌AV虚拟机的真相...)
               
               六.尾声
               
       (一个AVER的心声)
       
       其实并不是所有的AVER都像广告上那样不要脸的吹嘘,也不是所有的AVER都和13哥
一样沉默,
   也许沉默对于AVEr而言是一种保护...也不是AV技术真的那么烂,只吹得过火了,现实
和广告严重
   不符合,我至今都在用NAV和公司自己的AVsoft,但是我从不相信广告,因为广告都太夸
张...>>
       很多Windows时代的AVER用SoftIce不及Dos时代的破戒者,简直就是在用一个陌生
的工具!!
   很多Win32的AVEr不了解NT内核的基础知识,却每天做着"与系统紧密结合"的AVFireWal
l;很多AVER
   离开了分析机(AV的工具,13好像不用这种东西..厉害)就成了名副其实"呆子",而我却
时常因为不
   用而加班无奖金(这是某些AVER的心理问题::变态的追求手动..)~~~......>>
       我真的好心痛->----------------------------------------------->>>>>>>>>>
>>>>>>>>


--

※ 来源:.哈工大紫丁香 bbs.hit.edu.cn [FROM: 218.108.199.61]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:214.512毫秒