Длина вирусов
Между прочим, ещё каких-то лет 16-17 назад, компьютерные вирусы, распространявшиеся в среде ОС MS-DOS на IBM PC-совместимых персональных компьютерах, имели размеры программного кода около сотни байтов. Очень не много, если учесть, что такой вирус должен был суметь получить управление при запуске заражённого файла, установиться в память “резидентом” (то есть, остаться там после завершения программы-носителя) и перехватить хотя бы парочку системных функций – что необходимо для эффективного заражения других файлов. Понятно, конечно, что суперкороткие вирусы и тогда были лишь исключением – типичный размер измерялся несколькими сотнями байтов и килобайтами.
Сейчас подобные короткие вирусы, – в гражданских системах, по крайней мере, – можно ожидать разве что для мобильных телефонов. Впрочем, это тоже важный сектор “развития рынка”.
Адрес записки: https://dxdt.ru/2009/01/05/1962/
Похожие записки:
- Офтопик: продолжение про цвет собак в "Илиаде"
- Автоматизация ИИ-агентов и атаки
- Тест SSLLabs и X25519Kyber768
- Тексты про ИИ и Situational Awareness с программным кодом
- Скорость из OBD и программы-навигаторы
- Stack Overflow и OpenAI
- Rowhammer-атака и код сравнения с нулём
- Работа GPS и коррекция по данным многих устройств
- Реплика: программные "демультиплексоры" протоколов уровня приложений
- Шифр "Кузнечик" на ассемблере arm64/AArch64 со 128-битными инструкциями
- Вычислимые опасности ИИ
Комментарии читателей блога: 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 // Александр Венедюхин:
Ага, только Вы тут упускаете из виду, что речь о вирусе, а не о прикладной программе. Поэтому задача получения управления состоит из двух частей: нужно ещё уметь так подготовить файл-носитель при заражении, чтобы и управление получить, и заражённую программу потом не испортить. А так да, верно, jmp, только два байта.
Да, очень смешно, для ценителей юмор. Для эффективного вируса под DOS – не годится такой способ, там нужно было самостоятельно память занимать. Почитайте описание DOSа.
Только ещё нужно их обрабатывать.
Я так понимаю, что по Вашим оценкам 100 байтов – много? Получается – типа 20 достаточно?
Вам ровно сто байтов? Ну можно: 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 // Александр Венедюхин:
Нет, не только. Можно было поправить структуры управления памятью и разместить код вне контроля DOS, без вызова её функций. Изучайте код. Примеры, пожалуйста, ищите самостоятельно – в Сети полно исходников и документации.
16 <t> // 8th January 2009, 08:20 // Читатель Name написал:
Конечно не только, например, можно тупо скопировать кусок тела этой самой функции. Но как я и говорил, “будет наверняка длиннее”, чем просто ее вызвать.
17 <t> // 8th January 2009, 19:47 // Читатель arcman написал:
Компактных вирусов больше нет потому что современная молодёжь обленилась и больше не применяет asm.
Да и вообще в отрасли теперь ценится простота в написании/поддержке кода.