Первые формальные определения вирусаИсторически первые формальные определения вируса были предложены в докторской диссертации Ф. Коэна и получили известность благодаря использованию их в статьях «Компьютерные вирусы: теория и эксперименты» и «Вычислительные аспекты компьютерных вирусов» . Словесное определение вируса — «паразита» выглядело так: Мы определяем компьютерный вирус как программу, которая Может заражать другие программы, модифицируя их таким образом, чтобы внедрять в них собственную, возможно видоизмененную, копию. Следующая, очень абстрактная модель вирусов базировалась на способе описания алгоритмов при помощи «машины Тьюринга» . Машина Тьюринга» определяется: Согласно известному тезису Черча, при помощи «машины Тьюринга» можно описать любой алгоритм и, таким образом, смоделировать работу любого программируемого устройства. Коэн рассматривал не все возможные «машины Тьюринга», а только те из них, данные на ленте которых предназначены для дальнейшей «интерпретации», то есть сами представляют собой программы. Он ввел три дополнительные функции: 8: N^ S — состояние машины после N-го шага работы; D: N х N ^ I — содержимое указанной ячейки после указанного шага и P: N ^ N — значение следующего номера ячейки после выполнения указанного шага. В совокупности эти функции представляют собой «историю поведения» машины, и с их помощью Коэн составил определение «вирусного множества» VS, то есть множества V компьютерных вирусов для «машины Тьюринга» M.VMVV

Проще говоря, Ф. Коэн определил «вирусное множество» как множество «машин Тьюринга», способных перемещать записи на своей ленте из одного места в другое. При этом получаются новые элементы того же множества, по-прежнему обладающие способностью к перемещению своих записей. Сам Ф. Коэн так пояснял суть своего определения: «компьютерный вирус — это программа, которая умеет размножаться».

Под это определение подпадают как обычные компьютерные вирусы, так и сетевые черви. Также по этому определению вирусами являются: содержимое загрузочных секторов дисковых накопителей; компилятор, «собирающий» сам себя из своего же исходного текста; операционная система, выполняющая резервное копирование себя, и т. п. А почему бы нет? Чем отличается компилятор от файлового червя? Только контролируемостью поведения и субъективным представлением о «полезности» или «вредности» результата работы.

Еще интересные статьи :