最近发现网上有个开源的反病毒软件clamwin,官方地址是http://www.clamwin.com/,下个最新版本试下先。
据介绍这只是个UI壳,用Python/ wxPython写的,其实用的是Clam
AntiVirus engine(http://www.clamav.net/),这个引擎原来是for
unix的,主要用做e-mail防毒,后来被人改成通用的防病毒引擎了。后来又被移植到windows平台上(http://w32.clamav.net/),clamwin用的应该就是这个for
win版本的,下个源代码研究下(http://w32.clamav.net/downloads/clamAVsrc.zip)。
解压后,用Visual Studio
2005打开clamav.sln,解决方案中有几个工程显示找不到,打开后发现打不开的是一些UI工程以及一些插件工程,这些都是辅助工程,暂时可以先不管它。
直接编译解决方案会报很多错误,仔细分析后发现是工程的Additional
Include Directories中填的都是绝对路径:C:\Documents and
Settings\Nigel Horne\My Documents\Visual Studio
2005\Projects\clamAV\,可见这哥们叫Nigel Horne
:),将所有的工程的这个选项都替换成相对路径,或者如果你愿意,就建个那个名字的目录,将所有的源代码都拷到那个目录下,是最方便的。
编译整个解决方案,其它都成功了,只有一个clamAV工程失败,显示在目录release下找不到一些文件,这个工程是个打安装包的工程,忽略它其实无所谓,如果想编译成功一次搞定的话,再去下个clamAV的制作好的二进制版本(http://w32.clamav.net/downloads/clamAV.msi),安装完成后,从安装目录里拷贝那几个文件出来(一共是6个),再重新编译,就可以了。如果想安装一下试试的话,刚才安装的那个得先卸载掉才能行。
先分析一下解决方案本身,发现一共8个工程,其实在编译解决方案的时候,并没有编译shared那个工程,但是用到了shared目录下的代码。而且如果手工编译shared工程的话,发现编译不过,显示预编译头的错误,其实这个工程没有使用预编译头,但是在工程的属性中却显示使用了预编译头,修改一下shared工程属性,不使用预编译头,仍然编译不过,显示error
C2466: cannot allocate an array of constant size
0,查了一下,是C编译器版本的问题,估计是这块那位老兄还没搞定,不管了,反正不影响使用。
其它的工程都依赖于libclamav工程,这是个lib库。以后再分析代码部分,先试一下安装好的东东。一共是5个exe文件:
clamconf.exe:用来显示、配置conf\ clamd.conf
clamd.exe:Clam AntiVirus Daemon,不知道什么东东
clamdscan.exe:ClamAV Daemon Client,不知道什么东东
clamscan.exe:Clam AntiVirus Scanner,这是扫描文件查毒用的
freshclam.exe:这个是从网上更新病毒库的
这些文件都没有UI,需要在CMD命令窗口中运行,可以打一下—help看看帮助。
我们试一下主要的功能:
"c:\program files\clamAV\clamscan"
后面的找个目录试一下,OK,系统正在扫描,一切正常。