简述免杀木马攻击的全过程,木马免杀原理及方法超全

http://www.itjxue.com  2023-01-14 01:43  来源:未知  点击次数: 

什么是免杀木马

免杀——顾名思义就是能避免被杀。

免杀木马就是能不让杀软识别为恶意代码的木马。

木马经过加壳后(可能不止一次,加壳算法也可能不止一种)能不被某些(可能所有)安全软件(靠特征码分析)发现,就成了免杀木马。

不过这种免杀只是相对的,如果安全厂家得到恶意代码,就会分析,然后更新特征库(病毒库)就可以查杀。

如果你用的是HIPS,那就基本不怕,因为不管恶意代码如何隐藏,最后都会露出真面目——调用相关的函数(来攻击),然后被 HIPS 拦截。但是如果恶意代码利用了系统漏洞(例如利用系统对特殊数据错误分析所造成溢出等等来进行攻击),那就麻烦了(*^__^*) 嘻嘻……

如果你遇到了很新的木马或者传播不广的木马,杀软可能查不出(因为还没有对应的特征码)。为了解决这种情况,各安全厂家都在想办法,常见的有启发式扫描和智能 HIPS。(貌似卡巴斯基实验室有一种新的东东,能更快的找到恶意代码的源头,好像会在 卡巴 2011 里用)

如何木马免杀

第一步:要想做好木马的免杀,就一定需要了解杀毒软件的特点。

木马的免杀通常来说,有两种。一个是被动免杀,一个是主动免杀。

所谓被动免杀,就是通过给木马加壳加花来达到免杀的效果,这种方法很简单,但是免杀效果不好,

一般只能过表面免杀,而且免杀期很短。

所谓主动免杀,就是通过修改木马被杀的特征码来达到免杀的效果,这种方法比较复杂,但是效果很好

简述木马攻击的步骤。

抓你系统或软件漏洞入你电脑,偷读你信息,发给别人。

1. 配置木马

一般来说一个设计成熟的木马都有木马配置程序,从具体的配置内容看,主要是为了实现以下两方面功能:

(1)木马伪装:木马配置程序为了在服务端尽可能好的隐藏木马,会采用多种伪装手段,如修改图标、捆绑文件、定制端口、自我销毁等等。

(2)信息反馈:木马配置程序将就信息反馈的方式或地址进行设置,如设置信息反馈的邮件地址、IRC号、ICQ号等。

2. 传播木马

(1)传播方式

木马的传播方式主要有两种:一种是通过E-MAIL,控制端将木马程序以附件的形式夹在邮件中发送出去,收信人只要打开附件系统就会感染木马;另一种是软件下载,一些非正规的网站以提供软件下载为名义,将木马捆绑在软件安装程序上,下载后,只要一运行这些程序,木马就会自动安装。

(2)伪装方式

鉴于木马的危害性,很多人对木马知识还是有一定了解的,这对木马的传播起了一定的抑制作用,这是木马设计者所不愿见到的。因此他们开发了多种功能来伪装木马,以达到降低用户警觉,欺骗用户的目的。一般来说有以下几种:

①.修改图标

也许你会在E-MAIL的附件中看到一个很平常的文本图标,但是我不得不告诉你,这也有可能是个木马程序,现在已经有木马可以将木马服务端程序的图标改成HTML、TXT、ZIP等各种文件的图标,这有相当大的迷惑性,但是目前提供这种功能的木马还不多见,并且这种伪装也不是无懈可击的,所以不必整天提心吊胆、疑神疑鬼的。

②.捆绑文件

这种伪装手段是将木马捆绑到一个安装程序上,当安装程序运行时,木马在用户毫无察觉的情况下,偷偷的进入了系统。至于被捆绑的文件一般是可执行文件,即EXE、COM一类的文件。

③.出错显示

有一定木马知识的人都知道,如果打开一个文件,没有任何反应,这很可能就是个木马程序,木马的设计者也意识到了这个缺陷,所以已经有木马提供了一个叫做出错显示的功能。当服务端用户打开木马程序时,会弹出一个错误提示框——这当然是假的,错误内容可自由定义,大多会定制成一些诸如“文件已破坏,无法打开的!”之类的信息,当服务端用户信以为真时,木马却悄悄侵入了系统。

④.定制端口

