个人总结系列开源杀毒软件ClamWin及其引擎ClamAV学习总结Word下载.docx

上传人:wj 文档编号:1449913 上传时间:2023-04-30 格式:DOCX 页数:6 大小:34.92KB
下载 相关 举报
个人总结系列开源杀毒软件ClamWin及其引擎ClamAV学习总结Word下载.docx_第1页
第1页 / 共6页
个人总结系列开源杀毒软件ClamWin及其引擎ClamAV学习总结Word下载.docx_第2页
第2页 / 共6页
个人总结系列开源杀毒软件ClamWin及其引擎ClamAV学习总结Word下载.docx_第3页
第3页 / 共6页
个人总结系列开源杀毒软件ClamWin及其引擎ClamAV学习总结Word下载.docx_第4页
第4页 / 共6页
个人总结系列开源杀毒软件ClamWin及其引擎ClamAV学习总结Word下载.docx_第5页
第5页 / 共6页
个人总结系列开源杀毒软件ClamWin及其引擎ClamAV学习总结Word下载.docx_第6页
第6页 / 共6页
亲,该文档总共6页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

个人总结系列开源杀毒软件ClamWin及其引擎ClamAV学习总结Word下载.docx

《个人总结系列开源杀毒软件ClamWin及其引擎ClamAV学习总结Word下载.docx》由会员分享,可在线阅读,更多相关《个人总结系列开源杀毒软件ClamWin及其引擎ClamAV学习总结Word下载.docx(6页珍藏版)》请在冰点文库上搜索。

个人总结系列开源杀毒软件ClamWin及其引擎ClamAV学习总结Word下载.docx

structcl_node

{

unsignedintmaxpatlen;

/*maximallengthofpatternindb*/

/*扩展的BM算法*/

int*bm_shift;

structcli_bm_patt**bm_suffix;

/*扩展的AC算法*/

structcli_ac_node*ac_root,**ac_nodetable;

unsignedintac_partsigs,ac_nodes;

/*MD5*/

structcli_md5_node**md5_hlist;

};

//BM结构

