一、现象分析
在分析样本时,发现图标类恶意程序还是比较常见的,比如伪装成JPG、DOC文件的病毒,基本的特征都是把图标替换为Windows默认的图标,病毒运行后释放文件并显示,然后在后台运行恶意代码。下图是一个典型的伪装成Word文档的病毒文件,运行后释放一个doc文件并打开:
出于好奇心,使用金山毒霸和瑞星测试了一下,发现都可以对其进行查杀,金山毒霸报“云启发病毒”,而瑞星则报“FakeDOC”,如下图所示:
对于这两款软件的检测机制很是好奇,所以我使用了其他普通图标替换了病毒的WORD图标,再次扫描,静态扫描都不报毒,而且执行起来也不会存在任何提示,看来,不过就是对图标进行了检测而已,真正的代码逻辑没有任何检测。
二、图标免杀处理
能不能对图标进行一下处理,来绕过杀毒软件的检测呢?只有想不到,没有做不到。既然查杀点在图标,那么尝试对图标上的像素点进行处理,是不是就可以绕过了呢?
随便找个ico图标编辑器,将word图标上的部分像素点涂成其他颜色,再测试一下,依然被杀。那就继续处理像素点,测试继续被杀,一直涂到图标都面目全非了,才逃过了检测。但这个姿势肯定不对,人眼都能看出图标有问题来了,这时候才能绕过杀软检测已经没有意义了。
为何杀毒软件这么牛逼?想着在对比两个图片的时候,经常使用StegSolve进行XOR操作,那么如果将两个图标进行XOR操作,差异就显而易见了。比如,下面两个Word图标进行XOR操作之后,从得到的结果中可以看出相似度还是极高的:
这里处理的图标是48*48像素的,第二个ico图标涂掉了32个像素点,那么相似度计算:1 – 8*4/(48*48) = 98.6%,想想还是挺高的,怪不得杀得那么厉害。
可以这么认为,如果图标像素的相似度达到某一个阈值,就认为是病毒。在检测条件十分严格的情况下,只有把图标改的面目全非时,才可以绕过杀毒软件的检测;但是这个时候,图标已经可以明显的人肉眼分辨了。
现在的目标:
- 杀软认为完全不一样;
- 人眼认为基本上一样;
这个目标当然很容易实现!打乱所有坐标点的RGB值,这样当绝大部分的像素点的RGB值都不一样了,不超过阈值就会认为是正常的图标了。至于人眼就更容易忽悠了,把整个坐标系移动一个像素点即可。
在下图中,左侧图标为原始图标,右侧图标在左侧图标的基础上向上和向左均移动一个像素点,保存之后人眼基本分辨不出来二者的区别,但是对于杀毒软件而言已经是两个完全不同的图标了。
将样本的图标替换为处理后的图标,扫描测试,发现金山毒霸和瑞星都不吭声了,有图有真相:
对于其他的图标,可以采用同样的方案进行处理。