很多老式的木马端口都是固定的,这给判断是否感染了木马带来了方便,只要查一下特定的端口就知道感染了什么木马,所以现在很多新式的木马都加入了定制端口的功能,控制端用户可以在1024——65535之间任选一个端口作为木马端口。一般不选1024以下的端口,这样就给判断所感染木马类型带来了麻烦。

⑤.自我销毁

这项功能是为了弥补木马的一个缺陷。我们知道当服务端用户打开含有木马的文件后,木马会将自己拷贝到WINDOWS的系统文件的C:\WINDOWS或C:\WINDOWS\SYSTEM目录下,一般来说原木马文件和系统文件夹中的木马文件的大小是一样的,捆绑文件的木马除外。那么中了木马的朋友只要在近来收到的信件和下载的软件中找到原木马文件,然后根据原木马的大小去系统文件夹找相同大小的文件, 判断一下哪个是木马就行了。而木马的自我销毁功能是指安装完木马后,原木马文件将自动销毁,这样服务端用户就很难找到木马的来源,在没有查杀木马的工具帮助下,就很难删除木马了。

⑥.木马更名

安装到系统文件夹中的木马的文件名一般是固定的,那么只要根据一些查杀木马的文章,按图索骥在系统文件夹查找特定的文件,就可以断定中了什么木马。所以现在有很多木马都允许控 制端用户自由定制安装后的木马文件名,这样很难判断所感染的木马类型了。

3.运行木马

服务端用户运行木马或捆绑木马的程序后,木马就会自动进行安装。首先将自身拷贝到WINDOWS的系统文件夹中C:\WINDOWS或C:\WINDOWS\SYSTEM目录下。然后在注册表、启动组、非启动组中设置好木马的触发条件,这样木马的安装就完成了。安装后就可以启动木马了。

由触发条件激活木马

触发条件是指启动木马的条件,大致出现在下面八个地方:

①注册表

打开HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\下的五个以Run和RunServices主键,在其中寻找可能是启动木马的键值。

②WIN.INI

C:\WINDOWS目录下有一个配置文件win.ini,用文本方式打开,在windows字段中有启动命令load=和run=,在一般情况下是空白的,如果有启动程序,可能是木马。

③SYSTEM.INI

C:\WINDOWS目录下有个配置文件system.ini,用文本方式打开,在386Enh、mic、drivers32中有命令行,在其中寻找木马的启动命令。

④Autoexec.bat和Config.sys

在C盘根目录下的这两个文件也可以启动木马。但这种加载方式一般都需要控制端用户与服务端建立连接后,将已添加木马启动命令的同名文件上传到服务端覆盖这两个文件才行。

⑤*.INI

即应用程序的启动配置文件,控制端利用这些文件能启动程序的特点,将制作好的带有木马启动命令的同名文件上传到服务端覆盖这同名文件,这样就可以达到启动木马的目的了。

⑥注册表

打开HKEY_CLASSES_ROOT\文件类型\shell\open\command主键,查看其键值。举个例子,国产木马“冰河”就是修改HKEY_CLASSES_ROOT\txtfile\shell\open\command下的键值,将“C:\WINDOWS \NOTEPAD.EXE %1”改为“C:\WINDOWS\SYSTEM\SYSEXPLR.EXE %1”,这时你双击一个TXT文件后,原本应用NOTEPAD打开文件的,现在却变成启动木马程序了。还要说明的是不光是TXT文件,通过修改HTML、EXE、ZIP等文件的启动命令的键值都可以启动木马,不同之处只在于“文件类型”这个主键的差别,TXT是txtfile,ZIP是WINZIP,大家可以试着去找一下。

⑦捆绑文件

实现这种触发条件首先要控制端和服务端通过木马建立连接,然后控制端用户用工具软件将木马文件和某一应用程序捆绑在一起,然后上传到服务端覆盖原文件,这样即使木马被删除了,只要运行捆绑了木马的应用程序,木马又会被安装上去了。

⑧启动菜单

在“开始—程序—启动”选项下也可能有木马的触发条件。

制作木马免杀的具体步骤

一.花指令相关知识:

其实是一段垃圾代码,和一些乱跳转,但并不影响程序的正常运行。加了花指令后,使一些杀毒软件无法正确识别木马程序,从而达到免杀的效果。

二.加花指令使木马免杀制作过程详解:

第一步:配置一个不加壳的木马程序。

第二步:用OD载入这个木马程序,同时记下入口点的内存地址。

第三步:向下拉滚动条,找到零区域(也就是可以插入代码的都是0的空白地方)。并记下零区域的起始内存地址。

