博客首页 注册 建议与交流 排行榜 加入友情链接         宝宝相册的专门空间
推荐 投诉 搜索: 帮助

钻研技术

   yuguang.cublog.cn
关于作者  


我的分类  




反病毒引擎设计之虚拟机查毒篇『B』
加密变形病毒

前面提到过设计虚拟机查毒的目的是为了对付加密变形病毒。这一章就重点介绍加密变形技术。

早期病毒没有使用任何复杂的反检测技术,如果拿反汇编工具打开病毒体代码看到的将是真正的机器码。因而可以由病毒体内某处一段机器代码和此处距离病毒入口 (注意不是文件头)偏移值来唯一确定一种病毒。查毒时只需简单的确定病毒入口并在指定偏移处扫描特定代码串。这种静态扫描技术对付普通病毒是万无一失的。

随着病毒技术的发展,出现了一类加密病毒。这类病毒的特点是:其入口处具有解密子(decryptor),而病毒主体代码被加了密。运行时首先得 到控制权的解密代码将对病毒主体进行循环解密,完成后将控制交给病毒主体运行,病毒主体感染文件时会将解密子,用随机密钥加密过的病毒主体,和保存在病毒 体内或嵌入解密子中的密钥一同写入被感染文件。由于同一种病毒的不同传染实例的病毒主体是用不同的密钥进行加密,因而不可能在其中找到唯一的一段代码串和 偏移来代表此病毒的特征,似乎静态扫描技术对此即将失效。但仔细想想,不同传染实例的解密子仍保持不变机器码明文(从理论上讲任何加密程序中都存在未加密 的机器码,否则程序无法执行),所以将特征码选于此处虽然会冒一定的误报风险(解密子中代码缺少病毒特性,同样的特征码也会出现在正常程序中),但仍不失 为一种有效的方法。

由于加密病毒还没有能够完全逃脱静态特征码扫描,所以病毒写作者在加密病毒的基础之上进行改进,使解密子的代码对不同传染实例呈现出多样性,这就出现了加 密变形病毒。它和加密病毒非常类似,唯一的改进在于病毒主体在感染不同文件会构造出一个功能相同但代码不同的解密子,也就是不同传染实例的解密子具有相同 的解密功能但代码却截然不同。比如原本一条指令完全可以拆成几条来完成,中间可能会被插入无用的垃圾代码。这样,由于无法找到不变的特征码,静态扫描技术 就彻底失效了。下面先举两个例子说明加密变形病毒解密子构造,然后再讨论怎样用虚拟执行技术检测加密变形病毒。


 

