1.加密法
常用的是用微软的源码加密工具screnc.exe,以此来躲开杀毒软件的追杀。优点是见效明显,一般的有害代码用此法加密后,可以存在于服务器上,发挥原有的功能.缺点是代码经过加密后,是不可识别字符,自己也不认识了。
2.大小写转换法
把被杀程序里的代码,大小写稍作转换.可以躲过一般的杀毒软件。(WORD可以转换大小写,这招对ASPX木马免杀很管用)。
3.混水摸鱼法
这种方法也常奏效.fso写成"f"&vbs&"s"&vbs&"o",运行的结果是一样的,但文件却可以逃过杀毒软件的查杀
4.图片法或组合法
把代码保存为*.jpg,引用,这样,也可以躲过一劫.把很多个代码分配到1.asp,2.asp,3.asp...中,再通过#include合并起来,可逃过and条件的杀毒软件。
5.移位,逆位,添零法
这种方法也属于加密,可以用黑客伟跟冰狐的作品。
6.asp结构特征法
在程序开头跟结尾加上图片数据库之类的特征码,改变本身结构。无论是删除一些特征,还是颠倒顺序只要能正常使用即可。
以前用screnc.exe加密都被杀了,其实网上好多加密软件都是利用这个小东西加密的。看来这种方法现在是行不通了。现在比较流行的就是移位、逆位、添零等。有能力的朋友可以定位下杀毒软件的特征码或者自己编写修改。有时候把里边的东西文字改改换换位置跟语法也能躲过查杀。
其实我感觉破坏asp的结构性是最好的免杀方法。也看了许多文章,其中有在asp开头加入图片特征码躲过查杀,不过这种方法有的时候是没用的,于是便想起了可以改变成数据库结构。这种工具网上也有的,不过是用来欺骗动网后台备份的。
我以原版海阳顶端木马为例,首先把ASP木马合并成数据库(copy X.mdb+X.asp X.asp),使用杀毒软件查杀,可以躲过瑞星2006、卡巴斯基反病毒6.0、Kv2006、McAfee。唯独不能躲过NOD32查杀。这时候可以先用screnc.exe加密下在合并,这样NOD32也检测不出来了。最重要的是能正常使用不。
修改脚本特征码法:
2005年是免杀技术突飞猛进的一年,越来越多的人熟悉了简单的PE文件免杀操作。而杀毒软件也是在查杀方面下足了功夫,使得修改文件变得越来越困难。但是,无论定位和修改多么麻烦,只要杀软利用的是特征码扫描,PE文件就可以通过相对简单的特征码修改达到免杀。而CCL一直没有涉足的方面是脚本免杀,坛里也有朋友让我改进一下,因此最近给CCL加上了定位脚本特征码的功能,并对一款asp木马进行了测试,结果怎么样呢?
这里我选择了海阳顶端网ASP木马2006版。由于并不知道杀软是怎样定义脚本文件的特征码,所以我的操作与定位PE文件相同。杀软仍用大名鼎鼎 Kaspersky。先查一下吧,卡巴报警发现Backdoor.ASP.Ace.aw。注意末尾的aw,这是杀软对同一个文件不同版本的特征码定义,有时我们需要运用定位过程中版本号的变化来确定特征码的位置。
首先假设将特征码定位器CCL设置成手动定位,生成文件200个,打开海洋的木马主文件2006.asp。这时弹出了定位范围选择窗口,由于脚本文件不是PE文件,因此没有分段,整个文件就是一个整体。如图1所示,段名为整个文件,段大小就是整个文件的大小。
直接点确定,对整个文件进行定位。生成文件完毕后对目标进行查杀,结果,只剩下一个文件没有被杀,OUT_00000000_000001C3,这说明当从偏移0开始1C3个字节的数据被填0时,该文件免杀。我们这里是什么。
代码:
程序代码
<object runat="server" id="ws" scope="page" classid="clsid:72C24DD5-D70A-438B-8A42-98424B88AFB8"></object>
<object runat="server" id="ws" scope="page" classid="clsid:F935DC22-1CF0-11D0-ADB9-00C04FD58A0B"></object>
<object runat="server" id="fso" scope="page" classid="clsid:0D43FE01-F093-11CF-8940-00A0C9054228"></object>
<object runat="server" id="sa" scope="page" classid="clsid:13709620-C279-11CE-A49E-444553540000"></object>
脚本文件我不太熟,但总比改汇编指令简单,试着修改一下吧,原则还是不能破坏原文件功能。我们知道,asp中代码是在<% %>之间的,于是我们在每一个<object></object>前插入一个<% %>,就像汇编插入nop空指令一样。保存修改,再用卡巴查一下。还是报警,但是这次显示的是Backdoor.ASP.Ace.w。这就说明:我们刚才修改是特征码中的一处,但不是全部,也就是说我们把aw中的a代表的特征码改掉了,但是w仍然在。
我们再用CCL打开修改过的2006.asp,设置保持不变,再重复上述步骤。经过查杀后,200个文件剩下了6个。结果
-------------定位结果------------
序号 起始偏移 大小 结束偏移
0001 00000000 000001C3 000001C3
0002 000140A2 000008CF 00014971
第1段仍是在文件头部。我分析是卡巴在对脚本文件检测前会分析文件的完整性,而1号结果正好将“<%”给替换掉,这样的脚本代码是没法运行的,因此卡巴就不认为它有毒。(卡巴对PE操作也存在同样问题,这也是很多人用CCL定位卡巴总是遇到结果定位在PE文件头部的原因。)我们看2段处是什么,该段结果范围较大,我们找有“特色”的改。最终目标定在如下语句:
代码:
程序代码
chkErr(Err)
echo("<script language=""java script"">alert('文件上传成功! " & Replace(fileName, "", "") & "');</script>")
streamT.Close
.Close
我们将“文件上传成功”改为“上传成功”,保存后再检测。OK,免杀成功了。运行一下试试,海洋的各项功能正常。当然,文件上传成功后的提示已经变了。
总结一下:卡巴对恶意脚本的定义仍是沿用特征码的方式,且明显没有PE文件的特征码定义那样复杂。希望杀软早日在检测方式上产生根本性的改变!
脚本变形免杀方法:
1.classid的使用
aspshell里的常用的对象名往往是杀毒软件采用的特征码,管理员也可以通过修改注册表,来改变asp对象的名称,但是没个asp对象在系统里有个规定的classid(ps:classid在各个系统有所不同)那么我们就可以通过classid来建立对象,如我们通常建立fso对象是采用下面的语句:
Set hh=Server.CreateObject("Scripting.FileSystemObject") 那么通过查找“Scripting.FileSystemObject" 来查杀你的脚本,那么我们就可以通过fso对应的classid来建立:
<object runat=server id=hh scope=page classid="clsid:0D43FE01-F093-11CF-8940-00A0C9054228"></object>
这样还有个好处就是即使管理员改fso的名字,也可以使用。
以下是常用对象对应的classid:
WSCRIPT.SHELL 72C24DD5-D70A-438B-8A42-98424B88AFB8
WSCRIPT.NETWORK 093FF999-1EA0-4079-9525-9614C3504B74
Scripting.FileSystemObject 0D43FE01-F093-11CF-8940-00A0C9054228
Scripting.Encoder 32DA2B15-CFED-11D1-B747-00C04FC2B085
Scripting.Dictionary EE09B103-97E0-11CF-978F-00A02463E06F
adodb.stream 00000566-0000-0010-8000-00AA006D2EA4
shell.application 13709620-C279-11CE-A49E-444553540000
2.使用+或&连接符的妙用
杀毒软件一般是提高提取特征码来查杀病毒的,所以asp对象名一般就成为了“特征码”了。我们就可以通过使用+或&来拆分对象名。如:
Set hh=Server.CreateObject("Scripting.FileSystemObject")
我们就可以提高下面的语句替换:
Set hh=Server.CreateObject("Scrip"+"ting.file"+"systemobject")
或
Set hh=Server.CreateObject("Scrip"&"ting.file"&"systemobject")
值得一提的是“思易ASP木马追捕”也是一个有asp编写的脚本,用来查杀webshell的,这个脚本先替换掉目标代码里的&在进行查找对象名,那上面简单的使用&就没用了,不过我们可以同过插入空变量来防杀:
Set hh=Server.CreateObject("Scrip"&"ting.file"&qsdsdsdf&"systemobject")
其中qsdsdsdf就为空变量,即使替换了所有的&,对象名还是有改变。
3.改变字母大小写(本文的重点所在)
其实要通过改变字母的大小写来改变特征码,大小写对应的asii或其他的编码也不同,这样我们可以到达防杀的目的。实现起来也简单,一个系统自带的“记事本”就可以搞定,不过这样要手工一个字母的去替换,你可以自己写个简单的程序帮助你处理,不过注意的问题是,有的代码里有密码加密的函数会受到影响,还有对shell里的htm代码有影响,建立在变形事,采用部分变形(改变大小写)。下面是我vb写的一个变形工具。
PS:程序只是替换了指定的几个字母,还有就是加入空变量. 如果你编程够好的话,你可以写个程序可以随机改变大小写的,还有部分变形代码。