第四步:从这个零区域的起始地址开始一句一句的写入我们准备好的花指令代码。

第五步:花指令写完后,在花指令的结束位置加一句:JMP 刚才OD载入时的入口点内存地址。

第六步:保存修改结果后,最后用PEditor这款工具打开这个改过后的木马程序。在入口点处把原来的入口地址改成刚才记下的零区域的起始内存地址,并按应用更改。使更改生效。

三.加花指令免杀技术总节:

1.优点:通用性非常不错,一般一个木马程序加入花指令后,就可以躲大部分的杀毒软件,不像改特征码,只能躲过某一种杀毒软件。

2.缺点:这种方法还是不能过具有内存查杀的杀毒软件,比如瑞星内存查杀等。

3.以后将加花指令与改入口点,加壳,改特征码这几种方法结合起来混合使用效果将非常不错。

四.加花指令免杀要点:

由于黑客网站公布的花指令过不了一段时间就会被杀软辨认出来,所以需要你自己去搜集一些不常用的花指令,另外目前还有几款软件可以自动帮你加花,方便一些不熟悉的朋友,例如花指令添加器等。

五.常见花指令代码

1。 VC++ 5.0

PUSH EBP

MOV EBP,ESP

PUSH -1

push 515448

PUSH 6021A8

MOV EAX,DWORD PTR FS:[0]

PUSH EAX

MOV DWORD PTR FS:[0],ESP

ADD ESP,-6C

PUSH EBX

PUSH ESI

PUSH EDI

jmp 跳转到程序原来的入口点

2。c ++

push ebp

mov ebp,esp

push -1

push 111111

push 222222

mov eax,fs:[0]

push eax

mov fs:[0],esp

pop eax

mov fs:[0],eax

pop eax

pop eax

pop eax

pop eax

mov ebp,eax

jmp 跳转到程序原来的入口点

关于对木马进行免杀处理

OD下载地:;ClassID=keyword=OllydbgSubmit=+%CB%D1%CB%F7+

peid下载地:;ClassID=keyword=peidSubmit=+%CB%D1%CB%F7+

ccl下载地:

没听过cli,什么东西啊我只用过ccl

首先来简单了解一下杀毒软件查杀病毒的原理,当前杀毒软件对病毒的查杀主要有特征代码法和行为监测法。其中前一个比较方法古老,又分为文件查杀和内存查杀,杀毒软件公司拿到病毒的样本以后,定义一段病毒特征码到病毒库中,然后与扫描的文件比对,如果一致则认为是病毒,内存查杀则是载入内存后再比对,第二个比较新,它利用的原理是某些特定的病毒会有某些特定的行为,来监测病毒。

免杀常用的工具:

Ollydbg 调试器简称OD,动态追踪工具 peid 查壳工具 PEditor PE文件头编辑工具

CCL,伯乐,MYCCL 特征码定位器 oc 地址转换器 reloc 修改EP段地址工具 zeroadd 加区工具 Uedit32 十六进制编辑器

免杀方法

一.文件免杀

1.加花

2.修改文件特征码

3.加壳

4.修改加壳后的文件

二.内存免杀

修改特征码

三.行为免杀

加花

加花是文件免杀的常用手段,加花原理就是通过添加花指令(一些垃圾指令,类似加1减1之类废话)让杀毒软件检测不到特征码。加花可以分为加区加花和去头加花。一般加花工具使用加区加花,当然也是可以手工加的,就是先用zeroadd添加一个区段,然后在新加区段里写入花指令,然后跳转到原入口;去头加花,是先NOP(汇编里的空操作)掉程序的入口几行,然后找到下方0000区,写入NOP掉的代码和一些花指令,再通过JMP(汇编里的无条件跳转)跳到原入口。

举个例子说明一下去头加花:

图1

这是PcShare服务端入口处的一段代码,原入口地址是00403D7D,因为是演示我就用两句最简单的垃圾代码,花指令可以自己去找或者自己写

push eax;eax寄存器压入堆栈

pop eax;eax寄存器弹出堆栈

图2

先将入口两句用NOP填充,然后找到一段0000区记下新入口地址0040443C

图3

写入刚刚NOP掉的入口两句和花指令还有跳转到原入口的指令

图4

