关于免杀的一点经验
最近有一个朋友碰到一个“免杀”问题,这位朋友想用修改特征码的方法实现“免杀”,可是他定位到的特征码里有一处是输入表函数,他询问我如何这种情况“免杀”,我觉得这个问题非常具有代表性,所以就来好好的说一下。
一般我们碰到的输入表函数特征码往往都是内存特征码,我一般可以采用三种方式来处理这种特征码。
第一种方法就是函数位置变化发,也称输入表函数移位法,顾名思义,就是把原特征码所在的输入表函数移动到一个新位置,然后在用LordPE这个工具将函数位置重新设定,文件便不会失去原有功能,不过不一定把函数移动到任何位置都可以运行,这个地址是需要尝试的(经验很重要)。一般用这种方法修改特征码后,都要校验和,否则不能正常运行。
第二种方法就是重建输入表法,因为特征码所在位置是输入表函数上,所以我们可以给待“免杀”文件加上一个加密输入表的壳,然后我们再脱掉这个壳,紧接着重建输入表,经过重建输入表后,此处的特征码就没有了,我强烈推荐使用这种方法,因为这种方法对于多处输入表函数特征码“免杀”的效果很好,一次脱壳就可以“免杀”所有输入表函数特征码,不过使用这一方法的前提是自己要有一定的脱壳功底。
第三种方法是这三种方法中最复杂的,也是最简单的。那就是简单添加入口的方法。说这种方法是最难的是因为想要手工实现此过程及其繁琐,需要“免杀”制作人员对汇编和PE结构有较深的了解。说其简单,是因为我们可以用一个很简单的工具实现,这个工具就是大名鼎鼎的MaskPE了,MaskPE中的那个“TYPE 3”选项的意思就是简单添加入口,使用这个选项就可以实现输入表特征码的修改了。尤其是对瑞星的内存查杀,特别有效。这种方法也可以应付多处输入表函数特征码的修改,不过相比于上一种方法,我不是很推荐使用这种方法,因为用这种方法处理后,文件就不容易被其他的方法(如加壳、加花,改特征码)处理了。
下面我给大家写一下常见的免杀套路中的因该注意的细节问题。
1.特征码修改问题:修改特征码的时候因该注意替代语句与原语句的长度问题,因为长度改变了,代码也就整体移位了,这样修改下来的程序多半是不能正常运行。
2.加花过后的修改入口点问题:很多免杀制作者在给源程序加上花指令后习惯用PEditor这个工具修改入口点到新的花指令处。在我读到的那些文章里就有很多作者用这样的方法加花改入口之后就说源程序已经成功免杀,这种情况固然存在,不过可能性很小,因为用PEditor修改过入口点的PE文件会在文件头部留下PEditor的信息,而这些信息往往是各种杀毒软件的特征码,所以一般被PEditor改过入口的程序都不免杀。正确的做法是:在用PEditor改完入口点以后,用WINHEX这个工具将PE头处的PEditor残留信息填充,这个填充信息很好找,是一处ASCII码。
3.花指令不兼容问题:现在很多人喜欢加多花来免杀,而且还自以为大量的花指令可以使程序的免杀效果增强。其实不然,在一定程度上,加多处花指令确实比加单一花指令的免杀效果好,不过在加入大量花指令之前应该考虑所加的花指令是否兼容。加花时往往因为所加的花指令不兼容而导致程序无法正常工作(不过有时也确实“免杀”了)。