Часть A. Вступление.

1. Зачем люди пишут вирусы?

[AK]	Некоторые задают этот вопрос с удивлением, некоторые с ярко
	выраженной злобой, третьи с ленивым равнодушием, но тем не
	менее продолжают сущестовать люди, которые интересуются этой
	задачей не с точки зрения заурядного обывателя, а как
	программист-системщик. Писать вирусы можно по разным причинам.
	Одним нравится изучат системные вызовы, искать дыры в
	антивирусах и совершенствовать свои знания в ассемблере.
	То есть исключительно программирование. Возможно читатель
	скажет что программировать можно и нечто иное нежели вирус.
	Знаете, это как охота - можно побегать за оленем рискуя
	самому быть съеденым стаей волков, а можно пострелять по
	мишеням в игровом зале. Ощущения разные, хотя принцип один
	и тот же. Так же и вирус. Если обычная программа находится
	в дружественной среде, где ей все рады, где пользователь
	в случае чего настроит систему под нее, освободит память,
	то вирус растет во враждебной обстановке, где каждая сволочь
	ему готова оторвать нужное место, где анитивирусы вопят на
	каждом углу и где параноидальные пользователи при каждой
	опасности форматируют винт. Вот тут то и понадобится наша смекалка
	и выдумка. Вирмейкеру надо идти на шаг впереди остальных
	чтобы опередить, чтобы его вирус выжил. Если автор программы
	может относиться к ней спустя рукава - доделает когда понадобится,
	то автору вируса нужно предусмотреть все. Вирус должен жить
	всегда. В не зависимости от того, сколько свободно памяти или
	включен ли виртуальный режим. Другими словами - вирус - это
	творчество, изобретение новых приемов программирования
	знание системы как пяти пальцев.
	К другой группе людей относятся те, кто стремится насолить
	всем подряд, вставляя в свои вирусы дикую деструкцию.
	Против деструкции я ничего не имею - пользователь сам
	виноват что заразился. Но и подход "вирус ради деструкции"
	я не одобряю. Как правило в таких вирусах основной уклон
	делается на жестокие деструктивные алгоритмы, автор
	19ю сбособами стирает FAT или выжигает монитор. Это, конечно,
	весело, но в такой погоне за уничтожением забываются
	изящные приемы программирования, вирус становится примитивным
	и не представляет интереса для разработчика. Зато лишний
	повод для антивирусников поплакаться в жилетку серой общественности
	что де какие технокрысы злобные.
	И, наконец, к третьей группе относятся мелкие посредственности,
	стремящиеся побыстрее создать вирус дабы попасть в virlist
	и похвастаться своим школьным шлюшкам. К таким людям я отношусь
	крайне отрицательно. Мало того, что вирус зауряден и
	примитивен, так в 95% он содран у другого. Загляните в
	virlist, сколько там вирусов типа jerusalem, vienna, khiznak.
	Знайте, их нацарапали тупоголовые недоумки с целью почувствовать
	себя крутым технокрысой. Наверняка сейчас толпа этих
	ламеров ринутся видирать вири из этого фака, вставлять
	свои копирайты и отсылать Данилову. Не бойтесь, Игорь
	и существует за счет таких людей. Он с радостью вставит
	все милые строчки в свой virlist и прославит на страну еще
	кучу "крутых вирмейкеров". Туда им всем и дорога.

	Целью данного фака является стремление породить интерес к
	творчеству, научить основным приемам программирования вирусов,
	чтобы человек сам смог написать свой собственный вирус, а
	не тупо передирать чужие исходники.

2. Я хочу стать вирмейкером. С чего начать?

