前置知识 在本文详细介绍之前,我们先来看看其它杀毒软件的特征码检测方法:从某一个病毒样本的各个偏移位置提取约16字节内的特征码,为了减少查杀的误报率,当只有同时符合这几处特征码的文件才被认为是病毒/木马。因此我们对于此类杀毒软件的免杀思路就是更改其中的任意一处,从而达到免杀效果。因为实现起来非常容易,所以这里不再赘述。让我们看看卡巴斯基的特征码定位,我使用的版本是卡巴斯基Personal Pro 5.0.391。它使用了冗余病毒库,可以查杀很多的恶意程序和广告程序,当我们对一个木马进行CCL定位时,典型症状就是无论我们选择手动定位中替换字节大小的多少,最终的结果是无一例外全部被杀。剩下的只是文件头所在特征码被替换后的文件,但这些文件已经不能算是PE文件了,自然无法无法运行。那么CCL是不是就失效了呢,当然不是,首先我们要搞清楚原理,然后对症下药。卡巴斯基的查毒过程,首先是对文件进行PE有效性检测,当我们替换了PE文件头的特征码之后,任何杀毒软件都不会报警。(当然也无法运行)然后是采用了主辅特征码监测,当然此处的“主辅”不仅仅只有两段(我曾经对PCShare的PcHide.sys进行定位,定位了六段的主辅特征码,可见卡巴斯基对于这个驱动文件下了很大的功夫)。最后可能会猜测身份特征和0区特征,在我进行定位时,并没有发现这种情况。看来我们还是比较幸运的。卡巴斯基首先对某个可执行文件进行PE有效性检测,然后进行主特征码检测,接着检测辅特征码,当有任何一段的主辅特征码符合,那么卡巴斯基就开始报警。有人说那样的话会不会引起误报率的上升呢,答案是不会的。我在对其进行定位时,发现当卡巴斯基开始检测时,所检测的主辅特征码中又包含了许多小段字节的特征码,也就是我上面所说的其它杀毒软件的特征码检测方式。这些小段特征码只要任意改一处,那么所对应的它的父特征码也就失效了,换句话说,卡巴斯基的主辅特征码又衍生了许多子特征码,这就是所谓的复合特征码。因此,当我们进行CCL定位时,由于你可能只替换了某个父特征码的子特征码,但是其它的父特征码还是会被卡巴斯基所检测到。免杀知识既然原理已经知道了,那么我们该怎么处理免杀呢,答案很简单,利用病毒/木马的变种检测。小知识:我们知道,病毒有时候可以改变自己的代码,这就是变种。杀毒软件自然不能识别,然而随着时间的推移,杀毒软件的病毒库进行了更新,变种文件也就可以被杀毒软件所查杀了。我们可以这样表示,比如爱虫病毒的变种:lovegate.ac→lovegate.de→lovegate.hp。其实卡巴斯基也利用了这种方法,当检测到不同的父特征码是,它所表示的木马名称也不相通。举个例子,我们的免杀对象PcShare中的Pcinit.exe文件,经过替换不同的父特征码后,出现了不同的名称:PcClient.ik→PcClient.le→PcClient.hp等。这里,我们就是利用逐个替换父特征码进行免杀的思路。当然其中还有许多技巧可以使你能够更快速的进行定位和特征码修改,下面我为大家演示一下PcinIT.exe文件的免杀处理。实战免杀首先准备工具:CCL2.8、OllyDbg1.1、Peditor1.7、Winhex。首先我们进行PcinIT.exe的手动检测,选择每次替换规定字节大小,字节大小设置为128字节。文件区段选择处,我们什么也不填,直接替换整个文件,点击确定。使用卡巴斯基进行查杀。看见了吗?其中有两个病毒名称和其它的不一样,分别是两个区段的PcClient.le和一个区段的PcClient.hp。这说明什么呢?说明我们至少有三段的父特征码,分别对应于PcClient.le和PcClient.hp和PcClient.ik,其中PcClient.le的两个子特征码分别是1980的80(十六进制)字节和1D80的80个字节。根据第一段的理论,我们只需要任意改变其中的一处,就能把PcClient.ik这段父特征码屏蔽掉,接下来让我们来进行精确度定位,设置精度为手动一个字节,填充的区段为1980的80个字节。接着进行查杀。
我们可以看到,PcClient.le的子特征码已经出来了,为19F4-19FF。接下来我们进行反汇编。看到了吗,这里是把三个ASCII字符进行赋值操作。我们首先先修改一下代码,ASCII代码2E,64,72,76分别对应字符“.drv”。 我们使用大小写转换,修改为“Drv”对应于2E,44,72,76。最后使用Winhex修改,保存退出。现在再用杀毒软件进行查杀,发现病毒名称已经变成了PcClient.le。这就说明我们成功的把变种PcClient.ik的父特征码给修改了。我们再对已经修改了的文件进行128字节的手动检测,范围为整个文件,卡巴斯基查杀结果。是不是和上面很像呢?好了,再一次重复操作,我们任意选择一段PcClient.hp的子特征码,这里选择1A80的80个字节,然后进行精确定位。反汇编之后还是使用大小写替换的方法,把2E,6C,6F,67的“.log”替换为2E,4C,6F,67的“.Log”。保存修改,可以发现病毒名称已经变成了PcClient.hp。好了,我们又消灭了一个变种。那么有些人会问了,这样下去要到什么时候才算是完呢?我们需要一直这么做下去,直到再也发现不了新病毒的出现为止。我们再次使用128字节的手动定位,检测后可以发现已经全部是PcClient.hp了。删除掉病毒文件,留下的几个文件就是最终的免杀文件。好了,区段2280-2300这80个字节被替换后,此文件达到了最终免杀。现在我们来对这个最后的区段作精确免杀。最后定位的PcClient.hp特征码是7个字节。我们反汇编。我们使用指令跳转法做个跳转,最后用杀毒软件查杀,发现不报警了。免杀成功!然后测试上线功能,同样正常。
总结经验免杀思路是这样的,根据卡巴斯基的病毒名称来按阶段依次突破,通过不同的名称,解决不同的特征码,依次改之。检测到主特征码-→改之保存→检测到辅特征码→改之保存→再次检测到辅特征码……然后到达最后的一段辅特征码。其实说起来也很简单,关键思路是根据名称来定位。文中所提及的Winhex,除了编辑16进制文件外,还有什么用处呢,我们可以使用它的地址管理器。还是上面这个例子,首先打开Winhex,然后使用快捷键CTRL+M,打开地址管理器,一开始是空的列表。我们可以创建完整的某个父特征码的位置,比如上面说的PcClient.le,也就是1980的80个字节,还有下面的1D80的80个字节。当我们将这两段进行精确定位后,可以使用地址管理器表达出来。我们可以很方便的以高亮显示某个父特征码的所有子特征码。这方便了同时修改多处父特征码的人,使得他们可以有更加清晰的思路来对特征码进行定位和修改。再来说说卡巴斯基杀毒软件本身的设置问题,我们知道当你选择扫描对象的处理方法时,一般是选择删除危险对象。但是卡巴斯基会将它们移动到备份区,首先这会降低杀毒软件本身的查杀速度,其次占据硬盘空间也比较多。然而我们却找不到设置成不移动到备份区的选项。所以每次进行精确检测时,总是要事后手动删除备份区的内容,麻烦且慢。我是利用了NTFS的安全性来解决这个问题的,虽然不是什么好方法,但也可以解燃眉之急。卡巴斯基默认是将备份文件放在“%ALLUSERSPROFILE%\Application Data\Kaspersky Anti-Virus Personal Pro\5.\Backups”文件夹下,我们将它安全性中的所有用户删除,这样卡巴斯基就不能往里面备份文件了。但是有一点,虽然这样设置好了,每次卡巴斯基启动后还是会重新关联文件夹的安全性。所以每次每次都要重新设置。我做了个脚本,可以自动的设置其中的属性,当启动完卡巴斯基杀毒软件后,我们只需双击它就可以进行后续工作了。相信读者只要明白原理后,再自己动手实际操作一下,很快就可以熟练应用了。对于其他杀毒软件的免杀,相信更是不在话下。话说了这么多,希望读者能够自己打造属于自己的免杀黑器,当然也希望所有的杀毒软件更加AI。我们要在攻与防的对立统一中寻求突破,这样各种技术才会发展得更快!