Длина вирусов

virusic Между прочим, ещё каких-то лет 16-17 назад, компьютерные вирусы, распространявшиеся в среде ОС MS-DOS на IBM PC-совместимых персональных компьютерах, имели размеры программного кода около сотни байтов. Очень не много, если учесть, что такой вирус должен был суметь получить управление при запуске заражённого файла, установиться в память “резидентом” (то есть, остаться там после завершения программы-носителя) и перехватить хотя бы парочку системных функций – что необходимо для эффективного заражения других файлов. Понятно, конечно, что суперкороткие вирусы и тогда были лишь исключением – типичный размер измерялся несколькими сотнями байтов и килобайтами.

Сейчас подобные короткие вирусы, – в гражданских системах, по крайней мере, – можно ожидать разве что для мобильных телефонов. Впрочем, это тоже важный сектор “развития рынка”.

Адрес записки: https://dxdt.ru/2009/01/05/1962/

Похожие записки:



Далее - мнения и дискуссии

(Сообщения ниже добавляются читателями сайта, через форму, расположенную в конце страницы.)

Комментарии читателей блога: 17

  • 1 <t> // 5th January 2009, 21:54 // Читатель player1 написал:

    Фактор заметности.
    В современном компьтере памяти столько и скорость подключения к нтеренету такая, что много больший размер неощутим. Вирусы просто незачем делать такими компактными.

    PS: помню, во времена MS-DOS, вирусы использовали пустые места в блоках памяти, чтобы общий размер зараженного файла вовсе не изменялся. То есть размер вируса влиял только на оперативную память.
    Которой, как раз, было совсем немного, и часто не хватало. Борьба иногда шла за каждый килобайт – поиски небольшого драйвера мыши, разные режимы загрузки для определенных программ…

  • 2 <t> // 5th January 2009, 21:57 // Читатель Name написал:

    Очень не много, если учесть, что такой вирус должен был суметь получить управление при запуске заражённого файла, установиться в память ?резидентом? (то есть, остаться там после завершения программы-носителя) и перехватить хотя бы парочку системных функций – что необходимо для эффективного заражения других файлов.

    ——

    1) получить управление при запуске – комманда jmp – байт этак 5.
    2) установиться в память ?резидентом? – вызов одной функции DOS, еще байт 5 наверное.
    3) перехватить хотя бы парочку системных функций – еще байт 10.

    Можно пример реально распространеного вируса в 100 байт длиной?

    Современные вирусы управляются через инет, отслылают е-мэйлы и еще много чего умеют, на что 100 байт никак не хватит.

  • 3 <t> // 5th January 2009, 23:29 // Александр Венедюхин:

    1) получить управление при запуске – комманда jmp – байт этак 5.

    Ага, только Вы тут упускаете из виду, что речь о вирусе, а не о прикладной программе. Поэтому задача получения управления состоит из двух частей: нужно ещё уметь так подготовить файл-носитель при заражении, чтобы и управление получить, и заражённую программу потом не испортить. А так да, верно, jmp, только два байта.

    2) установиться в память ?резидентом? – вызов одной функции DOS, еще байт 5 наверное.

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

    3) перехватить хотя бы парочку системных функций – еще байт 10.

    Только ещё нужно их обрабатывать.

    Я так понимаю, что по Вашим оценкам 100 байтов – много? Получается – типа 20 достаточно?

    Можно пример реально распространеного вируса в 100 байт длиной?

    Вам ровно сто байтов? Ну можно: https://www.symantec.com/en/uk/security_response/writeup.jsp?docid=2003-121315-3157-99&tabid=1

    Современные вирусы управляются через инет,

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

  • 4 <t> // 6th January 2009, 00:17 // Читатель kid написал:

    Пол года назад мимо меня пролетал DVD-диск, забитый под завязку вирусами. Это были именно самостоятельные деструктивные программы, а не куски кода, внедряемые в другую программу.

    Дак вот, самый маленький из них был порядка нескольких байт (bat-файл, рекурсивно удаляющий файлы), а самый большой – порядка 6 мегабайт (судя по всему написан на visual-basic :) ). Могу разыскать и выложить, если кому-то интересно.

  • 5 <t> // 6th January 2009, 03:30 // Читатель Name написал:

    “подготовить файл-носитель”, “ещё нужно их обрабатывать”
    вот, уже более технический разговор, а то перехватить, установиться в память “резидентом”…

    —–

    Для эффективного вируса под DOS – не годится такой способ, там нужно было самостоятельно память занимать. Почитайте описание DOSа.

    —–

    Да ладно, писал я резиденты. Одна команда доса завершает программу, не удаляя ее из памяти. Terminate and Stay Resident называется. Хотя может и забыл чего, там вроде в качестве параметра надо было указать сколько памяти оставить не освобождая.

  • 6 <t> // 6th January 2009, 10:06 // Читатель Nikopol написал:

    > Одна команда доса завершает программу, не удаляя ее из памяти.

    Это всё равно, что взять в руки плакат “Я – вирус. Убейте меня !”
    :)

  • 7 <t> // 6th January 2009, 10:55 // Читатель Basil написал:

    >Да ладно, писал я резиденты.
    Видимо, только простейшие. А если попытаться добавить перенос в другую область памяти, попытки спрятать блок памяти от mi, освобождение PSP (хотя в случае вируса вроде не нужно), то сложность резко возрастает.

  • 8 <t> // 6th January 2009, 10:55 // Александр Венедюхин:

    Могу разыскать и выложить, если кому-то интересно

    Наверное, лучше не выкладывать такие наборы всё ж.

  • 9 <t> // 6th January 2009, 10:59 // Александр Венедюхин:

    Одна команда доса завершает программу, не удаляя ее из памяти.

    Один вызов, совершенно верно. Вот только при этом программа-носитель завершится не заработав, и, как верно заметил Nikopol, вызовет подозрения (мягко говоря). Потом, порча заражённых программ – это совсем уж плохой тон, если можно так выразиться.

  • 10 <t> // 6th January 2009, 14:30 // Читатель yparah написал:

    Современные средства защиты Виндовс и стандартные программы защиты (антивирусы, файрволы и прочие) недопустят выполнения таких простых сценариев рамером до сотни байт – все слишком просто и очевидно, указывает на попытку получить доступ над системой. Поэтому идут на ухищрения, маскируют под системные процессы, не забывайте о полиморфности – такие вещи никак не укладываются в 100 байт. Но в наше время даже 100 килобайт – уже не критичный размер, при современных скоростях передачи данных.

    Вирусы для ДОСа – это интересно, но это уже прошлое, которое никак не навредит современным ОС.

  • 11 <t> // 6th January 2009, 15:37 // Читатель Vadim написал:

    Комментарий получился столь велик, что пришлось его оформить отдельным постом:
    http://vadim-proskurin.livejournal.com/321959.html

    Краткое содержание: обращения к системным функциям Windows требуют от прикладной программы гораздо более объемного кода, чем обращения к системным функциям MS-DOS. Именно этим в первую очередь и объясняется такой большой размер Windows-вирусов.

  • 12 <t> // 6th January 2009, 18:41 // Александр Венедюхин:

    Ага, интересно. Действительно я оговорился про два байта jmp. Два – только смещение + код.

  • 13 <t> // 6th January 2009, 22:28 // Читатель Name написал:

    6th January 2009, 10:55 // Читатель Basil написал:

    >Да ладно, писал я резиденты.
    Видимо, только простейшие.

    —-

    Ну вот пара примеров:

    1) Два компа соединины шнурком через ком порт. Резидент получает коды клавиш с другого компа, где запущен мой клиент, и помещает их в буфер клавиатуры. Таким образом можно с одного компьютера управлять другим.

    2) Несколько компов соединины шнурком через ком порт. Ком порт на каждом компе _один_. С сервера можно получать копию экрана любого из клиентов.

    Вирусы я не писал. Вышеперечисленные примеры не задумывались для нанесения вреда. Второй применялся преподавателем информатики для мониторинга учеников.

    На досуге посмотрю код вышеприведенного 100 байтного вируса, наверняка там все очень просто.

  • 14 <t> // 7th January 2009, 02:12 // Читатель Name написал:

    Поискал код baby.100, не нашел.

    Продолжаю утверждать, что для регистрации “резидентом”, нужно выполнить одну функцию DOS. А перехват прерываний, перенос в другую область памяти, попытки спрятать блок памяти, нужны либо для того чтобы затруднить обнаружение, либо чтобы вирус выполнял некие функции _определенным_ образом и к регистрации резидента это отношения не имеет. Все эти дополнительные вещи можно сделать и другим образом, а вот TSR только функцией DOS, a если и можно без вызова этой самой функции, то будет наверняка длиннее.

  • 15 <t> // 7th January 2009, 10:48 // Александр Венедюхин:

    а вот TSR только функцией DOS

    Нет, не только. Можно было поправить структуры управления памятью и разместить код вне контроля DOS, без вызова её функций. Изучайте код. Примеры, пожалуйста, ищите самостоятельно – в Сети полно исходников и документации.

  • 16 <t> // 8th January 2009, 08:20 // Читатель Name написал:

    Конечно не только, например, можно тупо скопировать кусок тела этой самой функции. Но как я и говорил, “будет наверняка длиннее”, чем просто ее вызвать.

  • 17 <t> // 8th January 2009, 19:47 // Читатель arcman написал:

    Компактных вирусов больше нет потому что современная молодёжь обленилась и больше не применяет asm.

    Да и вообще в отрасли теперь ценится простота в написании/поддержке кода.