导读:很多小白为了让自己的电脑在日常的工作中更加的安全下载多个杀毒软件进行定期查杀,觉得电脑肯定是非常的安全,便肆无忌惮的浏览一些少儿不宜网站,甚至主动或被动下载一些乱七八糟的软件,那么杀毒软件真的可以全部把病毒和木马查杀吗?本期文章我们就详细讲讲木马病毒是如何伪装不被杀毒软件所查杀的。
什么是免杀?免杀,也就是反病毒(AntiVirus)与反间谍(AntiSpyware)的对立面,英文为Anti-AntiVirus(简写Virus AV),逐字翻译为“反-反病毒”,翻译为“反杀毒技术”。
免杀技术的分类二进制的免杀(无源码),只能通过通过修改asm代码/二进制数据/其他数据来完成免杀。有源码的免杀,可以通过修改源代码来完成免杀,也可以结合二进制免杀的技术。杀毒软件是如何提取文件特征码的?
扫描时,先获取文件每个节的特征(节大小+节的哈希值),再进行一次哈希,即得到一个类似MD5的字符串。然后对比此哈希值字符串首字母,首字母范围是0-9,A-F。根据首字母,分别与分隔开的病毒库进行匹配。为什么这样做?就是为了提高扫描速度。原本200万的特征码,需要匹配200万次。进行首字母分隔后,只需要匹配200/16,大约12万次。相当于效率提高了16倍。通俗讲就是不要把一个文件的所有内容都拿来计算hash,而通过分片,取出部分重要(不易改变)的内容进行hash计算,这样就能达到通过一个特征码找到类似的病毒变种。
如何能快速查找特征码?
常见的特征码定位工具有CCL、MYCCL。工具大致原理就是分割文件,某些分割部分填入数据(0),如果扫描该部分不报警,则特征码在这个部分。如此反复,直到找到很短的某一段内容。不同工具使用的分割算法不同,查找特征码的效果也不尽不同。
在这里推荐一款最新的特征码定位软件VirTest。
官方介绍:我们可以这样假设报毒过程,如果检测文件是PE,如果在CODE位置存在 标志A,在DATA位置存在标志B,在资源位置存在标志C,同时满足这个3个条件,那么杀软就会报毒,VIRTEST工作原理就是要找到引起报毒最后一个标志,也就是假设中的标志C。
因此VIRTEST采用2分排除法,测试标志C所在文件中的位置,由于被杀的文件可能存在多个 类似于ABC这样的连锁条件,所以我们必须要通过一种排除机制,先要找最靠近文件前部的连锁条件,排除掉文件尾部数据,当找到第一个连锁条件后,抹掉引标志C,再恢复尾部数据,
然后继续测试另外的连锁条件,直到找到最后一个连锁条件,抹掉后,整个文件免杀了,则说明特征代码被定位完毕了,所以VIRTEST绝对可以精确的定位出所有的复合特征。
找到特征码了,怎么免杀呢?
找到特征码之后,只要改变这个特征码值的话就免杀成功了,常用的修改工具有,OD,C32ASM,UE,010Editor等等。
没有源码的情况下修改:
如果特征码定位到数据(通过IDA/OD等确认),修改这类的特征码是非常容易导致软件的运行失败无法打开,或者影响程序运行流程或结果。
1、数据
字符串,如果不影响程序逻辑,可以替换大小写;如果无关紧要的数据,便可以随意替换。整数,如果不影响结果,替换值,清零等等操作。PE头数据,根据PE结构具体来看,无用数据清零或修改,有用数据看情况修改。最后,终极修改方法,找到访问数据的代码,直接修改代码访问数据的地址,数据也可以放到其他地址了。
2、代码
如果特征码定位到代码(也通过IDA/OD等确认),在不改变程序功能的基础上,应用各种方法修改。等价替换汇编代码,如mov eax,0可以换成xor eax,eax,直接结果相同,二进制代码不同。交换代码顺序,在不影响逻辑的情况下。代码块移位,将代码块移动不用的内存位置,通过加入jmp addr跳过去执行,addr是新的代码块地址。
有源码的情况下修改:
在有源码的情况下,修改的方式就更灵活了,更简单了。
如果特征码是数据,那么修改数据位置,访问数据的代码位置等(思想类比非源码方式)。
加花指令,这是最有效也是最常用的方式,要点在于如何加花指令。
加上数据计算代码,加减乘除各类组合。
加字符串操作代码,增加、删除、查找、替换等。
加多层跳转,跳转间加无效指令(不会执行的)。
加貌似有效的API调用,如LoadLibrary+GetProcAddr+API等。