Clamav作为一款开源的病毒引擎,能够探测木马、病毒、恶意软件及其它的恶意威胁。

官方地址:http://www.clamav.net/
Github上维护的开源代码:https://github.com/Cisco-Talos/clamav-devel/
官方可以下载最新的开源代码及使用的病毒库。
从下载地址看,现在还支持exe文件的下载及使用,这里就不再做介绍。

安装clamav时,会自动安装sigtool。
Sigtool是一款针对clamav病毒库的读取工具。
查看帮助文档,可以明确各参数的具体使用方法
sigtool --help

                      Clam AntiVirus: Signature Tool 0.100.0
           By The ClamAV Team: https://www.clamav.net/about.html#credits
           (C) 2007-2018 Cisco Systems, Inc.

    sigtool [options]

    --help                 -h              Show this help
    --version              -V              Print version number and exit
    --quiet                                Be quiet, output only error messages
    --debug                                Enable debug messages
    --stdout                               Write to stdout instead of stderr
    --hex-dump                             Convert data from stdin to a hex
                                           string and print it on stdout
    --md5 [FILES]                          Generate MD5 checksum from stdin
                                           or MD5 sigs for FILES
    --sha1 [FILES]                         Generate SHA1 checksum from stdin
                                           or SHA1 sigs for FILES
    --sha256 [FILES]                       Generate SHA256 checksum from stdin
                                           or SHA256 sigs for FILES
    --mdb [FILES]                          Generate .mdb (section hash) sigs
    --imp [FILES]                          Generate .imp (import table hash) sigs
    --html-normalise=FILE                  Create normalised parts of HTML file
    --ascii-normalise=FILE                 Create normalised text file from ascii source
    --utf16-decode=FILE                    Decode UTF16 encoded files
    --info=FILE            -i FILE         Print database information
    --build=NAME [cvd] -b NAME             Build a CVD file
    --max-bad-sigs=NUMBER                  Maximum number of mismatched signatures
                                           When building a CVD. Default: 3000
    --flevel=FLEVEL                        Specify a custom flevel.
                                           Default: 91
    --cvd-version=NUMBER                   Specify the version number to use for
                                           the build. Default is to use the value+1
                                           from the current CVD in --datadir.
                                           If no datafile is found the default
                                           behaviour is to prompt for a version
                                           number, this switch will prevent the
                                           prompt.  NOTE: If a CVD is found in the
                                           --datadir its version+1 is used and
                                           this value is ignored.
    --no-cdiff                             Don't generate .cdiff file
    --unsigned                             Create unsigned database file (.cud)
    --hybrid                               Create a hybrid (standard and bytecode) database file
    --print-certs=FILE                     Print Authenticode details from a PE
    --server=ADDR                          ClamAV Signing Service address
    --datadir=DIR                          Use DIR as default database directory
    --unpack=FILE          -u FILE         Unpack a CVD/CLD file
    --unpack-current=SHORTNAME             Unpack local CVD/CLD into cwd
    --list-sigs[=FILE]     -l[FILE]        List signature names
    --find-sigs=REGEX      -fREGEX         Find signatures matching REGEX
    --decode-sigs                          Decode signatures from stdin
    --test-sigs=DATABASE TARGET_FILE       Test signatures from DATABASE against 
                                           TARGET_FILE
    --vba=FILE                             Extract VBA/Word6 macro code
    --vba-hex=FILE                         Extract Word6 macro code with hex values
    --diff=OLD NEW         -d OLD NEW      Create diff for OLD and NEW CVDs
    --compare=OLD NEW      -c OLD NEW      Show diff between OLD and NEW files in
                                           cdiff format
    --run-cdiff=FILE       -r FILE         Execute update script FILE in cwd
    --verify-cdiff=DIFF CVD/CLD            Verify DIFF against CVD/CLD

下载的病毒库cvd是由zlib压缩库压缩的文件,前512个bytes是一个特殊的头文件,记录引擎病毒库的简单信息,包括名字、创建时间、版本号、签名数量等,然后一个接着一个存储病毒库文件。clamav提供了一个签名工具sigtool,可以查看、生成和解压缩病毒库,在clamav的运行代码中会通过cli_untgz函数解压缩cvd文件,可以通读代码了解详细过程。
几个使用事例:

  1. 查看规则库的详细信息sigtool -i main.cvd
File: main.cvd
Build time: 07 Jun 2017 17:38 -0400
Version: 58
Signatures: 4566249
Functionality level: 60
Builder: sigmgr
MD5: 57462fd73f1cfdb356b9dca66da2b732
Digital signature: KWRdhTG+Own6ohh0wn5+vqg1d8ULKCxxxQeKuSA155B3ijxBKgf+bV3IXPcmZrIBUDn1xi8FmyvB63UieykwN/Avq5mTjHIVO8zFnC7wVF7dhdcEYn9Nt+Pmk/HXXx0voylYkidvgZmrxI8jx4a/Re6n3hHQJoCZrkHM15GER8j
Verification OK.
  1. 使用sigtool –unpack对病毒库文件进行解压缩解压缩出来的文件都是明文,可直接进行查看。对main.cvd进行解压缩后可以看到如下文件:
    COPYING main.crb main.fp main.hdb main.hsb main.info main.mdb main.msb main.ndb main.sfp
  2. 很多人解压缩后想打包回去,sigtool提供了–build参数。生成cvd的过程需要证书,当前只供维护人员使用。因为当前用不到,所以没有深究源码是如何实现的。

针对不一样的文件后缀,库的功能是不一样的。
病毒库签名文件总结如下:

签名文件后缀名签名类型
*.hdb基于md5 hash的签名
*.hsb基于sha1和sha256 hash的签名
*.mdb基于PE section hash的签名
*.dbBody-based的基本签名
*.ndbBody-based的扩展签名
*.ldbBody-based的逻辑签名
*.idbPE文件的图标签名
*.ndbPE文件版本信息元数据签名
.crb, .crtdb信任和撤销的证书签名
*.cdb容器元数据签名
.zmd(zip)和*.rmd(rar)只基于ZIP/RAR元数据的签名
.fp(md5)和.sfp(sha1和sha256)白名单数据库
*.pdb钓鱼url/host签名
*.gdb钓鱼URL hash签名
*.wdb钓鱼URL白名单签名
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