把修改好的代码保存,用PEditor把入口地址修改为新入口0040443C就完成了,代码执行时从新入口开始,先执行花指令然后跳转到原入口执行真正程序,很简单吧?其实花指令可以加在头后同样也可以加在头后,也就是可以先执行花指令,然后再是入口,免杀效果是不一样的!大家可以试一下。加区加花很相似,主要是怕程序的0000区不足,先用工具新加一个区,在新区里写入花指令,其他的和去头加花一样,就不演示了。

细的去这个地方去看图

加花以后一些杀毒软件就认不出了,但有些比较强悍的杀毒,比如司机大叔(卡巴斯基)可能还是能查出来,这时就要定位特征码然后修改了,要修改首先必须知道特征码在哪里,所以需要先定位特征码,这是个难点,特别是复合特征码的定位。

特征码定位

特征码定位主要有两种方法:第一 直接替换法;第二 二叉数法;

直接替换法是最早开始出现的一种特征码定位方法,按一定的字节数逐个替换原代码并保存,比如木马总共100字节,可以先把0-10个字节用0替换,保存,然后用杀毒软件扫描,不被查杀说明特征码已经被覆盖掉了,如果还被查杀则替换10-20字节,再保存,扫描……直到找出特征码。替换法的优点是容易理解,速度快(对文件特征码而言),特征码定位工具伯乐以及CCL的手动方式就是利用的替换法原理,文件特征码定位经常使用的就是这种方法。但是对于内存特征码的定位这种方法就不太实用了,每次替换以后都要载入内存再扫描,如果木马较大,替换生成的文件会非常多,每个都要载入内存花费太多时间,除此之外它还有一个非常大的局限性,就是只能确定只有一处特征码的情况(某种特定情况下的多特征码也是适用的,下面的第3种情况将有讲述),杀毒软件还有别的定位特征码的机制,比如有的杀毒的定义了a,b两处特征码(三处或者更多原理是一样的,为了讲解方便,以下均以两处为例),只要a,b有一个存在便报毒,只有加大替换范围直到两处同时被替换才不报毒,如果两处距离比较远,定义出的范围将非常粗糙,很明显直接替换法将不再合适,这时第二种方法就有用武之地了。

二叉数法使用的原理是一半一半定位,CCL的自动方式就是运用的这个原理。将待检测段一分为二,分别替换并生成两个文件A和B,其中A是原文件后半部分被0替换后生成的,B是前半部分被0替换的,杀毒开始查杀生成文件(如果是内存特征码定位则先载入内存再扫描内存),有4种情况

(1)A存在,B被删:这种情况说明A文件中特征码已经被替换掉,因此将A的被替换部分一分为二,起始偏移为A的偏移,再进行检测;

(2)A被删,B存在:这种情况说明B文件中特征码已经被替换掉,因此将B的被替换部分一分为二,起始偏移为B的偏移,再进行检测;

(3)A存在,B存在:这种情况说明没法定位A和B中有没有特征码,因此分别对A和B再一分为二进行检测;

(4)A被删,B被删:这种情况说明两个区段都存在特征码,因此分别对A和B再一分为二进行检测。

对A再分时会将原来的B区段填充为0,相当于去除B区段的影响,只考虑A;同理对B再分时会将原来的A区段内容填0,相当于去除A区段的影响,只考虑B。

第(1)(2)对应的是只有一处特征码的情况,比较容易理解;

第(3)对应的是定义了a,b两处特征码的情况,但是和前面提到的那种不同,杀毒软件为避免误判,定义了a,b两处特征码,要ab同时存在时才报毒,假设a,b分别存在于A,B中,a,b不同时存在,杀毒对A,B均不报警,接下来该如何判断呢?举个例子说明一下

木马原来是…a……b…,第一次替换以后A:…a…000000,B:000000…b…,现在ab不同时存在,A,B都不被杀,则分别对A,B再次一分为二,…a……b000,…a…000…,000……b…,…a000…b…,再次扫描就可以找到两处特征码的位置,如果还是不行,再继续分……直到全部找到;其实这种类型的多特征码直接替换也是可以定位的,甚至效果更好,按一定位数替换,然后扫描,只要替换了一个特征码就不再报毒,所以不报毒的便是特征码被覆盖的,不管有几处都可以定位出,而且修改时也只要修改任意一处就可以了。