[AK]	Начни с чтения этого FAQ'а... Хм, уже начал? Прекрасно.
	В части B рассказаны основы написания вирусов. Внимательно
	их прочитай, попытайся понять. Если что не понятно, загляни
	в литературу, слазь в отладчик. Когда хорошенько изучишь
	принцип работы простенького вируса попытайся написать
	аналогичный, но не подглядывай. Если возникают вопросы, то
	постарайся их решить поиском в литературе, а не в этом факе
	и исходниках. Не бойся эксперементировать. Постарайся
	самостоятельно написать работоспособный COM.TSR, у тебя
	для этого достаточно способностей. Не стермись объять
	всего, не делай навороченных вирусов с первого раза.
	На первый раз тебе достаочно сделать примитивного зверька
	без лишних проверок и маскировок. Дальше ты уже сможешь
	его совершенстовать, откроя новое семейство :)
	Если тебе удастся сделать твой вирус и он будет прекрасно
	работать, то можешь считать, что ряды вирьмейкеров пополнились
	еще одним новичком. В дальнейшем твой вирус будет
	обрастать наворотами, будет оптимизироваться код, еще
	не раз вирусологи будут хвататься за голову, пытаясь пройти
	твой антиотладочный механизм ;) Потом ты добавишь туда
	собственный полиморфный генератор с оригинальным алгоритмом
	и сможешь претендовать на вступление в SGWW ;)
	

3. Какие средства использовать для разработки вирусов?

[AK]	Это дело вкуса. Главное чтобы вам было удобно и привычно.
	Хотя если вы привыкли писать на паскале, то переучиваться
	все-таки придется, если хотите писать высокотехнологичные
	вирусы. Итак, вам требуется
	1) ассемблер
	2) отладчик
	3) монитор или вьювер памяти
	4) дизассемблер.
	
	Из ассемблеров наиболее популярны masm & tasm. Есть люди,
	которые используют asm86, editasm или еще какую диковинку.
	Не важно. Ассесмблер он и в Африке ассемблер. Они все отличаются
	лишь списком поддерживаемых процессоров и внутренними
	директивами. Я предпочтаю masm 6.0. Существует также masm 6.1,
	но его я не рекомендую, так как он нестабильно работает.
	tasm я все-таки тоже не рекомендую - он не оптимизирует ближние
	jmp'ы, то есть если делаем переход ближе чем на 127 байт
	масм догадывается об этом и использует два байта, в то время как
	тасм резервирует 3 байта и вставляет туда один NOP. Для
	вируса подобные шутки могут быть фатальными.
	
	Отладчик. В качестве первого приближения можно назвать
	CodeView и TurboDebugger из комплекта Masm/Tasm соответственно.
	Поработав некоторое время с ними вы увидите, как легко
	надрать задницу отладчику реального режима. Но у них есть
	достоинство - они работают в виртуальном режиме, например
	в окне win95 - иногда это критично. Если вы ищите простой
	и удобный отладчик, то могу посоветовать DeGlucker - это
	отладчик защищенного режима, его вы просто так не наколете,
	но его надо загружать без Emm386. Можно еще посоветовать
	Soft-ice - тоже несомненно мощный отладчик, но имхо чересчур
	громоздкий и сложноват для новичка.
	
	Монитор или вьювер памяти. Очень часто надо выяснить, куда же
	сел наш вирус, какие прерывания перехватил, что находится в
	его буфере. Для этого очень удобны утилитки касперского,
	назыаемые -util, avputil и еще одна утилитка Mview.
	Назначение их одно - в удобной форме просматривать содержимое
	памяти, системных таблиц, перехваченные вектора, дизассемблировать
	резиденты.
	
	Дизассемблер. Бывает так, что вирус работает, а вот зараженные
	второй копией программы уже нет. Надо выяснить почему они
	виснут - тут не обойтись без Hiew или Qview. С помощью
	этих программ вы сможете проверить поля заголовков,
	дизассемблировать код, найти подстроку и даже внести исправления
	с помощью встроенного HEX-редактора и ассемблера. Бывало, я
	писал маленькие программки целиком на внутреннем ассемблере hiew :)
	
	Ах, да, чуть не забыл. Вам наверняка потребуется текстовый
	редактор. Вот сейчас я пишу сей текст в edit.com by Alexander
	Safonenkov. Очень удобная и компактная вещь. Жалко что
	файлы более 64к не дает редактировать. Еще я пользуюсь
	средой от Quick C 2.5. Нет, на си я не пишу. Просто тот
	редактор заглатывает файлы по 300 килов, да и удобства есть
	разные.
	
	Ну и конечно вам не обойтись без всяких собственных тулз, которые
	частенько приходится ваять на скорую руку за 10 минут :)
	Так что учите какой-нибудь простой язык высокого уровня,
	например Васик. ;)

