更新病毒碼(trend)


作者:cschen33@pchome.com.tw
更新日期:2004/03/31-2004/08/11
  在企業體中常會購買單機的防毒軟體給一般電腦使用,可是如果沒有買企業版的時候,在更新病毒碼時,常會有一些問題,經統計不到3分之1的使用者會正確使用 防毒軟體,尢其是更新病毒碼部份,雖然我們可以使用預約的功能來更新,但是如果公司組織比較大時每天可能同時有數十台電腦需要更新,可能會造成一時頻寬過 窄的問題,因此我想簡化為一台向外更新,其它內部使用區域網路來複製更 新,但一台如 何向外更 新?,這跟你買的防毒軟體有關了,以下我將討論更新趨勢防毒程式的病毒碼,因為版本的不同所以會有所不同,在使用本程式時請加以修改為你的版本需求。
本程式只是簡化it人員的工作,目前我的server已經順利執行更新病毒碼的工作

自己寫一個有點難,因此我參考別人 的程式
以下是一個linux郵件過濾程式 MailScanner(www.mailscanner.info),其中有一些關於更新病毒碼的程式,包含了下述的防毒程式,你可以找到trend
# sophos    from www.sophos.com, or
# sophossavi (also from www.sophos.com, using the SAVI perl module), or
# mcafee    from www.mcafee.com, or
# command   from www.command.co.uk, or
# drweb     from www.dials.ru/english/dsav_toolkit/drwebunix.htm, or
# kaspersky-4.5 from www.kaspersky.com, or
# kaspersky from www.kaspersky.com, or
# kavdaemonclient from www.kaspersky.com, or
# etrust    from http://www3.ca.com/Solutions/Product.asp?ID=156, or
# inoculate from www.cai.com/products/inoculateit.htm, or
# inoculan  from ftp.ca.com/pub/getbbs/linux.eng/inoctar.LINUX.Z, or
# nod32     from www.nod32.com, or
# nod32-1.99 from www.nod32.com, or
# f-secure  from www.f-secure.com, or
# f-prot    from www.f-prot.com, or
# panda     from www.pandasoftware.com, or
# rav       from www.ravantivirus.com, or
# antivir   from www.antivir.de, or
# clamav    from www.clamav.net, or
# clamavmodule (also from www.clamav.net using the ClamAV perl module), or
# trend     from www.trendmicro.com, or
# norman    from www.norman.de, or


查詢程式所在
rpm -ql mailscanner | grep trend
/usr/lib/MailScanner/trend-autoupdate
分析程式內容,我們可以得到下面的結論:
  1. 取得目前病毒碼最後版本資訊-病毒碼的資訊檔 ftp.antivirus.com/products/pattern/opr.ini
  2. 比對本機病毒碼及最新病毒碼
       1.已經是最新-停止
       2.需要更新
         下載病毒碼
         解壓縮
         複製檔案到所要分享的目錄
         刪除舊的病毒碼
  3. 其它client端會複製更新,並刪除檔案,原理同上
      如果你懶的寫程式下面是最簡單的批次檔
      delete 你安裝防毒軟體的目錄/lpt*.* /yes
      copy 上述分享病毒碼的目錄/lpt*.* 你安裝的防毒軟體的目錄 /yes
  4. 因應別人要求email通知,我使用類似下面指令echo -e "message" | mail -s "subject" email-address


#檔案中PatternVersion=??? v?? -???為版本
我將其改寫如下
其中病毒碼的目錄放在$work_dir下,你可以依據你的 要求變更路徑
並將本程式放置於/etc/cron.daily,則每天會更新一次病毒碼
亦可在/etc/cron.d下建立自己的時間管理
程式如下:
2004/03/31新增email通知(藍色部份)
#!/bin/sh

# Trend Autoupdate Script.
# V0.1 Dan Bird. dbird@sghms.ac.uk
# 12/08/2003

OPRINI=opr.ini.$$
export OPRINI

#Email notify when update
#Email_notify=1 enable email notify otherwise Email_notiyf=0 to turn it off
Email_notify=1

