LOVELOOSE _1.0
Здесь я расскажу о создании вирусов в дельфи в общем, т.к. описывать
конкретный вирус не имеет значения, исходник я снабдил большим
количеством комментариев, при этом он прост настолько, что проще
придумать уже нельзя. Итак линк на исходник виря LOVELOOSE написанного
собственноручно для ознакомления тебя с некоторыми премудростями. Написан он целиком на вин апи. Вес скомпилированного (но не упакованного)
около 20 килобайт (чуть меньше).Ради интереса я удалял из него информацию о файле и сжимал UPX'ом - у меня получилось 11 килобайт...
Вообщем качай исходник и продолжим.
Для начала я замечу одну важную "мелочь" - ВИРУСЫ НА ДЕЛЬФИ НЕ ПИШУТ - это геморой и... даже не столько
геморой сколько маразм... =))) Пихать в файл 20 килобайт, в лучшем случае (ради интереса я заценил исходники
чужих творений на дельфи в интернете и должен сказать на меня произвело это довольно удручающее
впечатление... То один не смог "как ни старался" выкинуть модуль SysUtils... Наверно плохо старался =))) другой
вообще предлагает звирька на 200 килобайт... Это млин вааще не звирёк а какойто слон... =)))
Ну да ладно, забьём на них всех и приступим.
С кодом ты ознакомишся в исходнике, а я опишу сисему работы.
Итак, для начала процедура заражения. Первым делом мы бэкапим заражаемый файл, т.е. просто копируем его куда-нибудь,
потом мы пытаемся его удалить - этим мы не просто его убираем, а проверяем, запущен ли файл, есть ли у нас к нему доступ,
мы ведь работаем не в RING 0 =)) Далее, если вдруг файл удалить не получается - убиваем бэкап, и выходим из процедуры, а вот
если получилось... значит просто берём и копируем себя (т.е. тело самого вируса в чистом виде) с именем файла,
а настоящий файл приписываем как "хвост" к вирусу сзади. Тут целая уйма геморроя - во первых значок файла изменится на
значок нашего виря - большего палева уже и представить нельзя, так же изменяется размер конечного файла. Далее сносим
опять - таки бэкап и двигаемся дальше.
Далее я опишу процедуру распаковки, она ещё проще - просто берём, придумываем случайное имя, для проги которую собираемся распаковать
и установив файловый указатель в размер вируса (для таких рода целей и служит константа хранящая размер виря, у меня VIRSIZE)
далее вытаскиваем хвост из заражённого файла, так же как записывали, только наоборот, распаковав - обязательно скрываем копию
оригинального файла, лучше с пометкой "системный", а то у многих юзверей стоит "отображать скрытые файлы", а системные
редко кто просматривает, больно уж их много =) и запускаем распакованный файл, и работаем спокойно далее...
Теперь что касается подсчёта контрольных сумм. В частности тут я сделал это для того, чтобы определить был ли
уже заражён файл, ведь если контрольная сумма первых VIRSIZE байт совпадает с нашими, значит мы уже есть в том файле.
Здесь возможна уйма вариантов - вести лог (помойму самый геморойный вариант), можно создавать
в папке с файлом, пустой файл с именем заражённого + например infected, и тщательно скрыть его, но этот вариант помойму, кроме
геморойности ещё и дебильный...
Двигаем исходник дальше. В функции GetFileExt мы получаем расширение файла. Она далеко не идеальна, в частности
здесь следовало бы употребить for ... downto ... однако переделывать мне было лень, в скорем времени я
ещё немного модифицирую и оптимизирую код, и выложу для ознакомления.
Теперь пару слов о поиске. Поиск - чуть ли не самая важная процедура везде и всегда - вирусы
ищут жертв,
трояны - инфу, которую склеротичный юзер записал в блокнотике, и конечно же сохранил с именем пароли.txt =))
Вообщем, в начале приводится довольно много вариантов распознавания папки, дабы отличить её от файла
мне пришлось перебрать все варианты, ведь папка может обозначаться не только FILE_ATTRIBUTE_DIRECTORY, но
и FILE_ATTRIBUTE_DIRECTORY and FILE_ATTRIBUTE_SYSTEM (системная), и т.д. чтобы не возникло проблем в точном
определении папки. Функция поиска - рекурсивная, т.е. вызывает сама себя, здесь конечно же используется стек,
здесь нужно быть осторожным, если юзверь насоздаёт очень много папок друг в друге, то может произойти переполнение стека,
при этом программа со свистом вылетит и покажет юзеру ошибку.
Далее, у нас процедура LogonSystem, в ней мы заражаем комп вцелом. Это сделано для того, чтобы вирус мог полноценно размножаться,
и заражать другие компы, не имея себя в чистом виде. Т.е. например, дал ты кому-нибудь виря на болванке с автозапуском, вес exe'хи
на его компе позаражались, и тут, его попросили дать одну прогу... =))) Чел получивший заражённую прогу нормально её запустит, всё заработает,
при этом комп будет уже заражён. Так мы сможем плодится, и заражать хоть и таким примитивным способом другие компы.
Теперь посмотри внимательней на процедуру - в ней я не просто скопировался в системный каталог, а именно
"вырезал" себя из заражённого файла, нет, файл остался заражённым, но весь файл я с собой не потащил, только тело в чистом виде.
Ну вот собственно и всё, далее идут такие простые вещи, значение которых ты можешь понять и сам.
В документе я пояснил как устроен простейший вирус на дельфи, однако несмотря на всё, пошутить (жестоко) всё-таки можно, например
если кто-то очень сильно тебя достал =)
Напоследок о распространении - скорее всего это болванка с музыкой, софтом, фильмами и прочим варезом, тогда не мешало бы замутить автозапуск на болванку,
чтобы вирь запустился сразу после того как болванку вставят в сидюк. Итак, запускай свой notepad, и пиши в нём такие строки:
[AUTORUN]
open=vir.exe
Здесь vir.exe путь и имя к нашему вирусу. Сохрани файл с названием autorun.inf, и запиши на болванку вместе с вирем в корневой каталог. Всё.
Исходник autorun.inf
SLAyer
Другие статьи
По всем вопросам и предложениям по сайту пишите на info@comp-info.ru  
|