当前位置:  开发笔记 > 开发工具 > 正文

防病毒程序如何检测EICAR测试病毒?

如何解决《防病毒程序如何检测EICAR测试病毒?》经验,为你挑选了1个好方法。

EICAR测试病毒用于测试反病毒程序的功能.为了将其检测为病毒,

防病毒程序是否应具有测试病毒的病毒定义

要么

启发式检测将其检测为可疑模式并将其检测为病毒.

(我已经看到AV程序在下载时删除文件但没有将病毒识别为EICAR测试病毒的情况.就像一个可疑对象 - >即如果它有定义它应该识别病毒名称,详细信息等Isn'是吗?)



1> RBerteig..:

恕我直言,测试病毒的关键是要知道某些事情都是无害的,并被接受为病毒,以便最终用户可以验证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 21AHAX寄存器的值来调度的.在这种情况下,AH是0x09,这是打印字符串函数,它打印从偏移0x011C开始的字符串,由美元符号终止.(你必须在纯DOS中使用不同的技巧打印一个美元符号.)INT 20调用在超过该点的任何额外字节可以执行之前终止进程.

自修改代码是早期的病毒技巧,但在这里它用于保留可以在字符串中使用的字节值的限制.在现代系统中,如果在运行COM文件的MSDOS兼容模式下强制执行,则数据执行保护功能可能会捕获修改.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有