一、clamav-0.100.1的整体的目录如下:

|-Clamav-milter|-Clambc|-Clamconf|-Clamdscan|-Clamdtop|-Clamscan|-Clamsubmit|-Config|-Database|-Docs|-Etc|-Examples|-Freshclam|-Libclamav     //重要目录|-7z|-c++|-jsparse|-libmspack-0.5alpha|-lzw|-nsis|-regex|-tomsfastmath|-Libclamunrar  //关于解压缩文件的|-Libclamunrar_iface  //同上|-Libfreshclam|-Libltdl   //This is GNU libltdl, a system independent dlopen wrapper for GNU libtool.|-M4|-Shared|-Sigtool|-Test|-Unit_tests|-Win321.1 libclamav中的文件列表(关于具体后缀名的相关api处理有的比较难理解,这里没有往下测试):|-7z-iface.c   //7z压缩文件的相关api|-adc.c       //adc后缀文件的相关api|-apm.c       //apm后缀文件的相关api|-arc4.c|-asn1.c      |-aspack.c|-autoit.c   //编辑器产生的默认后缀?|-binhex.c   |-blob.c|->fileblobScan(const fileblob *fb)|->cli_matchmeta()|->cli_magic_scandesc()   //此函数在其他的后缀名文件中也出现过|->cli_base_scandesc()  //定义在scanners.c中|->magic_scandesc()  //具体的调用都在这个函数中|-bytecode.c                 //Load, and verify ClamAV bytecode.|-bytecode_api.c|-bytecode_api_decl.c|-bytecode_detect.c|-bytecode_nojit.c|-bytecode_vm.c|-cache.c|-conv.c|-cpio.c|-crtmgr.c|-crypto.c|-cvd.c|-dconf.c|-disasm.c|-dlp.c|-dmg.c|-dsig.c|-elf.c|-entconv.c|-events.c|-explode.c|-filetypes.c    //其中列举了一些文件类型放在ftmap[]结构体中|-filtering.c|-fmap.c|-fpu.c|-fsg.c|-gpt.c|-hashtab.c|-hfsplus.c|-hostid.c|-htmlnorm.c|-hwp.c|-inflate64.c|-iowrap.c|-ishield.c|-iso9669.c|-is_tar.c|-jpeg.c|-json_api.c|-libmspack.c|-line.c|-lzma_iface.c|-macho.c|-matcher-ac.c|-matcher-bm.c|-matcher-hash.c|-matcher-pcre.c|-matcher.c   //这里仅列举一下文件所包含的函数名|-cli_scanbuf()|-cli_scandesc()|-cli_fmap_scandesc()|-cli_exp_eval()|-cli_caloff()|-cli_checkfp()|-cli_checkfp_virus()|-cli_matchmeta()|-void cli_targetinfo()|-mbox.c|-mbr.c|-message.c|-mew.c|-mpool.c|-msdoc.c|-msexpand.c|-msxml.c|-msxml_parser.c|-ole2_extract.c|-ooxml.c|-openioc.c|-others.c|-packlibs.c|-pdf.c|-pdfdecode.c|-pdfng.c|-pe.c|-perflogging.c|-petite.c|-pe_icons.c|-phishcheck.c|-phish_domaincheck_db.c|-phish_whitelist.c|-png.c|-prtn_intxn.c|-qsort.c|-readdb.c|-rebuildpe.c|-regex_list.c|-regex_pcre.c|-regex_suffix.c|-rijndael.c|-rtf.c|-scanners.c|-sf_base64decode.c|-sis.c|-special.c|-spin.c|-stats.c|-stats_json.c|-str.c|-strlcat.c|-swf.c|-table.c|-text.c|-textdet.c|-textnorm.c|-tiff.c|-unarj.c|-uniq.c|-unsp.c|-untar.c|-unzip.c|-upack.c|-upx.c|-uuencode.c|-vba_extract.c|-version.c|-wwunpack.c|-www.c|-xar.c|-xdp.c|-xz_iface.c|-yara_arena.c|-yara_compiler.c|-yara_exec.c|-yara_grammar.y  //yara规则文件后缀|-yara_hash.c|-yara_lexer.c|-yara_parser.c   //yara的github地址:https://github.com/VirusTotal/yara,|-yc.c

