查看: 4240|回复: 20
收起左侧

[转帖] 关于对抗启发式杀毒的思路

 关闭 [复制链接]
tianyao
发表于 2009-1-14 18:32:48 | 显示全部楼层 |阅读模式
本文不是让大家通过这些方法来突破启发杀毒.只是为大家对抗启发杀毒提供了又一个思路.我希望大家在免杀中不要可以的模仿.如果是模仿我也就没有写那么多关于思路的东西了....希望大家能看到文章的灵魂
                                      
说真的启发式杀毒这东西挺招人讨厌的,不好免杀....
    理论上,启发式扫描可以发现任何一种新的病毒。但这仅仅是指理论上,因为代码仿真不可能达到对真实CUP的100%模拟,所以该技术并不能毫无遗漏的检测出每一个病毒。所以说,寻找启发式引擎的缺陷然后利用它们就成了做免杀的目标和责任。我下面所要谈的就是如何利用不同的手段欺骗并把这些启发式引擎玩弄于手掌之间。
大家掌声鼓励.....
    .Thunderbyte Antivirus 在早期,这被认为是最好的扫描器了,但现在,它已经被认是很一般的了,至少在"启发式检测"(其实仅是特定的字符串描)方面如此。但在其它方面它附带了很多实用的扫描器(checksummer, cleaner, memory resident utilities这个尤其是utilities这个我觉得最好了...)。顺便说一下,每个人都会有自己喜欢的不同版本,7.xx版本就不错。因为这个版本可以让制定自己的扫描方式,这一点很重要,假设你自己不小心感染了自己的机器。(某人:你以为谁都和你一样苯吗.....)

  .AVP:在我认为全部的启发式扫描器当中,AVP确实是比较难忽悠的一个。我是用的版本是version 3.0 有喜欢的可以下一个
  .NOD和AVP一样优秀,我钟爱的一个。
===============================我是可恶的分割线====================================

传说中的思路
  我的所有说的欺骗手段,都是基于同样的思路的:那就是病毒是加密的,我们要在扫描器能解密出病毒体前停止仿真代码的执行,或者在扫描过程中隐藏我们的加密密钥。如果你仍然没有使用加密的方式,密钥隐藏手段也是可以使用的,在“加密”的调用方式中(例如,int 21h 中断的值),简单的说这样打开一个文件的操作,虽然我没有测试过这种方式。(某人:你很邪恶...没测试过就来忽悠X子)
  mov ax, 3D02h        ;0x3D02 是密钥
  add ax, key
  int 21h


