понедельник, 2 февраля 2009 г.

Скрипт virus_killer

Всех уже достали flash-вирусы, которые распростанаются на флешках, и запускаются при подключении.
Нам конечно без разницы, но хочется помочь ламерам и блеснуть знаниями :)
Читайте дальше - скрипт, автоматически удаляющий вирусы с флешек.

Flash-вирусы это страшно. Фактически кроме них сейчас существуют только "черви", распространяющиеся через почту. У некоторых они стоят годами, и распространаются на всех знакомых. А одни чуваки вообще отожгли, у них вирус запущен от пользователя "администратор", а он с паролем. Т.е. сел за комп, а с вирусом ничего сделать не можешь.
Ну вот я и решил написать небольшой скрипт, что бы удалять вирусы с флешек, которые попадают ко мне.
Значит основные возможности:
  • запускается автоматически, работает на заднем плане
  • удаляет файл autorun.inf (именно через него запускаются вирусы)
  • показывает пользователю красивое окошко "вирус удален"
Окошко чисто для понтов. Отображать его будем через систему gnome (в kde вроде тоже работает) dbus.
Нам понадобится программа notify-send, поставим ее (ubuntu)
sudo apt-get install libnotify-bin
Вот сам скрипт /usr/bin/virus_killer.sh:
#!/bin/bash
if [ -f notify_root ];then . notify_root; fi;
if [ -f /usr/lib/notify_root ];then . /usr/lib/notify_root; fi;

already_checked()
{
CHECKDIR=$@
for CHECKED in $PREV;do
if [ $CHECKED = $CHECKDIR ]; then return 1; fi
done
}

kill_viruses(){
PREV=$MP
MP=$(cat /proc/mounts | awk '{print $2}'|grep "/media/")
for ARG in $MP
do
already_checked $ARG
if [ $? -eq 0 ]; then
VIRUS=$( find $ARG -maxdepth 1 -iname autorun.inf)
if [ ! -z $VIRUS"" ]
then
to_all 'notify-send "Virus_killer" "Вирус удален" -i /usr/share/icons/gnome/48x48/stock/data/stock_lock-broken.png'
rm $VIRUS
fi
fi
done
}
while [ 1 -eq 1 ];do
kill_viruses sleep 3
done

И библиотека, в которой содержится функция
to_all. Вся фишка в том, что отправлять сообщения можно только самому
себе. А скрипт будет запускаться из init, от root. Эта функция отправит
сообщение всем пользователям, у которых запущен gnome.
Файл /usr/lib/notify_root:

init_notify() {
NOTIFI_INITED=1
for pid in $(pgrep x-session); do
# find DBUS session bus for this session
export DBUS_SESSION_BUS_ADDRESS=`grep -z DBUS_SESSION_BUS_ADDRESS \
/proc/$pid/environ | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//'`
done
users=$(ps aux | awk '{print $1" "$11}' |grep x-session-manager| awk '{print $1}' )
}
to_all()
{
if [ $( whoami ) = "root" ]; then
init_notify
for user in $users; do
su -c "$@" $user
done
else
bash -c "$@"
fi
}
Ну и автозапуск для него, /etc/init.d/virus_killer:
#!/bin/sh
VIRUSKILLER="/usr/bin/virus_killer.sh"
test -f /usr/bin/virus_killer.sh || exit 0
. /lib/lsb/init-functions
case "$1" in
start) log_daemon_msg "Starting Virus Killer" "virus_killer"
start-stop-daemon --start --exec $VIRUSKILLER -b
log_end_msg $?
;;
*) log_action_msg "Usage: /etc/init.d/cron {start|stop|restart|reload|force-reload|status}"
exit 2
;;
esac
exit 0
Что бы скрипт запускался автоматически:
sudo update-rc.d virus_killer defaults

Комментариев нет:

Отправить комментарий