瑞星卡卡安全论坛技术交流区可疑文件交流 上传一个文件被感染前、感染后的样本。 瑞星杀完后不能把带毒文件恢复原样

1   1  /  1  页   跳转

上传一个文件被感染前、感染后的样本。 瑞星杀完后不能把带毒文件恢复原样

上传一个文件被感染前、感染后的样本。 瑞星杀完后不能把带毒文件恢复原样

就是这个屏幕保护程序,被感染后经过瑞星的查杀,清除病毒之后的文件和源文件经过二进制比对发现不匹配。连大小也不同。

用户系统信息:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon)

附件附件:

您所在的用户组无法下载或查看附件

分享到:
gototop
 

回复: 上传一个文件被感染前、感染后的样本。 瑞星杀完后不能把带毒文件恢复原样

基本可以判断,所有差异都是正常的,是理所当然会出现的。这些差异包括:
最后一个区块的VSize、RSive,Characteristics
最后多出了0x1000个字节的内容
并因此影响到PE文件头中的文件映像大小、校验和。

因此不同其实集中在最后一个区块上(正是因为其不同而影响到前面的PE文件头内容)。


差异出现的原因:
感染型病毒感染该文件时,必须要将最后一个区块加大,将自身的病毒代码写入其中,因此以上所提到的部分,都属于病毒必须要修改的内容。
病毒修改的重要内容还包括PE文件头中的入口点偏移,通过这个修改使病毒代码首先获得执行机会。

那么下面说说为什么修复之后最后一个区块的内容没有完全还原。
原因就是在这个文件中,这最后一个区块很特殊,它原来的RSize为0,也就是说它其实是一个不需要初始化为有意义的数据的空间,当程序被加载时,分配给这个区块的0x1000字节空间将被00字节所覆盖(但从编程原则上,你依然必须认为它是未初始化的,可以为任意值)。
感染型病毒在感染时,情况不同了,这个区块必须被加长,必须加入病毒代码。因此,它的RSize必须被加长,那么加长多少呢?
OK,我们来比较一下一个RSive=VSize且不等于0的程序,和一个RSize<VSize且RSize=0的程序有什么不同。

当RSive=VSize且不等于0,病毒代码只需要加在文件后(这里假设没有附加数据),假设病毒代码长度为A,这样RSize和VSize同样增大A
当RSize<VSize且RSize=0,感染后必须保证文件在加载入内存时,开头仍然有原VSize大小的空间,给原程序进行使用,所以在写入病毒代码之前,我们必须先延长文件VSize大小,然后再写入病毒内容。最后,RSive=VSize=原VSize+A


OK,现在轮到杀毒软件修复了
请问,杀毒软件有没有办法区别以上两种情况?没有。由于RSive和VSize都已经被改变了,根本无从知道以前的RSize是否为0。所以,杀毒软件根本无从确认最后一个区块病毒代码之前的内容,到底是文件原来就有的,还是只是在原RSize=0的情况下由病毒在感染时先行补齐的。
所以,杀毒软件只能按照通常的修复方法,即把病毒代码剔除掉,还原入口点,保留前面的内容。
而对于楼主提供的这个程序来说,它就是可以不要的内容(但是要删除它,还是要修改PE文件头区块的内容)

同样的,杀毒软件也无从得知最后一个区块原来的Characteristics是怎么样的,所以这个成员也没有改回原样。

当然,其实杀毒软件还有一些可以做的,如减小最后一个区块的VSize,将之改回0x1000(同时修改映像大小和校验和)。但是,在没有原始文件的情况下,杀毒软件是不可能得知原来的RSize为0,因此不可能自动把后面多出的0x1000字节给删除的。

最后,经过了这样的修复,文件虽与原先不一样,但是一般情况下仍可以正常运行。
当然,如果程序本身带有防止自身被修改的自校验,那就没有办法,这种情况下一旦被感染就已经宣布了不可能完全恢复原状了。

所以一定要记住,杀毒软件修复文件的标准,是在一般情况下使之与原来一样可正常使用,而不是,也不可能保证完全和未被感染前一模一样(因为当文件被感染时,在某些情况已经注定要损失掉以上提到的一些原始信息)。
最后编辑轩辕小聪 最后编辑于 2008-09-23 17:11:56
病毒样本请发到可疑文件交流区
gototop
 
1   1  /  1  页   跳转
页面顶部
Powered by Discuz!NT