Virus 版 (精华区)
发信人: Kernel (好冷), 信区: Virus
标 题: 笑谈AV技术(转载)
发信站: 哈工大紫丁香 (Tue Dec 2 23:04:40 2003), 站内信件
笑谈AV技术
一.序言
AV技术一直是被称为神话的东西(国内就是这样的),但是这种技术本不神秘,
很多AVER对其保密,恐怕只是为了给众人一些神秘感而已,在这就是可以带来广
告效应,不过今天我将会揭开AV技术的神秘面纱。
二.传说中样本截获技术
经常看到AVsoft的广告上说什么什么病毒被**公司率先截获——其实这种截
获并不神奇,当然对于一般人这种截获的方法过于复杂,不过不知道有没有人听
过蜜罐系统——对,对,就是这个东西!这个东西就是职业AV用来截获样本的
方法之一(XI~~,这种蜜罐与分析Hacker行为的那个不一样!),另一种就是邮件
察看的方法来获取样本——很多Vxer会把样本寄给AVER的(XI~,花猫常寄给Macfe
e吧?),这种邮寄包括两种::
1.VXER寄给AV的。
2.感染者发来的。
但是对于一般人,不论是昂贵而时常无效的蜜罐,还是E-mail实时查询系统
都是不能接受的。那么怎么办呢?这里将向业余Virus爱好者介绍一种方法——虽
然效率不高,不过勉强可以接受。
首先要准备一台机器(只有一台机器的兄弟就不要玩这种危险游戏了),装上
ADSL(别说你没有ADSL!!(吐血~~)??*_*??),安装Win2k+Sp1(不装SP1就太傻了,会
受到无数初级菜鸟的Scan...人的素质呀!),再安装IIS6.0和SQL Server 2002,能
开的服务都打开,最好再装上NAV(防止重复获得已知病毒的样本),并装上ISA Fi
reWall来监控网络流,也装上Sniffer XP来做底层包截获,最后装上文件变化记录
器(自己写一个吧,CRC32比对而已,监视文件可以只有几种类型的几个文件就行了)
X~~,现在用Ghost备份这台机器的硬盘,然后刻到光盘上(刻录机可以借的吧?)。
好了现在已经准备了一台这样的DIY型蜜罐了,到HotMail注册一个E-mail,然
后加入N个国外的新闻组等热闹的地方(这样子才有可能得到样本!!)。接下来就是在
先等待了,查Outlook的Mails,等到Sniffer XP的监视出现流量异常或NAV被关闭或NA
V失效,此时应该多打开几次一些Program目录下的程序以确保病毒的感染,然后——I
PC$和IIS进来的病毒或蠕虫会开一些新进程,用Ctrl+Alt+Del把他们查出来,找到那些
文件——复制到存样本的小盘里(推荐USB移动硬盘),然后把文件变化记录器中变化的
文件拷出来。这样子就得到了疑似样本了。
三.神话——样本分析大法(这里仅介绍提取代码的方法)
说到样本分析,不免作一下分类——主要是因为样本有Office文档,脚本,PE文件,
网络数据包等等形式,不过在介绍分析之前,我们需要一些基本工具(业余AVER的装备,有
点贵了。)::
一台够酷的机器(能运行VMWare就行了),够大的内存和硬盘。
安装Win2k+sp2,最新的SoftIce(不常用的),IDA pro,PEDump
Language 2002(察看加壳的),VMWare.
在VMWare内装Win2k+sp2,和最新的SoftIce(动态分析用的)以
及文件变化记录器。
这就是基本装备了——我还装了MASMV8.01和Vs6.0,然后开始动动大脑研究样
本了。
1.脚本病毒
这里先拿脚本病毒开刀了——XI~~,比较简单易得,对于脚本样本也可以在分为三类:
:
A.无变形无加密型
对于此类脚本病毒的代码提取,只要用Notepad(记事本)
打开就行了...
B.变形型
因为没有加密,所以很容易还原其变形,这种还原就叫做变形还
原。
这里不想写出还原脚本变形的代码,不过可以暂且讲一下原理:
:
类如代码
set xxxx=vv.CreateObject(yyyy)——注意vv.CreateO
bject
得vv可以省略!
这样的代码可以还原为set yyyyobj=vv.CreateObject(
yyyy)
并且脚本中xxxx全换为yyyyobj
再如代码
set xxxx=vvobj.ss(ttt)
调用某个对象的功能的代码,可以将xxxx还原为
vvss_doing
再如xxxx=****
这样的定义变量或数组,可以还原为Var_***中
得前4个字符或者Var_XX,XX为其编号(就是它是第
几个这样定义的变量)
这样的还原之后就可以得到变形脚本病毒的最简代码了。对于
其用于变形的代码可以略去——因为查杀时使用脚本还原引擎。
C.加密型
因为有加密,所以要先去除加密。
这样子就必须先用Notepad打开样本找到,转去执行病毒部分
得代码,
类如在XX脚本病毒中的
Execute(
Dim KeyArr(3),ThisText
KeyArr(0) =OtherArr(0)
KeyArr(1) =OtherArr(1)
KeyArr(2) =OtherArr(2)
KeyArr(3) =OtherArr(3)
For i=1 To Len(ExeString)
TempNum = Asc(Mid(ExeString,i,1))
If TempNum = 18 Then
TempNum = 34
End If
TempChar = Chr(TempNum + KeyArr(i Mod 4))
If TempChar = Chr(28) Then
TempChar = vbCr
Else If TempChar = Chr(29) ThenTempChar = vbLf
End If
ThisText = ThisText & TempCharNext)
Execute(ThisText)
我们只要把Execute(ThisText)换成如下代码
Set FSO=CreateObject("Scripting.FileSystemObject")
Set OS=FSO.CreateTextFile("样本代码.txt",1,True)
OS.Write ThisText
OS.Close
在执行一次脚本样本之后就可以得到样本的代码了——
存在"样本代码.txt"中了。然后是否要用还原大法就看
自己的心情吧...(XI~~)
(这种提取方法同样可以用程序代替——看看
现在的AVER们~~)
2.宏病毒
在提取宏病毒的时,我们将采用程序方法提取,X~~,很不错!
主要是基于Object的使用,这种提取很简单,可以用VB来做,下附
代码(用于提取Word宏病毒代码):
'首先用病毒的Doc,替代原先office系统中的NorMal.doc
'具有危险性!!
Set FSO=CreateObject("Scripting.FileSystemObject")
Set OS=FSO.CreateTextFile("样本代码.txt",1,True)
Set WordObj=CreateObject("Word.Application")
Set NT=WordObj.NormalTemplate.VBProject.vbcomponents(1).CodeModule
OS.Write NT.Lines(1,NT.CountofLines)
OS.Close
NT.DeleteLines 1, NT.CountofLines
'清除病毒!!
现在样本的代码全在"样本代码.txt"中了,去看看吧(X~~,用C++写也行,不过很累).
..
3.PE文件样本(这里仅研究感染型病毒得代码提取)
这是最阴暗的时代中最阴暗的一种样本,经常会造成机器大伤亡,所以在开始代码
提取之前,一定做好心理准备!!
A.分类检查
由于样本可能为蠕虫类,所以用Language 2002察看是否加壳,加壳
的一般可以忽略了——只有蠕虫才这样做的.
没有壳的用PEDUMP察看一下入口,如果入口不在00401XXX,则极有可
能为非EPO的病毒...
B.再次抽样
因为A中的判断可能有错误,于是要在VMW中进行再次抽样,在虚拟机
中运行it,然后再运行几次it,然后把文件变化记录器中改变的文件Copy
出来(最好是被感染的Notepad.exe),X~~,现在我们转去C
C.再次判断
用以感染的新样本与本机上正常的该文件比对(不要说不知道,比对的方
法)
如果无变化——这个不大可能吧(文件变化记录器出了问题?)
若有变化,则用PEdump察看入口地址:
若样本是Notepad::如果有Epo,则入口地址为00401000;如果入口
不是00401000,则为非EPO的感染。
若样本为其他文件,最好查找本机没有感染的该文件,用其入口
作为标准入口,来进行EPO检测。
D.感染型PE病毒的代码提纯工艺::
因为这种病毒可以有EPO,Polymorphics,Metamorphics等可怕的东西来
折磨业余Aver,不过对付这些东西,不能过急,要沉稳,要逐个击破!
!
a.普通型病毒
这类病毒(称为非EPO简单型)大多为两类::分块插入文件(CIH),非分块
插
入的(添加节,或者找大节的空白插入)。
(1)非分块式
用IDA打开被感染的文件,稍作等待——让IDA pro有充足的时间做充分的
反汇
编,然后跳转到文件入口,开始研究代码——X~~,发现该节结束的代码类
似于:
push XXXXXXXX
ret
这样的返回时改变返回地址的代码,则表明我们找对了代码,现在只要把
从入
口到这个节结束的代码Copy就可以了。X~~,接下来察看代码如果发现代码
中有
Call XXXX(这里的XXXX表示子程序),但是XXXX不在提取的代码中,则该病
毒为
分块式 goto (2),反之则XXXX在提取的代码中,则表示病毒提取成功。
(2)分块式
真是恭喜了,要用SoftICe了,不过是在虚拟机中运行(不用讲原因了吧)
,逐行
运行——一直到出现一段与如下代码功能相同的代码为止::
mov ecx,YYYYYYYY
mov esi,XXXXXXXX
rep movsb
Call [VVVVVVVV]
ret
这些代码在分块式病毒常用做合并分块,所以(大家都知道了)只要把XXX
XXXXX开始
YYYYYYYY大的区域的代码Copy出来,放到(1)的代码后面就行了,然后ju
mp到VVVVVVVV
继续重复此种工作,直到出现类似下面功能的代码::
mov ecx,YYYYYYYY
mov esi,XXXXXXXX
rep movsb
xor eax,eax
Call [eax]
ret
这样有Call [0]错误的代码——利用SEH技术,来运行合并好的病毒代码
。
那么只要把XXXXXXXX开始yyyyyyyy大的代码Copy到(1)的代码后面就完成
代码提取的工作了。
b.EPO型病毒
(这里仅讨论单纯的EPO。)
说到EPO,就让人想起暴力法提取样本代码,上面提取普通型病毒的代码采
用的方法都是手动的,但对于EPO,则不同,我们需要用程序来提取代码—
—
这里仅仅给出程序的思路,不给出代码(花猫说的::授人以渔!)
准备:感染病毒的文件和没有感染病毒的该文件。
程序流程::
1.创建新的文件(叫EPOpp.exe)
2.写入样本文件的文件头
3.比对感染病毒的文件和没有感染病毒的该文件,
把相同部分用90h代替写入新文件中(注意相对位置),
不同的地方以感染病毒的文件为准写入新文件。
4.提取最简样本结束
对EPOpp.exe用IDA反汇编(这样自有点风险),找到一大堆NOP中的
Call [XXXXXXXX]或Jmp dowrd ptr [xxxxxxxx](在IDA中
[xxxxxxx]以子程序形式存在)
跳转到XXXXXXXX,提取代码,任务完成...(可以照着a里的方法来提取代码
了,
如果加密则goto C)
c.加密型病毒
(这里仅讨论单纯的加密。)
这种病毒也有非分块和分块的区别
(1).非分块式
用IDA打开,转到入口处,在数十行没有用得代码(june Code)之后会发
现
类似这样的代码:
....
mov reg1,xxxxxxxx
mov reg3,xxxxxxxx
mov reg2,xxxxxxxx
Loc_X_XXXX:
Xor [reg1],reg2
add reg1,4
cmp reg3,4
jnz loc_X_xxxx
Loc_Y_YYYY:
db xxh
....
记下jnz loc_X_xxxx下一行代码的位置(记做pp吧),用SoftIce在VMW中
打开
样本,在pp处下断点!(注意要SoftIce自己接管SEH!!!),运行,就可
以得
到解密的代码了,再用a的方法提取就行了
(2).分块式
在(1)的方法之后仍不能得到完全解密的代码,那么就是遇到分块式的
了,不
过没关系,因为可以用SoftICe来逐块提取,具体方法还请各位看官动
动脑子。
d.变形型
对于这种类型,主要先要通过a,b,c把代码搞出来,然后用一个类似脚
本分析
的变形还原程序——这里仅仅讲讲思路::
首先手动找到代码中Metamorphics引擎的代码,分析其变形规则(该部
分代码
通常是代码中最长最怪的部分),找出其规则(跟变形设计的流程正好反
过来.)
接着设计还原引擎——把变形规则转换成还原规则(通常这部分工作要
用很长时
间),然后编写代码,感觉就像是在写变形引擎(反向变形)。
最后用写好的引擎还原病毒代码为最简代码。
4.网络包样本
这种样本通常没有什么可恶加密和变形,所以只要找出其编码方法就万事大吉了,而它
的编码
程序代码常常附在包后部——具体怎么做就看业余AVER自己的了(我讲了那么多AVER的"机
密",也该
保留一些了)。
四.传奇——特征码
这部分采用聊天形式的形式
AVER(Me)(简称A),Vxer Learner(some one)(简称V)
V:你好,我这有个游戏,要吗?(~~以上来就这样说话?)
A:Ok,Send it to me...(考,要整我?)
V:怎样?
A:Win32.V(some one).6843,你怎么还发这样的老病毒给我?好像你不再写新的似的。
V:你用什么找出那是我写的?
A:用特征码
V:什么是特征码?哪些代码可以成为特征码?
A:特征码就是某个病毒所具有的与其它病毒不同,而且又可以把她和正常程序区别开的
代码。
很多东西都可以做特征码,比如你的签名——太明显,一目了然。
不过我还加了一段你的病毒中比较特殊的代码,双保险。
V:恩~,那么一个病毒的特征码有哪些部分组成?
A:矣,有趣了,你也有些常识了。
通常一个病毒的特征码是有很多部分组成::一般双保险的结构如下
_______________________________________________________________________
______________
|第一特征码的大小|具体特征码|次级特征码相对第一特征码的RVA|次级特征码大
小|具体特征码|
一个病毒的特征码一般有一个双保险结构构成,不过也有多个的...
V:呵呵,这样呀。那么特征码能有多大?
A:为了用户,我们必须做得很小:1:20的压缩比
一个病毒的特征码不能超过40字节。
V:矣~~,你们的特征码数据库怎么存储特征码的?我要搞点破坏。
A:这个——不同的AVSoft的数据库结构不相同,不过大体上都得
有特征码,病毒描述信息等部分组成。这么关心这个,不如自
己去破开一个数据库看看结构不就行了。
V:特征码查毒有多大的误报率?
A:想听实话?
V:没错,要是想听假的,才不问你。
A:实话说了:14%
V:你们AVER的广告和实际太...~~~(下线)
五.虚拟机
(暂时保留了,因为涉及了部分中国品牌AV虚拟机的真相...)
六.尾声
(一个AVER的心声)
其实并不是所有的AVER都像广告上那样不要脸的吹嘘,也不是所有的AVER都和13哥
一样沉默,
也许沉默对于AVEr而言是一种保护...也不是AV技术真的那么烂,只吹得过火了,现实
和广告严重
不符合,我至今都在用NAV和公司自己的AVsoft,但是我从不相信广告,因为广告都太夸
张...>>
很多Windows时代的AVER用SoftIce不及Dos时代的破戒者,简直就是在用一个陌生
的工具!!
很多Win32的AVEr不了解NT内核的基础知识,却每天做着"与系统紧密结合"的AVFireWal
l;很多AVER
离开了分析机(AV的工具,13好像不用这种东西..厉害)就成了名副其实"呆子",而我却
时常因为不
用而加班无奖金(这是某些AVER的心理问题::变态的追求手动..)~~~......>>
我真的好心痛->----------------------------------------------->>>>>>>>>>
>>>>>>>>
--
※ 来源:.哈工大紫丁香 bbs.hit.edu.cn [FROM: 218.108.199.61]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:214.512毫秒