1.2 yara的相关使用
     参考链接:https://blog.csdn.net/m0_37552052/article/details/79012453
二、安装及测试
   2.1 参考链接:

https://github.com/Cisco-Talos/clamav-faq/blob/master/manual/Installation_guide-ClamAV%200.99.2%2B_rhel%26centos.md
  按照文档中的步骤,最终的成功截图如下:

2.2 clamav的官方pdf文档介绍

链接: https://github.com/Cisco-Talos/clamav-faq/blob/master/manual/clamdoc.pdf

2.3 libclamav库API提供了病毒扫描的各种函数接口。libclamav库使用的是病毒扫描法。从病毒中提取的特征字符串被用一定的格式组织在一起并加上签名保护就形成了病毒库,clamav使用的病毒库一般后缀为.cvd文件。

2.3.1 在使用libclamav之前,必须调用cl_init()函数来初始化,初始化成功以后,可以调用cl_engine_new()函数来创建一个新的扫描引擎。扫描结束以后,需要调用cl_engine_free()这个函数来释放这个引擎结构。截图如下(可以参考examples/ex1.c文件):

上述三个函数的原型如下:

int cl_init(unsigned int options);
struct cl_engine *cl_engine_new(void);
int cl_engine_free(struct cl_engine *engine);

cl_init()和cl_engine_free()两个函数如果调用成功,将返回CL_SUCCESS,如果返回其他code,说明函数调用失败。

cl_init函数的实参传入CL_INIT_DEFAULT即可。

cl_engine_new()如果调用成功将返回一个指向struct cl_engine结构体的指针,如果失败将返回NULL.

2.3.2 得到新的扫描引擎以后,需要进行特征库的加载,clamav提供了两个函数:

const char *cl_retdbdir(void);
int cl_load(const char *path, struct cl_engine *engine,unsigned int *signo, unsigned int options);

cl_retdbdir返回CLamav特征库的默认路径。

cl_load函数根据给出的具体特征库路径,加载单个特征文件,或者加载几个特征文件(给出的实参是文件夹)。第二个参数传入cl_engine_new得到的engine,第三个参数传入加载的特征码的条数,最后一个参数为加载的选项,一般传入CL_DB_STDOPT即可。

2.3.3 以上的步骤完成以后,需要调用cl_engine_compile()函数做最后的文件扫描前的准备,函数原型为:

int cl_engine_compile(struct cl_engine *engine);

2.3.4 现在可以扫描文件了

函数的原型为:

|->int cl_scanfile(const char *filename, const char **virname, unsigned long int *scanned, const struct cl_engine *engine,unsigned int options);|->cl_scandesc_callback()|->scan_common()|->cli_map_scandesc()    //for map scans that are not forced to disk|->cli_mem_scandesc()     |->cli_map_scan()|->cli_base_scandesc(fd, ctx, type); //多处调用了此函数,库函数中的重要函数|->magic_scandesc(ctx, type); //此函数中处理各种不同接口函数,不再往下分析

该函数需要注意的一点是,virname在函数中指向了engine结构体的表示目标扫描文件名称的内存,不能被直接释放。

三、相关链接

链接:http://outstandingcandy.blog.163.com/blog/static/1627591192010101962351249/

上面链接主要是分析了clamav代码。

