┌──┬──┐ /╔════╗/╦══╗ /╔═══╗ ╔═══╗ /╔══╦══╗/╦ /╦/╦══╗ /╔═══╗ ╔═══╗
│┬ ┌── │║ /╩│║ /╚╗│║ / │║ │║ // │║ //│║ │║│║ /╚╗│║ /╩│║ │/╩
│├─┐│ ░░▒▒▒▓▓▓│║▓▓▓▓▓│║▓/╔╝│║▓▓▓▓▓╔╩═══╩╗▓▓▓│║▓▓▓│║▓▓▓│║│║▓/╔╝│║▓▓▓▓│║▓▒▒░
││ │├─ │║ │╠══╣ │║═ │║ │║ │║ │║ │║│╠══╣ │║═ /╚═══╗
││ ││ │║ /╦│║ ╚╗│║ /╦│║ │║ │║ │║ ╔╝│║ ╚╗│║ /╦ ╦ │║
│┴ ┘└─┘ /╚════╝/╩ /╩/╚═══╝/╩ /╩ /╩ /╚═══╝ /╩ /╩/╚═══╝/╚═══╝
│ THE CREATURES │ Computer Virus Magazine │ March 1999 issue 02
│───────────────┴─────────────────────────┴───────────────────────────────
│
│ ЗАМОЛВИМ СЛОВО ПРО CORE WAR
═══════════════════════════════════════════════════════════════════════════════
"Плывет говно по реке, а на берегу сидят дед с внуком. Внучок и спрашивает:
- Дедушка, откуда это говно?
- Это было давно..."
В самом деле, история коурваровская берет свое начало от тех громадин
БЭСМ, МЕСМ и черт знает каких других ХРЕНЕСМ. Хотя, насколько я знаю,
в России (тогда СССР) 'Бои в памяти' не проводились.
"... - Дед, а дед! А говно-то тут причем?
- А я е@# что-ли? Насрал кто-то! "
(C) Красная Плесень
Так что же такое CoreWar?
-------------------------------
1. Как это было.
По сути дело это все организовывалось так: несколько (2 или более)
программистов пишут, каждый свою, программу, так называемого "бойца". Затем
на некой машине эти программы встречаются, то есть забрасываются в случайные
области памяти специальным алгоритмом (типа рефери). Потом начинается бой.
Суть боя в том, что каждый боец должен уничтожить остальных, а сам выжить и
размножиться (в пределах памяти машины), чтобы потом сообщить о победе
радостным криком "Я ЖИВ!". Казалось бы, все просто - необходимо лишь сделать
программу релоцируемой (кто не знает - независимой от адреса точки входа),
определить свой адрес, а остальную память забить нулями. Не знаю. По крайней
мере, такие алгоритмы не выигрывали. Возможно, дело в скорости, возможно, еще
в чем-то, но бойцы получались весьма интеллектуальными. На этом краткий курс
по CoreWar можно считать законченым.
2. Как с этим сейчас.
По моим данным, CoreWar'а в "чистом" виде сейчас нет. Возможно, вирусы -
некая альтернатива. дело в том, что с распространением компьютеров количество
так называемых "пользователей" заметно увеличилось. И сейчас "бои в памяти"
уже не будут столь интересны неискушенному, вернее, НЕПОСВЯЩЕННОМУ человеку.
Вот вирус - это да. Вирусу не нужны рефери. Вирусу не нужны свободные машины.
Вирусу не нужны разрешения на работу. И тестировать вирус можно на любой
машине с совместимой системой. Однако, вирмейкеры подвергаются гонениям со
стороны все тех же "пользователей". Что-ж, тем лучше. Значит, есть стимул,
технические задачи для вируса - маскировка, защита... HERE WE GO!
3. Попытки имитации аналогов.
Возможно, многие знают игрушку компании "Gamos" под названием
Snake Battle. Если кому надо - сообщите в письме, я ее пришлю. Суть там в том,
что игрок создает "змею", руководствующуюся задаваемыми схемами действий. В
схватке 2-4 змей определяется победитель. Фенька там еще и в том, что
алгоритм змеи записан не в виде текста программы, а в виде эдаких микросхем,
куда мышкой тыкаешь, и таким образом задаешь ситуацию и реакцию на нее. Более
серьезный аналог - P-Robots by David Malmberg. Там программа действий
бойца-"робота" пишется на паскале, с использованием новых функций и процедур
(типа SCAN - для поиска врагов, CANNON - для стрельбы и тп) К сожалению, у
P-Robots галимый интерфейс и маловато возможностей. ВСЕ. Других аналогов я не
встречал (всякий изврат типа DeadLine не в счет). Если вы располагаете
информацией о чем-то подобном, прошу вас, напишите на [email protected]
-------------------------------------------------------------------------------
ВИРУСЫ КАК БОЙЦЫ В ЧУЖЕРОДНОЙ СРЕДЕ
Рассмотрим теперь ВИРУС с немного другой стороны - а как он выглядит,
ежели его воспринимать как некую программу-воина в дебрях неизвестной машины
и кровожадных антивирусов. И вот он там один, с ним все борятся, причем
избавиться от него хотят любой ценой, хоть и полным уничтожением носителя.
Нечестно? Сейчас разберемся. Во-первых, сам пользователь против того,
чтобы на его машине жили вирусы. Во-вторых любой производитель стационарного
ПО (не самоходного) заинтересован в "чистоте" своего детища (вспомните, как
ругаются бывало различные говнистые проги на изменение своей длины). Потом
антивирусы - эти вирус-за-яйца-выдирательные механизмы берутся за дело со
всей своей рьяностью, выдирая бедные вирусы за их уязвимые @@; правда,
иногда под руку попадается другие органы, и не вируса вовсе, а иногда, если
вирус крепко держится за носителя, @@ ему и отрывают :( правда чаще всего
еще и с крупным повреждением этого самого носителя. Да, ведь даже другие
вирусы - противники "нашего" бедного... Как же тут быть?
Рассмотрим самые распространенные решения этой проблемы - проблемы выживания
------------------------------------------
METHOD#1 - ИНТЕЛЛЕКТУАЛЬНОЕ РАЗМНОЖЕНИЕ
------------------------------------------
Обычный (галимый) вирус размножается либо вообще только в текущей
директории, либо по FindFirst, FindNext в попавшихся под руку каталогах.
Понятно, что, если сделать выбор цели направленным, то есть контролируемым,
то и распространение вира пойдет быстрее. Если вспомнить биологию, то
возможно придет на ум та самая классификация живых существ по стратегии
размножения:
R-стратегия - максимальная _численность_ детенышей.
K-стратегия - _забота_ о немногочисленном потомстве.
По неумолимым законам природы животное может размножаться только по
одной из вышеприведенных стратегий. (например, насекомые, большинство рыб,
земноводные, моллюски, черви - R-стратегия, а теплокровные - K-стратегия).
Если вспомнить вирлисты, то становится ясно, что похожее деление
происходит и среди вирусов. Только разница там в том, что вирусы ограничены
лишь размером, но ограничение все же позволяет ВОСПОЛЬЗОВАТЬСЯ ПРЕИМУЩЕСТВАМИ
ОБОИХ СТРАТЕГИЙ ОДНОВРЕМЕННО (!). Просто выбор стратегии - уже на совести
программиста. Правда, размножение по R-типу ограничено временем работы
вируса, ну дык не целый же винт с одного раза заражать будем! (хотя,
например, Zipper (cl) Light General именно так и поступал...)
Что значит R-стратегия размножения для вирусов? Только одно -
внушительное количество размножений за один цикл работы вируса.
Понятно, что лучше подобную технологию использовать в паре с K-типом.
Если нельзя увеличить численность "потомства" прямым путем
(все равно получается медленно), то сделать это можно косвенно. Например,
увеличив ЧАСТОТУ РАЗМНОЖЕНИЙ. "Но как, - спросите вы, - ведь вирус
не может запуститься сам?". Что-ж, эту проблему решает резидентность.
Да-да, будучи запущен один раз, вирус может засесть в памяти и творить
там все что душе вирмейкерской угодно. Тут открывается обширное поле
деятельности: работа со всеми дисками (и флопами тоже!), маскирование
операций с дисками, путем работы до (или после) некоего действия с диском
пользователя. Еще ведь исчезает проблема поиска жертвы как такового -
пусть пользователь сам указывает, что и где находится!
Пример:
функция MS-DOS # 0Fh - открыть файл
# 10h - закрыть файл
byte prt 0000:043F - статус флоп-мотора
ну и прочее.
Можно записаться в MBR, чтобы получать грузиться напару с системой.
Это все для резидентов. Однако как выглядит интеллектуальное размножений
для NON-TSR вирусов?
Способ 1. Обычно в одной директории (без SUB-DIRs) находится одна
конкретная программа, либо пакет программ. Как правило, для выполнения
какой-либо задачи. Если программа не нужна, ее стирают. Так вот, если в
этой директории штук 20 потенциальных жертв, неужели, попав в этот дир,
вирус будет стараться заразить сначала их все, а уж потом выйти в UP-DIR?
Но зачем? А сотрут прогу - и каюк вирусу? Ну нет.
Смысл способа 1 : ЗАРАЖАЙТЬ НАДО УДАЛЕННУЮ ОТ СВОЕГО НОСИТЕЛЯ ЦЕЛЬ
Можно перейти на другой диск, ну и т.д. Так вирус труднее поймать.
Способ 2. Заразив прогу, запускающуюся при загрузке, вирус и не трогая
MBR получит управление при включении компьютера. А это приятно. То есть:
МОЖНО ПОПРОБОВАТЬ НАЙТИ ЗАПУСКАЮЩИЕСЯ ИЗ AUTOEXEC.BAT ПРОГРАММЫ
Способ 3. Если вирус стартует с дискетки (а так может случится, и довольно
вероятно), то не будет же он заражать что_то на этой дискете? Он ведь
УЖЕ там (скопирован с носителем например). Так что же делать? На винт?
На винт !!! А именно:
НУЖНО СТАРАТЬСЯ ЗАРАЗИТЬ ПРОГРАММУ, НАХОДЯЩУЮСЯ (ПОПАДУЩУЮ) НА ДРУГОЙ КОМП
----------------------------------
METHOD#2 - ПАССИВНАЯ МАСКИРОВКА
----------------------------------
Шифрование вируса или носителя - вот что это такое. То есть, вирус,
конечно, надо зашифровывать. Особенно это будет полезно, если ключ
шифрования будет меняться от копии к копии. HLLP вирусам полезно шифровать
часть носителя, тогда их нельзя будет курнуть оттуда Cure Modul'ом ADinf'a
Шифроваться можно также находясь в памяти. Что, это просто? Нет,
я имею ввиду не часть вира, текстовые строки там, я говорю про КОД вируса.
Если вир шифровать, найти его в памяти будет сложновато. (конкретно - висит
на 21h, основной блок зашифрован. При открытии файла вирус расшифровывается
и заражает). Сплайсинг - лучший способ для TSRов скрыть перехват прерывания.
(сплайсинг - это установка вместо оригинального начала обработчика прерывания
перехода на... в общем, куда нам надо. Сплайсинг int10h - это бред. (10h-BIOS)
Также за пассивную маскировку сойдет всяка бяка типа изменения длины
файла в FAT и прочие примочки.
---------------------------------
METHOD#3 - АКТИВНАЯ МАСКИРОВКА
---------------------------------
Активная маскировка (защита) - пожалуй, лучший способ остаться вирусу
незамеченым (а это пожалуй самое важное). Все эти стелсы, фантомы,
антитрассировочный код, antiWEB, другие наебки - это весьма круто.
Несмотря на пренебрежительное ^^^^^^ название, реализовываться
все это может очень и очень сложно. И хитро. Так что - пилите, Шура!
То есть, грызите гранит науки! ВПЕРЕД, ВИРМЕЙКЕРЫ !
----------------------------------
METHOD#4 - АГРЕССИВНЫЕ ДЕЙСТВИЯ
----------------------------------
Ко всему прочему вирус может направленно портить, скажем, антивирусы,
мешать размножению других вирусов ( "конкурентов" ), но это все раскрывает
существование вируса и его начинают пытаться лечить. Также за "агрессивные"
действия можно считать некие изменения с диском, которые без вируса приводят
диск в негодность. Пример - OneHalf. Только тогда за потерю данных надо винить
только антивирус, ибо это после его "лечения" данные пропадают.
Пока все.
с уважением,
ThePretender