_ _ (_) | | __ ____ __ _ _ _ _ __ ___ _ __ _ __ ___ | |_ \ \ / /\ \/ /| || | | || '_ ` _ \ | '_ \ | '_ \ / _ \| __| \ V / > < | || |_| || | | | | || |_) |_ | | | || __/| |_ \_/ /_/\_\| | \__,_||_| |_| |_|| .__/(_)|_| |_| \___| \__| _/ | | | |__/ |_| /---------------------------------------------------------------------------------------\ |>...................[ Clam AV引擎分析v0.20 ~ 0.51版 ]..................<| |>......................[ by nEINEI/vxjump.net ]......................<| |>......................[ 2008-01-16 ]......................<| \>...................... [ neineit@gmail.com ] ...................... |Node-->next| ... ------- \|/ ------------ | Node->next | ... ------------ \|/ ------------ | Node->next | ... ------------ \|/ ------------ | Node->next | ... ------------ \|/ -------------------- | Node(islast = 1) | ... -------------------- 该图仅是一条特征加入时的情况,匹配时比较复杂不容易画出图形。 匹配算法时间复杂的小于(n)2,对于待检测数据仍然是单字节匹配,但库特征被处理后,检索时匹配的特征条数明显减少。 [0x03] v0.20加载库形式 此处无变化。 文本文件DecodeDB,格式如下: Virusname = signature Virusname = signature Virusname = signature Virusname = signature … [0x04] v0.20检测流程特点 与上一版基本一直。 [0x05] v0.20内存管理方面 与上一版一致。 [0x06].v0.51库结构 新增了一种库存储方式,特征结构发生了,要求特征最小长度为2字节。 struct patt { char *pattern; unsigned int length; char *virname; unsigned int sigid, parts, partno; //新增加字段,用于支持新加如特征结构 struct patt *next; }; 其中, sigid --- 多段特征id(在整个特征库中,从0开始算起) parts --- 在本条多段特征中包含的段数 partno --- 在本条多段特征中所处段编号 加载库时,每次读取库文件128K字节分批次解析。 每次读取文件16k大小进行匹配,若成功则跳出检测。 说明: 前5个字节做分层散列,利用分配好的库结构进行跳转。 优点: 与v0.15版比较改进了匹配算法。 缺点: 生成匹配算法结构时,十分繁琐,内存空间占用较大,可能会造成加载库速度慢。 匹配算法时间复杂的小于(n)2,对于待检测数据仍然是单字节匹配,但库特征被处理后,检索时匹配的特征条数明显减少 [0x07].v0.51加载库形式 此处无变化。 文本文件DecodeDB,格式如下: Virusname = signature Virusname = signature Virusname = signature Virusname = signature [0x08].v0.51检测流程特点 和上一版基本一直。 [0x09].v0.51内存管理方面 与上一版一致。 [0x10]总结: 1 本版使用了BM算法,是哪个库? 仍然是用viruses.db 这个库,格式无变换,全部采用一种算法。 2 库中特征如何定义每个类型? 目前的库还不区分特征是何种类型。 3 如何方便的,或者批量添加 和删除特征 ? 因为目前viruses.db库方式简单,采用尾部添加即可,删除则要查找MD5值,然后删除该条目。 4 支持清除感染病毒么,如何处理的? 该版本不支持。 参考文献: [1] clam av 0.20,0.51 src. thanks killer,一起讨论研究引擎设计及提出若干问题。