4. Какую литературу читать?

[AK]	Конечно журнал Play-Boy... Шучу, шучу. Сразу могу сказать, что
	вам не обойтись без Interrupt-List by Ralf Broun. Это очень
	подробное описание всех прерываний системы. Также содержит
	описания сотен системных областей, форматов структур,
	недокументированные функции. Распростраянется в элетронном
	виде. Пока последняя версия 53. А года два назад мне
	довелось купить печатный вариант версии 38. Это такие две
	книженции формата А4 страниц по 300. Хоть и громоздко
	зато удобно, кроме того все на русском, чего не скажешь
	об электронной версии. Для новичка это может быть критично.
	Называется она Р.Браун. "Справочник по прерываниям IBM PC"
	Москва, издательство "Мир", 1994.
	
	Еще вам наверняка понадобится книжка по ассемблеру.
	Электронных книг полно, даже в помощи к masm есть полная
	дока к командам вплоть до pentium. А вот бумажная все
	равно удобнее. Самая удобная, которую я встречал -
	В.Л.Григорьев "Архитектура и программирование микропроцессора
	i486". Москва, "Гранал, Бином" 1993
	Главным критерием в выборе книги должно быть полное описание
	всех команд с указанием их кодов и времени выполнения.
	Откройте книжку и поищите там описания ARPL, BSWAP, DAA, FIMUL,
	CALL, SHRD и XOR. Если нашли все, то можете смело ее покупать.
	
	Потом что-нибудь по железу. Этим прилавки забиты. Ваша
	избранница должна содержать описания портов ввода-вывода,
	формат регистров таймера и винчестера, дисковых структур,
	системные области в памяти. Это есть например, в 
	Р.Джордейн "Справочник программиста персональных компьютеров
	типа IBM PC, XT и AT", Москва, "Фин. и статистика" 1992
	
	Еще могу посоветовать гипертекстовую базу tech help. Там
	вы найдете тоже кучу интересного.

5. Какие ресурсы в интернете посоветуете?

[AK]	В первую очередь, конечно, www.ilf.net. Это огромный сервер,
	посвященный хакерству и анархии. Здесь вы сможете найти
	тысячи вирусов, исходников, журналов и утилит на десятки,
	а то и сотни мегабайт. Есть также доступ к этим файлам через
	ftp.ilf.net.
	
	Вам также будут интерсесны следующие ссылки:
	
	home1.gte.net/rdhaar/hotbox/
	www.agate.net/~krees/
	www.cdc.net/~x/
	www.chibacity.com/chiba/
	www.conexis.es/~amasso/
	www.cyberspc.mb.ca/~zuu551/
	www.dodgenet.com/~kwantam/
	www.ikx.org/~bozo/
	www.l0pht.com/~oblivion/
	www.ozemail.com.au/~thesnake/
	www.telepath.com/jtipton/
	www.webring.org/cgi-bin/webring?ring=virus&list
	www1.tip.nl/users/t838909/
	
	Еще я очень рекомендую заглядывать на каналы #SGWW и #VIRUS
	в EfNet'е и UnderNet'e. К ним есть доступ через irc.phoenix.net
	и irc.stealth.net. Я тоже частенько там бываю. ;)

Сайт управляется системой uCoz