第(4)种对应的情况也是杀毒定义了多处特征码,就是上面提到的那种情况,只要有一处符合就认定是病毒。还是以a,b两处特征码为例,第一次替换后的结果同(3),两部分分开考虑,互不影响,相当于分解成两个单个特征码的情况,第二次替换后变成000000…b000,000000…000…,000…000000,…a000000000,依此类推,直到精确定位出所有特征码,如果有N处特征码就相当于分解成N个单特征码来定位,现在N一般小于等于3,这种情况定位出的所有特征码必须全部修改了才能免杀。

二叉数法是个很不错的思路,可以解决大部分的问题,但是不是无懈可击呢?回答是否定的!可恶的杀毒软件还有一个杀手锏,就是复合特征码,给我们定位特征码带来了很大的麻烦。复合特征码的定位机制是,先定义出N个特征码,只要里面某些同时出现便认为是病毒。举个简单例子说明一下:木马原来是…a1…b1…c1…a2…b2…c2…(a1,a2一样,加标号只是为了后面描述方便),只要abc同时出现就认为是病毒,这该如何定位呢?原理不是很难,也是利用替换再查杀的方法,先从后往前用0替换,替换精度假设为每次替换量增加1000字节,开始一直显示是病毒,直到替换到地址13140040(为叙述方便随便说的一个地址)时替换的字节达到15000个,即…a1…b1…00000000,两个c都被替换掉了,此时显示不是病毒,由此可知,特征码c1就在13140040后面1000字节内,减小替换字节数比如改为替换14900字节,即精度改为每次替换减小100字节,还是无毒则减为替换14800字节,不断重复……直到精确定位出c1的位置;如果改为从前往后替换,则可以定位出a2的位置;其他特征码的定位可以利用已经定位到的c1,a2,把其中一个用0替换了比如c1,从后往前就可以定位出c2,直到定位出所有特征码,其实原理并不复杂,但是要真正手动操作起来却是非常麻烦的,我们可以利用MYCCL,它用的原理与之类似,具体操作可以看MYCCL的操作帮助。还有一种方法更科学,原理是一样,但是替换的字节数不是等量增加的,而是以2的n-1次方增加的,第一次替换1字节,第二次2字节,第三次4字节……减小时也按照这种规律,这种替换方法有点类似于二叉数法,可以更快定位出特征码的位置,我想这也是MYCCL在复合特征码定位方面应该改进的地方吧。

复合特征码虽好,大家也不用害怕,认为所有杀毒都来个复合特征码我们就要累死了,定义复合特征码需要单个特征码几倍的病毒库,不方便用户的升级,所以除了特别流行的病毒,定义复合特征码的也不是很多。

定位特征码有些经验可以告诉大家,文件特征码的定位一般用直接替换法,可以借用CCL的手动定位;内存特征码定位,一般用二叉数法,可以用CCL自动定位。对于EXE文件如果文件较小,可以两种方法结合,先用直接替换法生成,可以用伯乐这个工具(为什么不用CCL呢,因为伯乐生成的是EXE文件可以看出图标的模样),找到还能正常运行的,那些图标都变了的说明PE头已经损坏了,就不要试了,然后载入内存,再扫描内存,如果既能正常运行又不被杀,恭喜你!成功了!定位出了大体范围,再用CCL自动定位,很快就可以完成。如果文件较大,用伯乐生成的文件太多,也不方便,还是用CCL定位,对于DLL文件也只能老老实实用CCL定位了。

特征码修改

特征码修改可能需要一点汇编的知识,光盘里有常用的汇编语法介绍,修改主要有直接修改法和跳转修改法。

直接修改法利用的是等效指令替换,比如

add eax,0c等效于sub eax,-0c

或者指令顺序的改变不影响执行的效果,比如

add eax,0c;eax寄存器加上0c再赋给eax

add ebx,05;ebx寄存器加上05再赋给ebx

等效于

add ebx,05;ebx寄存器加上05再赋给ebx

add eax,0c;eax寄存器加上0c再赋给eax

还有一种是如果特征码是ASCII码,可以直接修改大小写,小写字母换成大写,大写的换成小写。

图5

SOFTWARE\Borland可以改成sofTwAre\BOrlaND

大家可以学习一下最基础的汇编语法,并不难,对特征码修改你将会有更深的理解。

跳转修改法比较简单,主要原理就是把特征码的那段NOP掉,然后把NOP掉的语句写入空白的0000区,再通过JMP跳转连接起来,让杀毒找不到特征码,从而达到免杀的目的。

举个例子

(责任编辑:IT教学网)

更多

相关网络创业文章

推荐网络创业文章