Ключевые слова:virus, clamav, compress, rar, (найти похожие документы)
From: McMCC <mcmcc@mail.ru.>
Newsgroups: http://mcmcc.bat.ru
Date: Mon, 20 Sep 2004 18:21:07 +0000 (UTC)
Subject: Clamav и проверка RAR архивов версии 3.
Оригинал: http://mcmcc.bat.ru/clam_rar3.html
Всем известно, что в антивирусную программу clamav встроена проверка RAR архивов
версии 2, однако большенство пользователей используют для создания своих архивов
RAR версии 3 и практически уже никто не использует 2-ю версию, разработчики clamav
не хотят встраивать поддержку 3-ей версии из-за лицензионных разногласий между
новой версией libunrar, со своей более строгой лицензией, и clamav, который
написан под GPL. Пока идут дебаты на тему включать или не включать libunrar
v.3 в clamav, мною была предпринята попытка реализовать эту функциональность
самостоятельно, поэтому далее будет описан процесс, как скрестить libunrar v.3
с последней версией clamav(на данном этапе - 0.80).
В начале нужно собрать и установить последнюю версию libunrar, для этого
идем на ftp://ftp.rarlab.com/rar и скачиваем исходники последней libunrar,
ftp://ftp.rarlab.com/rar/unrarsrc-3.4.3.tar.gz . Что бы собрать libunrar
в нужном нам виде, необходимо наложить этот патч - unrar-3.4.3_fix.patch,
сборку осуществляем как:
make -f makefile.unix lib
Устанавливаем следующим образом:
install -s -D -m 755 libunrar3.so /usr/lib/libunrar3.so
install -D -m 644 dll.hpp /usr/include/libunrar3/dll.hpp
На этом установку libunrar можно считать законченой. Для систем на базе
rpm пакетов, можно скачать готовые rpm'ки:
TAR_BZ2:
libunrar3-3.4.3.tar.bz2
RPMS:
libunrar3-3.4.3-1.i386.rpm
SRPMS:
libunrar3-3.4.3-1.src.rpm
Следущим этапом берем свежий clamav из CVS, http://www.clamav.net/snapshot.html#pagestart,
можно взять мой архив(за 21.10.2004), в котором включены все нужные патчи:
TAR_BZ2:
clamav-0.80-1.mc.tar.bz2
После того, как выкачен свеженький clamav из CVS, нужно наложить этот патч -
clamav-libunrar3.patch, затем обязательно выполнить 3и команды:
aclocal
autoconf
automake
Далее как обычно, конфигурим, собираем и устанавливаем clamav...
Мною подготовлены рабочие rpm пакеты, которые не требуют каких либо
настроек и работать начинают сразу после установки, но в них отсутствует
сборка milter плагина для sendmail'а, при желании ее можно включить,
если будете пересобирать из srpm, для этого в spec файле надо выставить
_without_milter в 0.
RPMS:
clamav-0.80-1.fc1.i386.rpm
clamav-devel-0.80-1.fc1.i386.rpm
SRPMS:
clamav-0.80-1.fc1.src.rpm
После установки rpm пакетов даем следущие команды:
service freshclam start
service clamd start
и на этом можно считать установку законченной...
Теперь немного о том, что сделано:
- Проверка саморасспаковывающихся exe архивов созданных RAR 2/3.x
- Проверка обычных rar архивов созданных RAR 2/3.x
- Непроверяются запароленые архивы, битые, неизвестного формата и
многотомные, им выставляется флаг, что они нормальные:)...
Все архивы, которые касаются данной темы, вы можете скачать отсюда:
http://mcmcc.bat.ru/clamav/
Copyright (C) 2004 McMCC <mcmcc@mail.ru.>
diff -ruN unrar.orig/consio.hpp unrar/consio.hpp
--- unrar.orig/consio.hpp 2004-09-08 17:57:20.000000000 +0400
+++ unrar/consio.hpp 2004-10-22 10:43:08.000000000 +0400
@@ -21,12 +21,16 @@
void OutComment(char *Comment,int Size);
#ifdef SILENT
+/*
inline void mprintf(const char *fmt,const char *a=NULL,const char *b=NULL) {}
inline void eprintf(const char *fmt,const char *a=NULL,const char *b=NULL) {}
inline void mprintf(const char *fmt,int b) {}
inline void eprintf(const char *fmt,int b) {}
inline void mprintf(const char *fmt,const char *a,int b) {}
inline void eprintf(const char *fmt,const char *a,int b) {}
+*/
+inline void mprintf(const char *fmt,...) {}
+inline void eprintf(const char *fmt,...) {}
inline void Alarm() {}
inline void GetPasswordText(char *Str,int MaxLength) {}
inline unsigned int GetKey() {return(0);}
diff -ruN unrar.orig/dll.hpp unrar/dll.hpp
--- unrar.orig/dll.hpp 2004-09-08 17:57:20.000000000 +0400
+++ unrar/dll.hpp 2004-10-22 10:43:08.000000000 +0400
@@ -26,13 +26,13 @@
#define RAR_DLL_VERSION 4
-#ifdef _UNIX
+//#ifdef _UNIX
#define CALLBACK
#define PASCAL
#define LONG long
#define HANDLE void *
#define UINT unsigned int
-#endif
+//#endif
struct RARHeaderData
{
diff -ruN unrar.orig/makefile.unix unrar/makefile.unix
--- unrar.orig/makefile.unix 2004-07-26 11:57:26.000000000 +0400
+++ unrar/makefile.unix 2004-10-22 10:44:09.000000000 +0400
@@ -7,9 +7,10 @@
# Linux using GCC
CXX=g++
-CXXFLAGS=-O2
-DEFINES=-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
+CXXFLAGS=-O2 -fPIC -DPIC
+DEFINES=-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DGUI -DSILENT
STRIP=strip
+RANLIB=ranlib
# Linux using LCC
#CXX=lcc
@@ -114,6 +115,12 @@
$(STRIP) default.sfx
lib: WHAT=RARDLL
-lib: $(OBJECTS) $(LIB_OBJ)
- @rm -f libunrar.so
- $(LINK) -shared -o libunrar.so $(LDFLAGS) $(OBJECTS) $(LIB_OBJ)
+lib: $(OBJECTS) $(LIB_OBJ) $(UNRAR_OBJ)
+ @rm -f libunrar3.so
+ $(LINK) -shared -o libunrar3.so $(LDFLAGS) $(OBJECTS) $(LIB_OBJ) $(UNRAR_OBJ)
+
+liba: WHAT=RARDLL
+liba: $(OBJECTS) $(LIB_OBJ) $(UNRAR_OBJ)
+ @rm -f libunrar3.a
+ $(AR) rc libunrar3.a $(OBJECTS) $(LIB_OBJ) $(UNRAR_OBJ)
+ $(RANLIB) libunrar3.a