clamav程序的研究总结相关推荐

  1. 单片机 解释型 c语言脚本,解释型单片机应用程序的研究.pdf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp学术论文&nbsp>&nbsp自然科学论文 解释型单片机应用程序的研究.pdf5页 本文档一 ...

  2. 一个程序详细研究DataReader(转)

    //*********************************************************** //*名称:一个程序详细研究DataReader,同时显示Command用法 ...

  3. 并发型服务器响应方式,基于Java NIO 开发高性能并发型服务器程序的研究

    基于Java NIO 开发高性能并发型服务器程序的研究 第8卷%第5期 软件导刊 2009年5月SoftwareGuide Vol.8No.5May.2009 基于JavaNIO开发高性能并发型服务器 ...

  4. 全功能智能车之暂时放弃PC端程序的研究(第十篇)

    唉,PC端的程序太过于杂乱,有很多不同的平台,有不同的语言,有不同的设备,非是我这个半路出家的人所深入的,再之,本人觉得还是做和自己相近的专业比较好,我是做嵌入式的,所以这样以后的上位机我就用安卓来做 ...

  5. [转载]优化ASP.NET应用程序性能研究与探讨

    文章来源:Internet 网站的性能对于ASP.NET程序开发人员来说非常重要.一个优秀的网站虽然有美观的页面设计,完善的服务功能,但是打开网页时有长时间的延迟,用户最终将会无法忍受.尤其对于大型的 ...

  6. KEIL-51单片机实现自定义bootloader,用于程序更新 研究

    本文原创作者: 少占鱼大神 关于8051的bootloader实现方式 一, 基本硬件需求 要实现IAP功能,需要51单片机可以在程序里修改代码空间的Flash,或者至少可以修改用户程序区的Flash ...

  7. CRC校验实现原理以及程序实现研究

    在学习mdobus过程中,曾遇到过CRC校验,之前一直不是很明白其原理,现在利用一点闲暇时间学习下. 不同别的校验方式,想弄明白CRC校验的原理以及程序实现过程还真得有点耐心,琢磨一下数学公式. 1. ...

  8. matlab气泡图程序,绘图研究的分类气泡图

    如何使用类似于系统测绘研究中使用的GNU R创建一个分类气泡图(见下文)? 编辑:好的,这是我到目前为止所尝试过的.首先,我的数据集(Var1到x轴,Var2转到y轴): > grid Var1 ...

  9. 优化ASP.NET应用程序性能研究与探讨

    http://tech.sina.com.cn/s/2005-02-24/0921534105.shtml http://msdn.microsoft.com/msdnmag/issues/05/01 ...

最新文章

  1. CSS中的超链接和超链接分类
  2. IROS 2020 | 跨视角语义分割前沿进展
  3. 设计模式复习-模板方法模式
  4. Linq to SQL Dynamic 动态查询
  5. Spring Remoting: HTTP Invoker--转
  6. RabbitMQ指南(上)
  7. db:migrate
  8. [html] 你知道微信端的浏览器内核是什么吗?
  9. 吴恩达新书手稿完工,现在开放免费下载 | 资源
  10. 从C# 3.0说以人为本(二)—— LINQ语法结构
  11. OPIE(火狐扩展)-导入导出firefox扩展的所有设置
  12. QCC3020/QCC3040 TWS耳机按键切换EQ,APP切换EQ功能实现
  13. 关于 ADXL362 传感器不工作的说明
  14. Python机器视觉--OpenCV进阶(核心)-边缘检测之SIFT关键点检测
  15. 向量叉积和点积混合运算_matlab中的向量的数量积和向量积
  16. 英语单词听力测试软件,英语单词发音软件
  17. word打开文档很久很慢_word文档打开速度慢的几个原因和解决方法
  18. VUE基础用法(四)
  19. 敏涵化妆品何以圈粉Z世代消费群体?
  20. soot基础 -- soot 中的处理阶段

热门文章

  1. intellij idea -- 工程移植
  2. 23行代码AC_2017 蓝桥杯A组 正则问题(解题报告)
  3. java转文件编码bom_编码转换:UTF-8 BOM to GBK
  4. 设置vmware vsphere web client_Arduino+前端高级应用-通过WEB网页控制Arduino开发板上的LED灯...
  5. 笔记本电脑打开后不显示桌面_宝骏630打开空调开关后压缩机不工作 - 汽车空调...
  6. 华为S5700系列交换机配置文件导出、导入
  7. 等级考试文件服务器,内核级 Samba 文件共享服务器 CIFSD 正式开始测试
  8. python中乘法和除法_python – NumPy的性能:uint8对比浮动和乘法与除法?
  9. xp精简工具_Windows10你也可以精简优化,丝滑般极爽轻松做到,再也不卡了
  10. Ubuntu12.04 root用户登录设置