notify_email="your email address"
notify_time=`date +%Y-%m-%d-%H:%M`
notify_message="Trend virus code has been update at $notify_time"
notify_subject='Update Trend notify'

# source of IScan dat files
FTPSERV="ftp://ftp.antivirus.com/products/pattern/"

# work directory
work_dir="/home/samba/vol1/update_v/trend"

# Get the info on new version...
echo "Checking for latest DAT version..."
wget -q -O /tmp/$OPRINI $FTPSERV/opr.ini
#NEWVER=`grep PatternVersion /tmp/opr.ini.$$ | sed s/^PatternVersion=//g | cut -c 1-3`
#2004/08/11修正-PatternVersion 為PatternVersion=,因為多了一個PatternVersionN
NEWVER=`grep "PatternVersion=" /tmp/opr.ini.$$ | sed s/^PatternVersion=//g | cut -c 1-3`
# 目前的版本所在?
CURRENTVER=`ls $work_dir/* | grep lpt | tail -1 |  cut -d. -f 2`


if [ "$CURRENTVER" = "" ]
then
        CURRENTVER=0
fi
echo "Current version is : $CURRENTVER"

fail () {
        trap EXIT
        echo "Test run failed -- removing bad Trend data files"
        echo "$OUT"
        rm -rf $work_dir/lpt*$NEWVER*
        exit 1
}

# If our current one is older, download the new one!!!
if [ $CURRENTVER -lt $NEWVER ]
then
        echo "Getting new DAT version : $NEWVER"
        wget -q -P /tmp  $FTPSERV/lpt$NEWVER.zip
        printf "Testing file for corruption...."

        DATCHECK=`unzip -o -t /tmp/lpt$NEWVER.zip | grep "No errors"`

        if [ "$DATCHECK" != "" ]
        then
                echo "OK"
                rm -f $work_dir/lpt*.*
                mv /tmp/lpt$NEWVER.zip $work_dir
                printf "installing...."
                cd $work_dir
                unzip -q -o lpt$NEWVER.zip
                echo "DONE"
                rm -f /tmp/*.zip
                rm -f $work_dir/*.zip
                rm -f $work_dir/*.TXT
                rm -f $work_dir/*.txt
                if [$email_notify=1]
                then
                   notify_message="$notify_messsage \nVersion=lpt$NEWVER.zip"
                   echo -e $notify_message | mail -s "$notify_subject" $notify_email
                fi

        else
                echo "BAD ARCHIVE"
        fi

else
        echo "DAT files are upto date"
fi
rm -f /tmp/$OPRINI


client端的程式
  1. 使用批次檔

  2. win98的client端是使用網域登入
    在netlogon建立一個登錄檔
    logon.bat 內容為:
    delete c:\progra~1\trendp~1\lpt*.*  /yes
    copy \\smb\vol1\update_v\lp*.* c:\progra~1\trendp~1\ /yes)
    其中目地路徑改成你使用的版本路徑
    win2000,xp則使用排程來更新,檔案內容同上
  3. 使用免費autoit的程式

  4. 請到google上尋找並下載及安裝
    以下是程式碼內容是我所撰寫來複製檔案到trend的目錄
if NOT FileExists(@ScriptDir&"\"&@computername&".txt") Then
   $path=RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\TRENDMICRO\PC-CILLIN","Application Path")
   if $path then
      filedelete($path&"lpt*.*")
      filecopy(@ScriptDir&"\"&"lpt*.*",$path)
      FileOpen(@ScriptDir&"\"&@computername&".txt",2)
   endif
endif
exit

    我成功的測試在2003的版本,本程式的功能比批次檔強多來,可讀性也高多了
    1.檢查是否有本機器的檔案"電腦名稱.txt",如果有執行下面
    2.讀取登錄檔中防毒程式所在路徑
    3.刪除舊的病毒碼lpt*.*
    4.複製新的病毒碼到應用程式的目錄
    5.建立"電腦名稱.txt"到本程式所在的地方,代表已經更新完畢了

上述程式並非及時更新,因此必須重新開機,其病毒碼才可以更新,而autoit的程式編譯完成後,請放置於$work_dir的目錄內,然後執行該程式就可以了