Компьютерные вирусы являются одной из разновидностей компьютерного вандализма, получившего распространение в конце 80-х гг. Исторически их возникновение связано с идеей создания самовоспроизводящихся программ — концепции, уходящей своими корнями в пятидесятые годы. Идея самовоспроизводящихся механизмов исследовалась еще Джоном фон Нейманом, который в 1951 г. предложил метод создания таких механизмов. Несомненно, идея вирусоподобных программ неоднократно открывалась и переоткрывалась различными авторами. Тем не менее, восстановление приоритета исследователей в опубликовании той или иной грани концепции вирусоподобных программ является в какой-то мере актом восстановления справедливости по отношению к тем, чьи работы были незаслуженно забыты или вообще проигнорированы. Это касается прежде всего европейских исследователей, вклад которых в разработку различных проблем системного программирования часто игнорируется или замалчивается в американских публикациях.
Первой публикацией, связанной с рассматриваемой концепцией, можно считать статью Л.С.Пенроуза (L.S.Penrose) о самовоспроизводящихся механических структурах [Penrose59], опубликованную в 1959 г. американским журналом “Scientific American”. В этой статье, наряду с примерами чисто механических конструкций, была приведена некая двумерная модель подобных структур, способных к активации, захвату и освобождению. Под влиянием этой статьи Ф.Ж.Шталь (F.G.Stahl) запрограммировал на машинном языке ЭВМ IBM 650 биокибернетическую модель, в которой существа двигались, питаясь ненулевыми словами [Dewdney85]. При N передвижениях без пищи существо умирало от голода, а после съедания определенного количества слов порождало новое. При размножении была предусмотрена возможность мутаций, в ходе которых существа могли приобретать способность пожирать себе подобных и терять возможность к размножению. В ходе пробного прогона один бесплодный мутант съел единственного, способного к размножению.
В 1962 г. В.Д.Высотский (V.A.Vyssotsky), Г.Д.Макилрой (H.D.McIlroy) и Роберт Моррис (Robert Morris) — фирма Bell Telephone Laboratories, США — изобрели достаточно необычную игру Darwin (Дарвин), в которой несколько ассемблерных программ, названных “организмами”, загружались в память компьютера. Организмы, созданные одним игроком (т.е. принадлежащие к одному виду), должны были уничтожать представителей другого вида и захватывать жизненное пространство. Победителем считался тот игрок, чьи организмы захватывали всю память или набирали наибольшее количество очков. Игра проходит на большом участке памяти, называемом ареной и управляемом специальной программой — супервизором.
“Игра, для полуночников”, возникшая в фирме Bell Telephone Laboratories, быстро приобрела популярность и в других учебных и исследовательских центрах, например в исследовательском центре фирмы Xerox в Пало Альто и в Массачусетском институте технологии (МИТ). Отметим, что долгое время описание игры существовало только “в устном фольклоре”; статья с описанием игры была опубликована только в 1972 г. [SPEX72], причем в ее тексте использовался термин “вирус” применительно к одному из видов организмов.
Приблизительно в 1970 г. была создана саморазмножающаяся программа для одной из первых компьютерных сетей — APRAnet. Программа Creeper, которая по некоторым данным была написана Бобом Томасом (Bob Thomas) из BBN, путешествовала по сети, обнаруживая свое появление сообщением “I’M THE CREEPER … CATCH ME IF YOU CAN” (”Я КРИПЕР … ПОЙМАЙ МЕНЯ, ЕСЛИ СМОЖЕШЬ”).
Для борьбы с ней была, создана программа Reaper, которая также путешествовала по сети и уничтожала встретившиеся экземпляры Creeper. Эта идея, представляющая собой вариацию подхода, распространенного в среде знахарей, — “подобное лечится подобным”, позднее неоднократно использовалась и в других программах борьбы с ранними вирусами, однако в целом оказалась неудачной.
В 1974 г. была написана программа Rabbit (Кролик), которая размножалась на трех соединенных между собой машинах IBM, причем появление новых подзадач вызывало замедление реакции, а затем и полное зависание машин.
Другим примером вирусоподобных программ была игра Animal (Животное), разработанная примерно в 1975 г. для Univac 1108. Суть этой игры состояла в том, что человек задумывал некоторое животное, и программа, задавая вопросы, пыталась определить, какое животное загадал человек. Программист, написавший игру, предусмотрел в ней возможность саморазмножения. Когда программа угадывала неправильно, она просила пользователя предложить вопрос, который позволил бы улучшить ее способности к отгадыванию данного животного. Запомнив этот вопрос, программа не только модифицировала себя, но и пыталась переписать свою обновленную (улучшенную) копию в другой каталог. Если там уже была программа Animal, то она стиралась. В противном случае создавалась новая копия. Оказалось, -что через некоторое время все каталоги файловой системы содержали копию Animal. Более того, если пользователь переходил с машины на машину, то он переносил и свой каталог, и в результате во всех каталогах этой ЭВМ также появлялась Animal. При этом совокупность копий Animal занимала значительное файловое пространство, что в те времена воспринималось как проблема. В соответствии с фольклорной версией решения проблемы, опубликованной в [Dewdney85], была разработана новая, более “инфицирующая” модификация игры, которая копировала себя не один раз, а дважды, тем самым быстро вытесняя собой старую версию. По истечении заданного срока она предлагала пользователю сыграть последний раз, а затем сама стирала себя с диска. В действительности, борьба проходила на уровне операционной системы: в версии 33 операционной системы Exec 8 для этой ЭВМ был изменен формат таблицы файлов, и игра потеряла возможность размножаться.