structcli_bm_patt{

char*pattern,*virname,*offset;

//特征、病毒名、偏移

constchar*viralias;

//别名

unsignedintlength;

//长度

unsignedshorttarget;

//该特征属于的类型

structcli_bm_patt*next;

BM最小特征长度是10个字节。

//AC结构

structcli_ac_patt{

shortint*pattern;

unsignedintlength,mindist,maxdist;

char*virname,*offset;

unsignedshortintsigid,parts,partno,alt,*altn;

unsignedshorttype,target;

char**altc;

structcli_ac_patt*next;

AC算法结构有了一些修改,不过相对检测方面改动不大。

structcli_md5_node{

char*virname,*viralias;

//病毒名/别名

unsignedchar*md5;

unsignedintsize;

//文本长度

structcli_md5_node*next;

2.4.2ClamAV引擎中的主要扫描功能函数

Ÿcli_scanpe:

先是进行PE合法性校验,若遇到入口在不在节内,或小于各个节所在的大小,及一系列非法PE格式文件情况,就都报“Broken.Executable“,然后检测退出。

而后进行壳情况的检测,后面有这块的具体分析说明,在调用相应壳版本验证后,调用脱壳函数,而后进行特征匹配。

Ÿcli_scanmschm:

该函数用来对微软的CHM格式文件进行解码处理。

Ÿcli_scanscrenc:

针对微软的ScriptEncoder脚本加密的解密处理流程,解码后按目录文件方式扫描。

Ÿcli_scan_mydoom_log:

该函数用来处理Worm.Mydoom.M.log,走入该检测流程分支依赖格式识别,返回CL_TYPE_UNKNOWN_DATA类型,显然这样的处理方式并不合理。

ŸScanmanager

所有检测入口函数

Ÿcl_loaddbdir

加载本地所有格式病毒库到内存

Ÿcl_build

构建扫描引擎

Ÿcl_scandesc

扫描分析

Ÿcli_loaddb

加载*.db,*.db2,*.db3,*.Mdb等格式的病毒库

Ÿcli_parse_add

添加病毒库特征到结构

Ÿcli_ac_addsig

添加特征到AC算法结构

Ÿcli_bm_addpatt

添加特征到BM算法结构

2.4.3ClamAV引擎宏观结构说明

从v0.15–v.093,ClamAV引擎的整体上一直都保持统一的风格,不断增加的仅是内部功能更加细致的分类,与一些重要数据结构的增加和修改或相应算法的修正。

当然就引擎调用来看ClamAV较为简单,这方面没有什么变化,引擎所处的环境也始终是以文件或目录为单位输入的情况,不涉及网络部分。

对ClamAV引擎归纳来说有2个特点:

一、通过配置信息指明检测目标;

二、靠流程来驱动检测。

Clamav专门为配置信息的处理写了一个管理结构,通过链表把它们存储起来。

当引擎检测处于众多分支当中时,利用检测配置可选择其中一个多或做个进行检测,这些配置有些是为了调试,有些是为了设置检测粒度,如解压缩层数,扫描文件大小限定等。

对于第2个特点,ClamAV并没有一个十分清晰的检测调度函数。

更多是靠很多小的检测流程聚合而成,依靠顺序调度来完成检测。

而很多新加入的函数为了能顺利加入的检测行列中来,而带了很多个参数(为了兼容该函数所在上下文的调度环境)最多的达到了11个参数,这样当外部大量调用该流程函数时,多参数的循环入栈,特别是涉及目录、解压等需要递归操作时,该方式对效率影响估计会比明显。

从整体上看,ClamAV引擎工作流程是:

图2-1ClamAV引擎工作流程图

Ÿ先获取检测配置

Ÿ进行病毒库加载,因为库是压缩的,所以先创建一个临时目录用释放解压后的库文件,MD5和BM的库记录会在测试加载完毕,AC算法的库在此时仅是添加到结构当中,因为该算法还要涉及调整内部记录的病毒特征的指针,同时也初始化了一个动态配置结构。

Ÿ构建引擎,至少从函数名字上看是这样,但实际上该步骤仅是调整AC算法的内部记录的特征的指针,保留该步骤应该是历史版本遗留下来的问题。

Ÿ再次进行配置信息的获得,包括扫描文件的最大值,解压缩的比率,是否检测PE,是否开启算法扫描等等。

之所以分两次获取,可能是配置本身过于复杂耗时,如果步骤3失败,则直接退出,没必要开始时初始所以配置信息。

Ÿ对扫描对象的按目录和文件进行分类处理,当处理的对象是目录时,遍历后仍然按单个文件方式处理。

Ÿ对单独的文件,ClamAV会检测一些是否有和配置信息不符的情况,如解包的递归层数,在超出了给条件的情况下,会报告“Archive.ExceededRecursionLimit”病毒,而后进行格式识别,依据格式识别的返回结果调用不同的处理函数进行库匹配。

Ÿ最为关键的是第6步,前几个步骤都是为最后一步扫描构建基础环境,在检测中最为关键的是cli_scanpe函数,该函数长达2000多行代码。

从v0.93版中看更加细致的验证PE文件的合法性的操作,在验证通过后才会进入算法扫描(主要用于检测多态病毒)、壳识别、脱壳、普通文件扫描的流程。

但该处理过程没有太清晰的处理逻辑,效率控制也不是太好,从v0.80到v0.93这些处理方式上看,作者并没有试图改变这样处理方案,可以预测以后的版本如果要加入新的病毒检测方案,仍然会强行加入到该函数中。

从可借鉴的角度看,该引擎的部分库格式,与有针对性的文件格式解析都是可以考虑利用的,配置信息的管理,丰富的引擎调试的信息等方式也都很有意义。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2