通过指令预取反跟踪技术:
  早期的处理器,像386或者486都使用了指令队列预期技术来提高代码执行效率。这一技术的本质就是,当CPU将要执行一条指令时,它已经将该指令预先读到了CPU的cache中了。所以在此之前的修改对CPU来说已经没有影响了。让我们一起来看一个这样的例子:
  mov word ptr cs:[offset piq], 20CDh
  piq:
  nop
  nop

    如果你稍微懂点汇编就应该会想到这个程序将结束运行,因为两个字节的nop 指令会被覆盖为 int 20h(风暴提示:int 20h 是返回DOS的指令)。但在386或486的机器上去并非如此,因为nop指令已经在cpu的cache中了。但在Pentium/Pentium II 体系的机器中运行时,指令则会被覆盖,程序执行后退出。
    如果你想利用这一特性来对抗启发式检测技术的话,你就必须知道在386或者486年代这是一种应用广泛的对抗启发式检测的手段。但是随着AVs的改进,他们已经加入了对指令预期技术的支持。这是不是件很不可思议的事情呢,他们仿真的东西竟是不存于现在的处理器当中的。让我们会过头来看看刚才的例子,这是我们用来对付他们的,在 pentium 或者更高级别的处理上面,像我所说的那样,程序会终止,因为这些处理器没有使用PIQ技术。但大部分的AVs会继续让代码执行那两个nops,因为他们要仿真PIQ。所有这块我们得这样做:

    mov word ptr [offset prefetch], 06C7h
    prefetch:
    int 20h
    dw offset decrypt_key
    dw key
   
    int 20h 指令将被覆盖,替换它的将是下面的指令
    mov word ptr [decrypt_key], key

    基于对PIQ的考虑,AVs将终止程序的执行。但实际上我们的程序将继续运行,在我们的加密处理函数中设置密钥。我们仅存在一个问题,那就是我们的代码要运行在Pentiums或更高级别的处理器上面。为了使之兼容486系列或更低一些处理器,我们还得清除掉PIQ之间的两条指令。

    没有什么比这更简单的了吧,当然,你也要知道清除所有jump类指令(jmp, call, loop, int...)之间的PIQ(风暴天气预告:这一点是必需的,如果你想这样做的话)。但是我们不能简单的处理JMP Short $+2之间的指令,对于清除PIQ来说它应该是正常被执行的,因为代码仿真器是会察觉到这一点的。很遗憾....

    但是我们可以使用这样一个很特殊的功能—CPU的陷阱标志(某人:你是不是WOW玩多了..)。如果这个标志被置位,那么其后的任何指令执行都将触发 int 1 的中断调用,X子们请记住这样会清除PIQ。这通常都是在的调试状态下,1号中断向量只是简单的 IRET,所以这里我们可以使用没有任何问题。无论如何,执行后再次清除陷阱标志都是个很好的主意。下面展示的代码可以运行在任何处理器上(assumes DS = CS)。(众人:我们要WAR3....)

        pushf                                  ;flags on the stack
        pop ax                                  ;flags from stack into AX
        or ax, 100000000b                      ;set trap flag
        push ax                                ;put the modified flags in AX back...
        popf                                    ;into the flag register via the stack
         
        mov word ptr [offset prefetch], 06C7h  ;modify the following instruction
        prefetch:                              ;here gets int1 called => clears PIQ
        int 20h                                ;This is never executed
        dw offset decrypt_key                  ;where we want to write our key to
        dw key                                  ;the actual decryption key
     
        pushf                                  ;clear the trap flag again with
        pop ax                                  ;the same method as above.
        xor ax, 100000000b                      ;will also fool some debuggers
        push ax
        popf
     
        mov word ptr [offset prefetch], 20CDh  ;restore the int20h (next generations)
    这种方式可以骗过 AVP, Dr. Web, f-prot v3.04 (even with the /PARANOID flag),但不能通过f-prot v2.27, Nod, Ikarus and Dr. Solomon's. f-prot v2.27 and Ikarus的检测。另一方面我们也可以欺骗”正常的“使用PIQ手段(是泼你凉水的时候了,这个在现在的CPU上是不能用的)。
         


     
    你还可以使用不同类型的循环,或者像Opic's Odessa-B virus那样的手法,非常长的一个解密循环。这里就不多提了.....(众人:再懒,咔嚓了你......)

    这篇文章里所说的这些技术目前为止经我的测试都可以正常运行。当然AVs也可能改进它们的一些不足,在未来使这些方式失效。所以说请大家继续参与并完善这个文章
  然后说说 EOP 方式:
    仿真器肯定不会很有耐心地执行完程序的每一条指令,只要你的病毒所在宿主程序入口点足够的靠后,那你就胜利了一半,仿真器会因失去耐心而丢下你不管的。此时我想到了ExitProcess,聪明的你肯定明白了接下来将要干什么了,当然,当你知道这样做的时候,AV已经开始行动了,但关键是我们已经找到了一种对抗的思路,不是吗?
当然,还有一些抗技巧比如利用MMX指令或利用API传递控制等,但因这些技巧本身不会对启发式检测构成绝对威胁我也就不易一一举例了(好吧,我承认我是个懒人....)。
=================================结尾分割线======================================
启发式杀毒虽然目前说是对抗病毒的利器,但我一直感觉越是复杂越是高级的检测技术反而越脆弱,脆弱的原因就是太过于复杂,所谓智者千虑必有一失就是这么说的吧。在没有加密、没有多态病毒出现前,特征匹配技术对待病毒可以说是一剑封喉。也许越是简单的技术越是无懈可击。一次偶然间发现NOD可以仅用高级侦测模式,检测出被感染的文件,并精确的给出病毒名。才深深的发现或许启发式检测加适量的特征才应该是对抗病毒的最好武器吧。
冲动的小白
发表于 2009-1-14 18:34:29 | 显示全部楼层
红伞好像也是启发
Oo右手oO
发表于 2009-1-14 18:35:38 | 显示全部楼层
我果然啥都不懂。。。
Atlantis祭司
发表于 2009-1-14 18:41:40 | 显示全部楼层
原帖由 Oo右手oO 于 2009-1-14 18:35 发表
我果然啥都不懂。。。
我也是。。。。。。
andylau
发表于 2009-1-14 18:54:46 | 显示全部楼层
很老的文章.....


Thunderbyte Antivirus ........現在都叫 Norman了
IllusionWing
发表于 2009-1-14 18:59:53 | 显示全部楼层
,...貌似在看雪看到过,但是没有w3的注解...
这些技术现在都烂了
深度扫描
发表于 2009-1-15 11:36:03 | 显示全部楼层
看过路过的说。。。。
jpzy
发表于 2009-1-15 12:17:26 | 显示全部楼层
太老了~!
AVP还3.0呢~!我收藏的最古老的就是3.5瑞士版了
双子星
头像被屏蔽
发表于 2009-1-15 12:49:48 | 显示全部楼层
我也看不懂,一个字,晕。
关9军
发表于 2009-1-15 12:53:36 | 显示全部楼层
完全不懂
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-1-16 02:39 , Processed in 0.127166 second(s), 16 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

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