• 标 题:Billy Belceb病毒编写教程(DOS篇)---Anti-tunneling
  • 作 者:onlyu
  • 时 间:2004年2月10日 06:24
  • 链 接:http://bbs.pediy.com

【Anti-tunneling】
~~~~~~~~~~~~~~~~
    Tunneling技术还被反病毒工具用来安装它的产品,我们要获得原始INT 21h中断向量的努力将会化为泡影,因为它们使用和我们一样的武器。我们不能这样,另外,其它病毒可以tunnel我们,这不妙。系统是我们的,不是其它任何程序的!:)
    正如ShitWare使用的检测是否有跟踪那样,我们可以使用它们自己的例程来对付它们:它们没有对这个保护。当我们可以使用一个例程来触发陷阱标志来跟踪时...我们可以使用另外一个例程来释放它吗?当然可以啦。非常简单。不使用一个OR来触发它,代之以AND。

  pushf
  pop  ax
  and  ah,11111110h
  push  ax
  popf

    是不是很迷人啊?:)利用这个,我们已经挫败了它们想偷取"我们的"INT 21h的企图。但是...如果我们想要知道是否有人想要偷取它该知道些什么呢?下面的例程是从ARMOURING这一章里抽出来的。

  push  ax
  pop  ax
  dec  sp
  dec  sp
  pop  bx
  cmp  ax,bx
  jz  not_traced
  jmp  $      ; If traced, freeze the processor
 not_traced:
  [...]

    这一章是TUNNELING一章的扩展。所以...利用上面两个简单的例程,和一点点好运气,你可以走得更远:)

[反引诱(Anti-bait)]
~~~~~~~~~~~~~~~~~~~
    诱饵/牺牲羊(sacrifical goats)是那些什么也不做的程序。你肯定会想知道为什么...它们使用这些程序来抓获将要感染它们的病毒。并且,它们将会给我们的病毒备份:(
    但是当我们的病毒是多态的时候,我们将要面临严重的问题。它们将会对这些文件感染大约一万次,来寻找一个可靠的扫描字符串and/or 算法来寻找所有可能的变异。毫无疑问,如果我们添加代码来简单地拒绝对这些程序的感染,我们就能挫败它们(挫败那些相同的人很枯燥,但是他们也想挫败我们...)
    下面是不让(或更难)我们的病毒感染一个诱饵程序时你要遵循的几点:

- 不要感染大小<5000的文件,或者更大一些,<10000。所以我们是的反病毒工具创建10000个诱饵,每个10000个字节。所以它们将要至少需要100M的空间:)

- 不要感染以数字编号最为其文件名的文件。诱饵程序通常命名为"00000000.com","00000001.com"等等。

-不要感染具有连续的名字的文件。这个看起来和上面的类似,实际上不。如果它们发现我们的文件不感染具有数字的文件,它们就会创建文件如"AAAAAAAA.COM","AAAAAAAB.COM"及类似的文件。

- 不要感染具有相同大小的连续的文件,这种情况和上面的两种情况类似。

- 不要感染具有当天日期的文件。几乎所有的可执行文件在计算机上具有不同的日期。但是很难找到一个文件正好是当天的日期(并不是所有的,但是几乎所有的诱饵就是这个日期)。

- 抓住一个记时器中断,或者其它的来避免至少每隔10分钟才感染一个文件。想象一下情形...一个反病毒程序会不停地试图获得我们的病毒的扫描字符串,并且反病毒人员会重起很多次来找到是什么原因导致了病毒拒绝感染。而如果每次重起我们使得他等10分钟...他将会在我们的病毒上浪费大量的时间:)

- 不要感染在根目录下的文件,很多诱饵程序产生器在根目录下生成诱饵程序,所以这次它们又要受挫了:)

- 不要感染具有0-跳转和调用的文件:这个仅仅被诱饵和PER用到,所以...搜索所有的E90000,E800,[70..7F] 00等代码。

- 毫无疑问,检查大量的NOP,对同一个寄存器(XCHG BX,BX)XCHG,对同一个寄存器mov操作的指令...

- 检查大量的0字节,或者对同一个寄存器的连续INC/DEC操作...你什么时候看过在INC  DX后面跟着DEC DX???

- 检测文件执行的第一个操作是否为MOV AX,4C00h/INT 21h或者一个INT 20h。

    如果一个病毒在它的代码中执行了上面的至少5个情况,那么毫无疑问它是一个高强度的反-诱饵(anti-bait)。