C++代码

   1. 著名多形病毒Marburg的变形解密子:
   2.
   3.
   4.
   5. 00401020: movsx edi,si ;病毒入口
   6.
   7. 00401023: movsx edx,bp
   8.
   9. 00401026: jmp 00408a99
  10.
  11. ......
  12.
  13. 00407400: ;病毒体入口
  14.
  15. 加密的病毒主体
  16.
  17. 00408a94: ;解密指针初始值
  18.
  19. ......
  20.
  21. 00408a99: mov dl,f7
  22.
  23. 00408a9b: movsx edx,bx
  24.
  25. 00408a9e: mov ecx,cf4b9b4f
  26.
  27. 00408aa3: call 00408ac4
  28.
  29. ......
  30.
  31. 00408ac4: pop ebx
  32.
  33. 00408ac5: jmp 00408ade
  34.
  35. ......
  36.
  37. 00408ade: mov cx,di
  38.
  39. 00408ae1: add ebx,9fdbd22d
  40.
  41. 00408ae7: jmp 00408b08
  42.
  43. ......
  44.
  45. 00408b08: add ecx,80c1fbc1
  46.
  47. 00408b0e: mov ebp,7fcdeff3 ;循环解密记数器初值
  48.
  49. 00408b13: sub cl,39
  50.
  51. 00408b16: movsx esi,si
  52.
  53. 00408b19: add dword ptr[ebx+60242dbf],9ef42073 ;解密语句,9ef42073是密钥
  54.
  55. 00408b23: mov edx,6fd1d4cf
  56.
  57. 00408b28: mov di,dx
  58.
  59. 00408b2b: inc ebp
  60.
  61. 00408b2c: xor dl,a3
  62.
  63. 00408b2f: mov cx,si
  64.
  65. 00408b32: sub ebx,00000004 ;移动解密偏移指针,逆向解密
  66.
  67. 00408b38: mov ecx,86425df9
  68.
  69. 00408b3d: cmp ebp,7fcdf599 ;判断解密结束与否
  70.
  71. 00408b43: jnz 00408b16
  72.
  73. 00408b49: jmp 00408b62
  74.
  75. ......
  76.
  77. 00408b62: mov di,bp
  78.
  79. 00408b65: jmp 00407400 ;将控制权交给解密后的病毒体入口
  80.
  81. 著名多形病毒Hps的变形解密子:
  82.
  83.
  84.
  85. 005365b8: ;解密指针初始值和病毒体入口
  86.
  87. 加密的病毒主体
  88.
  89. ......
  90.
  91. 005379cd: call 005379e2
  92.
  93. ......
  94.
  95. 005379e2: pop ebx
  96.
  97. 005379e3: sub ebx,0000141a ;设置解密指针初值
  98.
  99. 005379e9: ret
 100.
 101. ......
 102.
 103. 005379f0: dec edx ;减少循环记数值
 104.
 105. 005379f1: ret
 106.
 107. ......
 108.
 109. 00537a00: xor dword ptr[ebx],10e7ed59 ;解密语句,10e7ed59是密钥
 110.
 111. 00537a06: ret
 112.
 113. ......
 114.
 115. 00537a1a: sub ebx,ffffffff
 116.
 117. 00537a20: sub ebx,fffffffd ;移动解密指针,正向解密
 118.
 119. 00537a26: ret
 120.
 121. ......
 122.
 123. 00537a30: mov edx,74d9cb97 ;设置循环记数初值
 124.
 125. 00537a35: ret
 126.
 127. ......
 128.
 129. 00537a3f: call 005379cd ;病毒入口
 130.
 131. 00537a44: call 00537a30
 132.
 133. 00537a49: call 00537a00
 134.
 135. 00537a4e: call 00537a1a
 136.
 137. 00537a53: call 005379f0
 138.
 139. 00537a58: mov esi,edx
 140.
 141. 00537a5a: cmp esi,74d9c696 ;判断解密结束与否
 142.
 143. 00537a60: jnz 00537a49
 144.
 145. 00537a66: jmp 005365b8 ;将控制权交给解密后的病毒体入口



以上的代码看上去绝对不会是用编译器编译出来,或是编程者手工写出来的,因为其中充斥了大量的乱数和垃圾。代码中没有注释部分均可认为是垃圾代码,有用部 分完成的功能仅是循环向加密过的病毒体的每个双字加上或异或一个固定值。这只是变形病毒传染实例的其中一个,别的实例的解密子和病毒体将不会如此,极度变 形以至让人无法辩识。至于变形病毒的实现技术由于涉及复杂的算法和控制,因此不在我们讨论范围内。

这种加密变形病毒的检测用传统的静态特征码扫描技术显然已经不行了。为此我们采取的方法是动态特征码扫描技术,所谓“动态特征码扫描”指先在虚拟机的配合 下对病毒进行解密,接着在解密后病毒体明文中寻找特征码。我们知道解密后病毒体明文是稳定不变的,只要能够得到解密后的病毒体就可以使用特征码扫描了。要 得到病毒体明文首先必须利用虚拟机对病毒的解密子进行解释执行,当跟踪并确定其循环解密完成或达到规定次数后,整个病毒体明文或部分已被保存到一个内部缓 冲区中了。虚拟机之所以又被称为通用解密器在于它不用事先知道病毒体的加密算法,而是通过跟踪病毒自身的解密过程来对其进行解密。至于虚拟机怎样解释指令 执行,怎样确定可执行代码有无循环解密段等细节将在下一节中介绍。

 原文地址 http://www.hackceo.com/?action=show&id=42
 发表于: 2008-01-22,修改于: 2008-01-22 23:06 已浏览311次,有评论0条 推荐 投诉

  网友评论

  发表评论



Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们
页面生成时间:0.11447

京ICP证041476号