Электронная библиотека

Xakep

Xakep

Первый вирь - COMом

Xakep, номер #014, стр. 014-058-1


Автор: Ramhak O`hady (konung@ic.ru)

После того как в предыдущей статье я рассказал о вирусах и даже попробовал их каким-то образом разделить по группам, наступил момент, когда "теория хороша, а практика - еще страшнее". Чтобы сразу не бросаться на амбразуру, начну с простенького, а потом доберусь и до вкусненького. Конечно, писать вирусы или разбираться в них - это отнюдь не просто, это требует определенных усилий, а главное - желаний. Желаний творить :). Ну а сейчас учиться и еще раз учиться. Как завещал вирус коммунизма :). И не забывай, что вирмейкер - это прежде всего - отличный программер. Создание вируса нужно для того, чтобы победить самого себя, доказать всем, что возможно сделать крохотную программку, которая сможет противостоять огромным сложным программам-антивирусам. Вот где искусство!

Итак, первый вирь будет полностью на асме и предназначен для заражения com-файлов. Это самый простой вариант вируса и самый старый. Для программирования понадобится компилятор (например, Turbo Assembler или MASM), компоновщик (Turbo Linker сойдет) и... конечно, редактор, где можно спокойненько попользоваться всеми сервисными фишками. Я, например, пользуюсь встроенным редактором Dos Navigator`а. Это очень удобно по следующей причине - написал, сохранил и тут же, не закрывая окно с файлом, можно скомпилить, прилинковать и посмотреть, как работает :). А потом сразу запускать Крякер Инета :))). Кстати, насчет "посмотреть, как работает" - поаккуратней. Один мой знакомый тоже любил побаловаться с "живыми" вирями. Выделил для этого отдельный диск на 240mb, засадил туда несколько игр и пустил несколько "зверей". Но проблема заключалась не в вирях, а в кривых руках моего знакомого, который не сумел правильно поправить исходники, чтобы те не выползали за пределы диска. Вот... в общем, теперь мой знакомый с вирями обращается весьма аккуратно. Советую не повторять его ошибок. Хотя выковыривать какой-нибудь Cagliari из tasm.exe для кого-то будет полезным занятием :). Хотя бы опыт появится. Опыт - сын ошибок трудных...(с) А.С.Пушкин.

Ну, понеслось!

А теперь, собственно, программирование. Для начала небольшой шаблон, который обычно сохраняют отдельно и начинают уже с него. Но это в принципе дело вкуса, а я рассказываю, как делаю сам.

code segment byte public

assume cs:code,ds:code,es:code

org 100h

entrypoint: retn

code ends

end entrypoint

Что такое org, segment и assume, я рассказывать не буду - зачем лишнее в голову грузить - итак груженые :). А вообще, эта статья - не FAQ по асму, поэтому советую обзавестись соответствующими факами и доками, для внеклассного чтения, так сказать :). А вот почему там стоит просто RETN, объясню: системный стек при выполнении com-программы инициализируется нулем. Следовательно, RETN выберет из стека одно слово - значение, равное нулю, и выскочит на CS:0000. А там всегда стоит INT 20H, что и оборвет исполнение программы. Конечно, можно было написать INT 20H или даже MOV AX,4C00H и INT 21H... но это дело вкуса. И расстояния между указательным пальцем и мизинцем при распальцовке \m/ :).

Содержание  Вперед на стр. 014-058-2