杀不死的秘密.docx
《杀不死的秘密.docx》由会员分享,可在线阅读,更多相关《杀不死的秘密.docx(52页珍藏版)》请在冰豆网上搜索。
杀不死的秘密
一、免杀技术的发展
所谓“免杀”,就是逃避杀毒软件的查杀,目前用得比较多的免杀方法有加壳、修改特征码和加花指令三种,通常黑客们会针对不同的情况来运用不同的免杀方法。
第一款杀毒软件Mcafee是于1989年诞生的。
1989年:
第一款杀毒软件Mcafee诞生,标志着反病毒与反查杀时代的到来。
1997年:
国内出现了第一个可以自动变异的千面人病毒(Polymorphic/MutationVirus)。
2002年7月31日:
国内第一个真正意义上的变种病毒“中国黑客II”出现。
2004年:
在黑客圈子内部,免杀技术由IT工程师之家团队在这一年首先公开提出。
2005年1月:
大名鼎鼎的免杀工具CCL的软件作者tankaia在杂志上发表了一篇文章,藉此推广了CCL,从此国内黑客界才有了自己第一个专门用于免杀的工具。
2005年2月至7月:
通过各方面有意或无意的宣传,黑客爱好者们开始逐渐重视免杀。
2005年8月:
第一个可查的关于免杀的动画由IT工程师之家团队完成。
2005年9月:
免杀技术开始真正的火起来。
[国内免杀技术的起源时间:
2002年7月31日]
小提示:
毫无疑问,“免杀”技术是目前最火热的技术之一。
“免杀”是可用性很强,应用范围非常广的一门黑客技术。
免杀往往是脚本入侵技术、病毒攻击技术等一些其他黑客技术的准备工作。
举个简单的例子,当一个黑客发现并利用了一个网站所存在的脚本漏洞后,经过提权最终得到了服务器的管理权限。
为了方便和巩固控制,黑客往往需要将后门传至对方网站服务器上(可能是脚本后门,也可能是PE后门),或者是rootkit,然而对方服务器上有很厉害的杀毒软件,当这些后门被黑客上传到对方服务器之后,服务器上的杀毒软件识别并查杀出黑客上传的后门或rootkit,使黑客的工具不能发挥作用。
这在很大程序上影响了黑客对漏洞的利用。
但是如果黑客上传的工具是经过免杀技术处理过的,那么黑客就可以通过简单有效的工具来巩固控制。
显然,这只是一个很片面的例子,在真正的Hacking过程中,免杀技术几乎是无处不在,所以学好免杀技术对于一个信息安全技术爱好者是非常重要的。
免杀技术的定义
从前面可以看出,免杀指的就是让原本被杀毒软件或其它计算机安全工具捕获并查杀的文件,经过处理后变得不被捕获和查杀,这种技术就是免杀技术,这种处理过程就称为“免杀”,通常也称之为病毒免杀(因为被杀毒软件或其它计算机安全工具查杀的文件一般都称为病毒)。
杀毒软件的查杀原理
1、特征码法
杀毒软件运用特征码扫描确定某文件为病毒时,这个文件需要满足两个条件:
(1)该文件中的某一位置与杀毒软件病毒库的某一位置相对应。
(2)该位置上存放的代码与病毒库中定义的该位置上的代码相同。
特征码法的特点:
A.速度慢。
B.误报警率低。
C.不能检查多态性病毒。
D.不能对付隐蔽性病毒。
2、校验和法
运用校验和法查病毒采用三种方式:
(1)在检测病毒工具中纳入校验和法,对被查的对象文件计算正常状态的校验和,将校验和值写入被查文件中或检测工具中,而后进行比较。
(2)在应用程序中,放入校验和法自我检查功能,将文件正常状态的校验和写入文件笨身中,每当应用程序启动时,比较现行校验和与原校验和值。
实现应用程序的自检测。
(3)将校验和检查程序常驻内存,每当应用程序开始运行时,自动比较检查应用程序内部或别的文件中预先保存的校验和。
校验和法的特点:
优点:
方法简单、能发现未知病毒、被查文件的细微变化也能发现。
缺点:
发布通行记录正常态的校验和、会误报警、不能识别病毒名称、不能对什隐蔽型病毒。
3、行为监测法
利用病毒的特有行为特征来监测病毒的方法。
监测病毒的行为特征:
A.占有INT13H
B.改DOS系统为数据区的内存总量
C.对COM、EXE文件做写入动作
D.病毒程序与宿主程序的切换
行为监测法的特点:
行为监测法的长处:
可发现未知病毒、可相当准确地预报未知的多数病毒。
行为监测法的短处:
可能误报警、不能识别病毒名称、实现时有一定难度。
4、软件模拟法
在虚拟机中综合运用多种查杀方法就是通常所说的软件模拟法。
软件模拟法的特点:
软件模拟法的长处:
对病毒的判定能力最强(因为综合了多种查毒方法)。
软件模拟法的短处:
扫描速度慢,查毒往往不准确。
最终结论:
目前杀毒软件最主要还是依赖特征码识别技术来检测病毒。
也就是说,特征码就是杀毒软件为了判定病毒而从病毒本身提取出来的有特点的代码,我们的免杀就是专门针对这些特征码的。
也就是说,让杀毒软件找不到这些特征码就可以达到免杀的目的了,不过还有一点要强高速的是,文件本身的功能是不能损坏的,也就是说免杀之后的文件和原文件在功能上要做到完全相同。
只有这样才算是真正有效的免杀。
===============================================================
二、常见杀毒软件及其引擎特点
1、卡巴斯基
俄罗斯出品、扫描未知病毒非常厉害、病毒库很大、扫描速度特别慢、非常占用资源。
2、瑞星
国产、杀毒能力和卡巴斯基差距很大,主动防御功能模块和卡巴斯基也没办法比、优势就是速度快、系统占用资源相对较少。
3、江民
杀毒能力不错,耗费资源一般,主动防御功能也很不错。
4、诺顿
这个杀软是诺顿公司的,性能卓越。
病毒库很大,扫描速度慢。
不同版本的诺顿占用系统资源的程度相差很大。
这个杀软的免杀非常好做。
是著名杀毒软件中实力最弱的。
5、金山
杀毒能力很差,占用资源一般,速度快。
6、NOD32
这个的查杀机制和其他几个差别很大,针对它的免杀比较难做。
如今新版的NOD32加入了主动防御功能,功能上的提升使它成为目前最能对付的杀毒软件。
系统占用资源一般,扫描速度非常快。
启动扫描特别厉害,查杀未知病毒的性能和卡巴斯基旗鼓相当。
7、麦咖啡
国外杀毒软件,功能一般,查杀能力一般,占用系统资源一般。
高级版对未知病毒的查杀能力很强。
8、小红伞
启发式扫描很厉害,可以说和NOD32的启发扫描不分伯仲,各有各的特点。
9、F-ProtAntivirus:
这是一款来自冰岛的杀毒软件。
该杀毒软件的查杀能力绝对一流,对未知病毒的查杀能力远在卡巴和NOD32之上。
10、微软杀毒
依仗着微软在操作系统的占有率,其杀毒软件也有一定的占有率。
几乎所有的木马都不能过微软的杀毒软件。
对微软杀毒研究相对深入之后,不难发现,目前的微软杀毒引擎和NOD32的杀毒引擎很像,基本都是使用启发式扫描对API函数的调用进行判定和加权。
===============================================================
三、免杀技术的分类
1、内部免杀和外部免杀
处部免杀又通常称为PE免杀。
内部免杀指的是从病毒的源代码入手,通过修改病毒的源代码实现病毒的隐蔽性变种。
外部免杀指的是将已经编译连接后的病毒文件通过加密等手段将病毒的代码复杂化,从而干扰杀毒软件对其的判定,使之免杀。
内部免杀有一个必要的前提,就是免杀制作者必须要有病毒的源代码,这一条件非常苛刻。
外部免杀需要一定的反汇编基础和PE结构知识。
内部免杀和外部免杀属同一技术层次,没有高低之分。
2、特征码免杀和大范围免杀
先进的杀毒引擎使用的杀毒技术依然是围绕特征码展开的,所以修改病毒的特征码在可预见的很长一段时间里还会是免杀技术的中流砥柱。
大范围免杀通常又被称为“无特征码免杀”,指的是使用一些例如加花加壳这种可使病毒代码复杂化的方法对病毒进行处理,处理过的病毒很可能会同时免杀掉多种杀毒软件。
大范围指的不是直接针对特征码的修改,只是指通过其它方法使代码复杂化,从而间接影响杀毒软件对病毒特征码的识别。
3、文件免杀、内存免杀和行为免杀
文件免杀指的是计算机硬盘上存放的被某杀毒软件查杀的病毒,经过免杀处理后,再对病毒进行静态的病毒扫描时,该杀毒软件不将这个原本被自己查杀的文件判定为病毒。
这种将硬盘上的病毒文件中特定PE区段载入到内存并进行病毒鉴定的方法,被称为对病毒的动态文件扫描,这并不等同于杀毒软件的内存扫描。
内存查杀是指在病毒运行的时候,病毒被载入计算机的内存后,杀毒软件在内存中侦测到病毒的运行,并将病毒在内存中击杀。
内存免杀指的就是在上述例子中的病毒被载入到内存后系统无法通过杀毒软件的内存扫描功能从内存中找出该病毒。
行为免杀的概念出现在文件免杀和内存免杀之后,是一个相对比较新的概念。
病毒程序大都有很多共性,如:
在系统文件中释放一些动态链接库文件并添加启动项或服务等。
杀毒软件可以抓住病毒的这一特性,监控计算机运行的程序,控制程序可能产生的对计算机系统有危害的行为,杀毒软件的这种监控方式就是行为监控,而突破这种监控方式的工作就称为病毒的行为免杀。
4、盲免技术
盲免技术又被简称为“盲免”,盲免可以说得上是一个隐藏在圈内很久未被公开的免杀技术。
盲免指的就是在不使用杀毒软件定位特征码也不需要杀毒软件测试免杀的效果,直接制作出最终的免杀样本。
在这看似投机的结果中,其实有很多技术细节和经验在里面,盲免并不是瞎搞,与特征码免杀一样,盲免也是有很强的针对性的。
能熟练盲免的免杀制作者,他们对各种杀毒引擎都非常了解,这些都是靠平时做一般性免杀的过程中得到的,有了这个前提,才能在不借助杀毒软件的情况下,判断出杀毒软件对特征码识别的弱点。
针对不尽相同的杀毒引擎,修改特征码的方法也各种不同,所以在研究查毒引擎之前,需要掌握好PE结构、反汇编等基础知识。
第二章开始讲的是免杀环境的搭建和虚拟机的安装以及使用,这里我就不打上来了。
我只说一些常用的工具。
工具下载区-暗组2010里面应该全都有。
常用免杀工具
1、程序名:
exeScope
这是一个典型的资源工具。
我们可以能过它来修改被载入文件的资源。
2、程序名:
LordPe
这个工具被称为“最好的PE工具”。
通过这个工具,我们可以对PE文件进行修改并查看PE文件的详细信息,如:
入口点、区段等。
3、程序名:
UltraEdit-32
这是一个非常好的十六进制编辑工具。
功能很强大,免杀常用。
4、程序名:
Restorator2007文件资源编辑工具,操作非常简单,界面也很友好,所以被广泛的应用于免杀过程中的导入、导出资源工作中。
不过这个工具的综合性能并不好。
5、程序名:
ZeroAddv1.0
通过这个程序,我们可以对指定PE文件进行加入0区段的工作。
并且可以自定义所加区段的区段名和区段大小。
这个工具可以说的上是免杀必备工具了。
6、程序名:
WinHex
一款简介而又强大的十六进制编辑工具。
7、程序名:
Peditor1.7
一款PE编辑工具,虽然没有LordPe功能强大,但是操作十分简单,甚是好用。
8、程序名:
FreeRes0.94
严格来说,它不是脱壳工具,因为它只是把资源释放出来,并没有对被压缩的文件进行解压的反向工程,只要你用这个软件为被压缩的软件建立起一个覆盖资源,即可用任何的资源编辑软件对其进行资源的编辑了。
9、程序名:
MyCCl
这是一个查找文件特征码的工具,免杀必备。
10、程序名:
multiCCLf
这也是一个定位文件特征码的工具。
相对于MyCCl来说,这个工具的定位更准确,精度高,但是操作麻烦。
11、程序名:
ASProtect.2.3.6.26.Modified
一款强壳,几乎是所有壳的综合,功能十分强大,ASPMisshortforASProtect.2.3.6.26.Modified.
12、程序名:
MaskPE2.0
曾经辉煌一时的免杀工具,功能简单,但是免杀效果极其的好,尤其是它内存免杀方面的作用,更是突出。
13、程序名:
北斗壳v3.7
中国人自己的壳,又名nspack3.7,这款壳也被国外的cracker认可。
14、程序名:
PeLock1.06
通常在破解界,很多人通过来脱这个壳来证明自己的实力。
可见这个壳的加壳效果。
著名的黑防灰鸽子的控制端就加的这个壳。
15、程度名:
Themida
功能非常强大的壳。
著名的黑洞控制端就是加的这个壳。
16、程序名:
c32asm
界面很漂亮的十六进制和静态编辑工具。
通过这个工具我们可以修改SYS驱动文件,做免杀必备。
17、程序名:
OllyICE
动态调试工具,我们通常用其来修改特征码,不过这个工具不能加载SYS驱动文件,令人感到遗憾。
18、程序名:
OllyDbg汉化原版
之所以把这个工具和上面的OllyICE分开,是因为这个工具具备OllyICE不具备的功能,那就是在手工查找内存特征码的时候,OllyICE是不能定位准确的,而我们的原版则可以准确定位,不过OllyICE可以调试ring0,而OllyDbg则不可以。
19、程序名:
UPX
一款非常著名的壳程序。
因为范围极广。
20、程序名:
超级巡警自动脱壳机
我们可以通过这个简单的工具完成很多脱壳工作。
21、程序名:
OC
一款将被载入文件的RVA转换成实际内存地址的小工具。
22、程序名:
驱动加载工具(InstDrv-中文版)
这个工具可以很容易的查看被载入驱动文件是否工作正常,有了各款工具,可以大大提高我们免杀SYS文件的效率。
23、程序名:
ResourceBinder2.6
一款效果非常好,而且操作很简单的资源重建工具。
24、程序名:
VMProtect.exev1.55
这是一个非常方便的加密工具,可以加密几乎所有的PE文件,我们在做SYS文件的免杀时常用。
25、程序名:
ExelnfoPEver.0.0.1.7.c
一款很实用的壳程序。
26、程序名:
ExeStealth2.75a
非常好用的壳,保护措施很多,脱这个壳也很有意思。
27、程序名:
PPC-Protect1.1
这个算得上是个比较新的壳了,免杀效果不错。
建议配合加花技术使用。
28、程序名:
VMProtect1.21
相比于前面的1.55版本,这个版本更适合一些精确的特征码加密。
非常好的一款工具,值得收藏。
29、程序名:
ImportREC_fix
WindowsXP下修复Import表的时候,ImportREC会将ntdll!
RtlRestoreLastWin32Error重定位到kernel32!
RestoreLastError,而这个函数在以前的win-dows系统下是不存在的,而RestoreLastError和SetLastError实际上是同一个函数,都被转移到对ntdll!
RtlRestoreLastWin32Error的调用。
这个ImoprtREC_Fix.exe修正版可以用SetLastError代替RestoreLastError函数。
30、程序名:
花指令伪装器
一款加花指令的工具,支持多次加花。
31、程序名:
PE-Armor
一款压缩加密壳,功能很多,单独使用就有很好的免杀效果。
32、程序名:
超级加花器
这也是一款加花工具,介面非常漂亮,功能也很实用,而且这个工具的作者很勤快,工具总是更新很快。
33、程序名:
svkpv1.43a
纯加密壳,强度高,但是兼容性极差。
34、程序名:
ASP代码加密大师
一款N年前出品的加密ASP木马后门的加密工具。
35、程序名:
吾芝道ASP木马加密免杀工具GUI版
这个是个效果特别好的ASP加密工具,也是一款早期的ASP加密工具。
36、程序名:
HTML混淆器
这是GOLDSUN写的一款HTML格式文件处理工具,这个工具可以重复对HTML文件进行处理,而且经过这个工具处理过的HTML文件的体积会比处理之前小很多。
37、程序名:
加密最终4.0
这是最好用的ASP后门加密工具,操作简单,效果极好。
重点推荐。
38、Webshell免杀工具
这个是一款专门对webshell进行免杀的工具。
39、蓝星网页加密专家v1.0
这个工具是一款可以批量加密脚本文件的免杀工具。
40、phpencode
这个是一款加密PHP后门木马的工具,命令行下使用
三章
一、PE结构简单介绍
PE究竟是什么,通俗的说,PE是一种格式。
PE格式,是微软Win32环境可执行文件的标准格式(所谓可执行文件不光是.exe文件,还包括.DLL/.VXD/.SYS/.VDM等)。
PE就是PortableExecutable的缩写。
Portable是指对于不同的Windows版本和不同的CPU类型上PE文件的格式是一样的,当然CPU不一样了,CPU指令的二进制编码是不一样的,只是文件中各种东西的布局是一样的。
PE文件的主要结构:
.text 是在编译成汇编结束时产生的一种块,它的内容全是指令代码
.rdata 是运行期只读数据
.data 是初始化的数据块
.idata 包含其它外来DLL的函数及数据信息,即输入表
.rarc 包含模块的全部资源:
如图标、菜单、位图等
在PE文件中,代码、资源以及重定向定位信息等数据按照属性分类放到不同的区段中(Section),而且每个区段的属性和位置等信息用一个IMAGE_SECTION_HEADER结构来表示,所有的IMAGE_SECTION_HEADER结构组成一个区段表(SectionTable),区段表被放在所有区段的前面,用于标志所有区段的属性(如:
可读、可写、可执行等属性)。
区段通常又被称为节,区段表也通常被称为节表。
CPU之所以可以准确的读取内存中的指令和数据,是因为CPU把内存解成了成千上万份,把每一份都标上一个编号,而每一份的编号都是唯一并且有次序的。
这个编号被称作内存地址,有了这个唯一的地址,CPU当然就可以准确地定位内存中的指令和数据了。
PE文件具有如下地址:
1、入口点 EntryPoint
2、文件偏移地址 Fileoffset
3、虚拟地址 VirtualAddress简称:
VA
4、基地址 ImageBase
5、相对虚拟地址 RelativeVirualAddress简称:
RVA
公式:
RVA(相对虚拟地址)=VA(虚拟地址)-ImageBase(基地址)
二、DOS文件头和DOS块
一个标准的DOS可执行文件部分包含两个结构,分别是DOS文件头和DOS块。
DOS文件头是一个IMAGE_DOS_HEADER结构,该结构定义如下:
IMAGE_DOS_HEADERSTRUCT
e_magicWORD?
:
魔术数字
e_cblpWORD?
:
文件最后页的字节数
e_cpWORD?
:
文件页数
e_crlcWORD?
:
重定义元素个数
e_cparhdrWORD?
:
头部尺寸.以段落为单位
e_minallocWORD?
:
所需的最小附加段
e_maxallocWORD?
:
所需的最大附加段
e_ssWORD?
:
初始的SS值(相对偏移量)
e_spWORD?
:
初始的SP值
e_csumWORD?
:
校验和
e_ipWORD?
:
初始的IP值
e_csWORD?
:
初始的CS值(相对偏移量)
e_lfaricWORD?
:
重分配表文件地址
e_ovnoWORD?
:
覆盖号
e_resWORD4dup(?
):
保留字
e_oemidWORD?
:
OEM标识符(相对e_oeminfo)
e_oeminfoWORD?
:
OEM信息
e_res2WORD10dup(?
):
保留字
e_lfanewWORD?
E头部的文件地址
IMAGE_DOS_HEADEREND
结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。
在汇编语言中,结构体的定义往往如下:
结构体名称STRUCT
结构体字段1结构体字段类型初始值
结构体字段2结构体字段类型初始值
……
结构体字段N结构体字段类型初始值
结构体名称ENDS
这里还需要进行一下说明,在Win32汇编中,分号(;)为注释符号,注释掉该行为分后面的语句。
而“初始值”处的问号(?
)表示没有初始值。
因为仅仅是为了表明IMAGE_DOS_HEADER结构体的字段,所以所有字段的值都有“?
”来表示。
其中e_res字段的初始值我用4dup(?
)表示,这表明该字段占有4个WORD宽度,也就是占有4个该结构体字段对应的结构体字段类型宽度。
那么不难理解e_res2字段就是占有10个WORD宽度了。
这里我们有用的只有两上字段,他们是IMAGE_DOS_HEADER结构中的第一个和最后一个字段(e_magic和e_lfanew)。
e_lfanew字段占一个双字的宽度。
其值为一个偏移地址,该地址为DOS块后面的PE头的文件偏移。
DOS块就是DOS部分的可执行代码。
二、PE文件头
PE文件头的结构定义如下:
IMAGE_NT_HEADERSSTRUCT
SignatureDWORD?
FileHeaderIMAGE_FILE_HEADER<>
OptionalHeaderIMAGE_OPTIONAL_HEADER32<>
IMAGE_NT_HEADERSENDS
而PE文件大部分的文件属性是由Signature字段后面的FileHeader字段和OptionalHeader字段来设定的。
FileHeader字段也是由一个结构体定义的,其具体结构如下:
IMAGE_FILE_HEADERSTRUCT
MachineWORD?
:
0004h-运行平台
NumberOfSectionsDWORD?
:
0006h-文件的区段数量
TimeDateStampDWORD?
:
0008h-文件创建日期和时间
PointerToSymbolTableDWORD?
:
000ch-指向符号表(调试时使用)
NumberOfSymbolsDWORD?
:
0010h-符号表中的符号数量
SizeOfOptionalHeadderWORD?
:
0014h-IMAGE_OPTIONAL_HEADER32结构长度
CharacteristicsWORD?
:
0016h-文件属性
IMAGE_FILE_HEADERENDS
在IMAGE_FILE_HEADER结构中各个字段的注释中,“-”前面的部分是该字段相对于PE文件头的偏移,“-”后面的部分是字人面功能注释。
Machine字段
该字段相对于PE文件头的偏移为0004h,占有一个字的宽度,用于指定文件的执行平台。