EICAR测试病毒用于测试反病毒程序的功能.为了将其检测为病毒,
防病毒程序是否应具有测试病毒的病毒定义
要么
启发式检测将其检测为可疑模式并将其检测为病毒.
(我已经看到AV程序在下载时删除文件但没有将病毒识别为EICAR测试病毒的情况.就像一个可疑对象 - >即如果它有定义它应该识别病毒名称,详细信息等Isn'是吗?)
恕我直言,测试病毒的关键是要知道某些事情都是无害的,并被接受为病毒,以便最终用户可以验证AV软件是否已打开,并且可以看到病毒识别的效果.想想防火练习,用于AV软件.
我想大多数都有签名,并直接识别它.
如果实际的EICAR测试的位模式碰巧包含像可疑活动的操作码那样闻到的位模式,我不会感到惊讶,但我不知道是否是这种情况.如果是,那么它可能是一个简单的启发式病毒识别器的有效测试.然而,由于EICAR测试已经存在了很长时间,我还想象任何缓存它的启发式方法都不足以在野外捕获任何东西.
我不希望认识到EICAR证明任何声明强于"安装AV并扫描预期扫描的内容",并且如果开发AV系统,我不会试图对它做出任何更强烈的声明.
更新:
实际的EICAR测试病毒是以下字符串:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
这是精心制作(根据维基百科的文章)有几个有趣的属性.
首先,它仅包含可打印的ASCII字符.它通常会在末尾包含空格和/或换行符,但这对其识别或功能没有影响.
这引发了第二个属性:它实际上是8086 CPU的可执行程序.它可以保存(例如通过记事本)扩展名为.COM的文件,它可以在MSDOS,大多数MSDOS克隆上运行,甚至可以在Windows命令提示符的MSDOS兼容模式下运行(包括在Vista上,但不是在任何64位Windows上,因为他们认为与16位实模式的兼容性不再是优先考虑的事项.)
运行时,它会生成字符串"EICAR-STANDARD-ANTIVIRUS-TEST-FILE!"作为输出.然后退出.
他们为什么要这么努力?显然,研究人员想要一个已知可以安全运行的程序,部分原因是可以测试实时扫描仪而无需捕获真正的病毒并冒着真正的感染风险.他们还希望通过传统和非传统手段轻松分发.由于事实证明x86实模式指令集有一个有用的子集,其中每个字节都满足它也是可打印的ASCII字符的限制,因此它们实现了两个目标.
维基文章链接到程序实际工作方式的详细解释,这也是一个有趣的读物.增加复杂性的事实是,在DOS实模式下打印到控制台或退出程序的唯一方法是发出软件中断指令,其操作码(0xCD)不是可打印的7位ASCII字符.此外,两个中断每个都需要一个字节的立即参数,其中一个需要是空格字符.由于自我强加的规则是不允许空格,程序的所有四个最后字节(字符串中的"H + H*")在指令指针到达之前被修改到位.
在我的XP机器上的命令提示符下使用DEBUG命令反汇编和转储EICAR.COM,我看到:
0C32:0100 58 POP AX 0C32:0101 354F21 XOR AX,214F 0C32:0104 50 PUSH AX 0C32:0105 254041 AND AX,4140 0C32:0108 50 PUSH AX 0C32:0109 5B POP BX 0C32:010A 345C XOR AL,5C 0C32:010C 50 PUSH AX 0C32:010D 5A POP DX 0C32:010E 58 POP AX 0C32:010F 353428 XOR AX,2834 0C32:0112 50 PUSH AX 0C32:0113 5E POP SI 0C32:0114 2937 SUB [BX],SI 0C32:0116 43 INC BX 0C32:0117 43 INC BX 0C32:0118 2937 SUB [BX],SI 0C32:011A 7D24 JGE 0140 0C32:0110 45 49 43 41 EICA 0C32:0120 52 2D 53 54 41 4E 44 41-52 44 2D 41 4E 54 49 56 R-STANDARD-ANTIV 0C32:0130 49 52 55 53 2D 54 45 53-54 2D 46 49 4C 45 21 24 IRUS-TEST-FILE!$ 0C32:0140 48 DEC AX 0C32:0141 2B482A SUB CX,[BX+SI+2A]
执行完指令后JGE 0140
,最后两条指令已被修改为:
0C32:0140 CD21 INT 21 0C32:0142 CD20 INT 20
大多数DOS系统调用都是通过指定要执行的函数INT 21
的AH
或AX
寄存器的值来调度的.在这种情况下,AH
是0x09,这是打印字符串函数,它打印从偏移0x011C开始的字符串,由美元符号终止.(你必须在纯DOS中使用不同的技巧打印一个美元符号.)INT 20
调用在超过该点的任何额外字节可以执行之前终止进程.
自修改代码是早期的病毒技巧,但在这里它用于保留可以在字符串中使用的字节值的限制.在现代系统中,如果在运行COM文件的MSDOS兼容模式下强制执行,则数据执行保护功能可能会捕获修改.