Только он выбрал еще нелепее дорогу. Он сделал антиврус непонятно как и нифига не работающий.
В общем, сижу я на работе и знакомлюс с абжем по статьям в сети. И тут до меня доходит, что я тоже могу стать "непризнанным гением" (спасибо комментатору с местного информационного ресурса), сделав свой антивирус, который в отличии от продукта, заворившего шумиху, должен хоть как-то работать.
Выбор платформы исполнения очевиден - BASH.
Ну собственно и сам антивирус:
Код: Выделить всё
$ cat my-gnu-av.sh
#!/bin/bash
# My GNU AntiVirus
# GNU GPLv3
# v 0.02
declare -a VirusDB
LOGFILE=/var/log/mygnuav.log
if [ "$1" != "" ]
then
SCANPATH=$1
else
SCANPATH="/home"
fi
vdbk="$(zcat /etc/My-GNU_AV/db.dat | grep "Known viruses:" | awk -F': ' '{print $2}')"
ind=0
for line in `zcat /etc/My-GNU_AV/db.dat | grep -v "#" | grep -v "Known viruses:" | awk -F' //' '{print $1}'`
do
if [ "$line" != "" ]
then
if [ "$ind" -lt "$vbdk" ]
then
templine="$(echo $line | awk -F' | ' '{print $1}')"
VirusDB[$ind]=$templine
tempind=$((vdbk+ind))
templine="$(echo $line | awk -F' | ' '{print $2}')"
VirusDB[$tempind]=$templine
tempind=$((2*vdbk+ind))
templine="$(echo $line | awk -F' | ' '{print $3}')"
VirusDB[$tempind]=$templine
tempind=$((3*vdbk+ind))
templine="$(echo $line | awk -F' | ' '{print $4}')"
VirusDB[$tempind]=$templine
tempind=$((4*vdbk+ind))
templine="$(echo $line | awk -F' | ' '{print $5}')"
VirusDB[$tempind]=$templine
else
echo "Error of Virus DB"
fi
ind=$[$ind+1]
fi
done
find $SCANPATH -type f | while read i
do
BSN=$(basename $i)
FSNM=$(du -b $i | awk -F' ' '{print $1}')
MD5S=$(md5sum $i | awk -F' ' '{print $1}')
ind=0
while [ "$ind" -lt "$vdbk" ]
do
if [ "$MD5S" == "${VirusDB[$ind]}" ]
then
SHA1S=$(sha1sum $i | awk -F' ' '{print $1}')
tempind=$((vdbk+ind))
if [ "$SHA1S" == "${VirusDB[$tempind]}" ]
then
tempind=$((2*vdbk+ind))
if [ "$FSNM" == "${VirusDB[$tempind]}" ]
then
tempind=$((4*vdbk+ind))
if [ "${VirusDB[$tempind]}" == "rekeep" ]
then
dd if=/dev/zero of=$i bs=1 count=$FSNM
echo $(date +%Y.%m.%d ; date +%H:%M:%S) " " "Infected file: " $i " by virus " ${VirusDB[$tempind]} >> $LOGFILE
else
tempind=$((3*vdbk+ind))
rm -rf $i
echo $(date +%Y.%m.%d ; date +%H:%M:%S) " " "Infected file: " $i " by virus " ${VirusDB[$tempind]} >> $LOGFILE
fi
else
echo $(date +%Y.%m.%d ; date +%H:%M:%S) " " "Double danger file: " $i >> $LOGFILE
fi
fi
else
tempind=$((3*vdbk+ind))
if [ "$BSN" -eq "${VirusDB[$tempind]}" ]
then
echo $(date +%Y.%m.%d ; date +%H:%M:%S) " " "Danger file: " $i >> $LOGFILE
fi
fi
let "ind = $ind +1"
done
done
exit 0
По идее это должно работать с напоненной базой в файле /etc/My-GNU_AV/db.dat
У меня такого файла не нашлось