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