Описание для создания вируса

В коллекции вредоносных Android-приложений некоторых антивирусных лабораторий содержится уже более 10 миллионов образцов. Эта цифра будоражит воображение, но примерно 9 миллионов 995 тысяч из них — переименованные копии оригинальных вирусов. Но если проанализировать исходный код оставшихся нескольких тысяч образцов малвари, то можно заметить, что все они комбинируются из небольшого количества уникальных функциональных блоков (несколько видоизмененных и по-разному скомбинированных).

Все дело в том, что вирмэйкеры чаще всего преследуют весьма тривиальные задачи:

  • отправить эсэмэску на платный номер;
  • завладеть конфиденциальной информацией пользователя (телефонными номерами, текстами сообщений, данными с SD-карты и так далее);
  • собрать данные о зараженном устройстве;
  • завладеть администраторскими правами на устройстве (для установки приложений без разрешения владельца или для злонамеренного выведения аппарата из строя);
  • отследить логины, пароли и данные платежных карт, которые пользователь вводит на сайтах систем интернет-банкинга. Как они это делают? Попробуем проникнуть в мрачный мир мобильного вирмэйкинга и посмотреть, что там происходит.

Отправка эсэмэски

Самым распространенным типом вирусов являются SMS-трояны. Эти вирусы просто отправляют сообщения на платные номера без согласия пользователя. Создать такую программу или переписать готовую под нужный номер совсем легко. Да и процесс получения выгоды предельно упрощен — в отличие, например, от отслеживания банковских данных.

Далее приведен простейший пример кода. Это элементарная функция отправки SMS. Ее можно усложнить проверкой статуса отправки, выбором номеров в зависимости от места положения абонента и последующим удалением SMS.

Где искать код вируса

В абсолютном большинстве случаев заражение телефона происходит через установку приложений. Любое приложение для Android существует в виде файла с расширением apk, который, по сути, является архивом. Просмотреть его содержимое можно с помощью Android SDK, конвертера файлов APK в JAR и декомпилятора Java-байт-кода. Сборка приложения (APK) состоит из следующих частей:

  • resources.arsc — таблица ресурсов;
  • res (папка) — собственно ресурсы (иконки и прочее);
  • META-INF (папка) — содержит файлы со следующим содержимым: контрольные суммы ресурсов, сертификат приложения и описание сборки APK;
  • AndroidManifest.xml — всякого рода служебная информация. В том числе разрешения (permission), которые приложение запрашивает перед установкой для своей корректной работы;
  • classes.dex — ты наверняка слышал, что в Android операционных системах весь код выполняется с помощью Dalvik virtual machine (начиная с версии 4.4 появляется поддержка ART), которая не понимает обычный Java-байт-код. Поэтому и существуют файлы с расширением dex. В нем, наряду с нужными и полезными классами (которые отвечают за функционал приложения), содержатся также и вредоносные (вирусный код, который мы разбираем в этой статье).

Существует категория вирусов, которая охотится за персональными данными пользователей. Механизм их действия также несложен. Они либо загружают на сервер своего создателя файлы юзера, либо предварительно собирают какие-либо данные в txt (CSV, XML — не принципиально). Интерес для злоумышленников могут представлять контакты любого типа, сообщения из разных мессенджеров, медиафайлы и прочее.

SMS зараженных юзеров особенно ценны номерами телефонов отправителей и получателей — ими можно пополнить базу для спам-рассылок. Реже вирусы такого рода используются для заражения устройств конкретных личностей — в следующий раз, когда твоя девушка предложит тебе протестировать написанное ей (ай, карамба! — Прим. ред.) приложение на Android, не теряй бдительности :).

  • DroidKungFu;
  • DroidDream;
  • подавляющее большинство малвари всех аналогичных.

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

Одна из самых неприятных вещей, которая может произойти с Android-устройством, — это его рутинг вирусом. Ведь после этого зловредная программа может делать с ним что угодно: устанавливать другие вирусы, менять настройки аппаратного обеспечения. Совершается это действо путем последовательного запуска эксплойтов:

Сайты о мобильной малвари

Блог экспертов компании Kasperskiy Lab Этот ресурс содержит качественные и подробные статьи о многих аспектах компьютерной безопасности, в том числе и об Android-вирусах. Стоит регулярно посещать этот сайт, чтобы быть в курсе последних событий.

Androguard Google Group Группа посвящена open source инструменту для всевозможных манипуляций с кодом Android-приложений (декомпиляция и модификация DEX/ODEX/APK файлов и так далее). Androguard также содержит обширную базу статей про вирусы. Помимо кратких обзоров функционала и методов защиты, встречаются подробные анализы кода малвари.

Защита от вирусов

Некоторые пользователи считают, что если скачивать приложения исключительно из Google Play и установить на смартфон антивирус, то это стопроцентно гарантирует безопасность. Не стоит обольщаться: в Сети регулярно появляются сообщения о нахождении малвари в официальном маркете. А количество вновь появившихся зловредных программ измеряется сотнями тысяч в месяц, что затрудняет их своевременное попадание в базы антивирусных программ. Реальную гарантию безопасности может дать ручной просмотр кода APK-файла перед установкой его на телефон. Не нужно быть гуру кодинга, чтобы заметить вредоносные фрагменты. А наша статья поможет тебе в этом.

Как мы видим из примеров, мобильный вирмейкинг технологической сложностью не отличается. Конечно, данные примеры упрощены под формат журнала — прежде всего, упущены обработчики ошибок и исключений, а также отдельные технические мелочи, отсутствие которых не помешает тебе понять принципы работы Android-малвари, но оградит от ненужных экспериментов. Ведь мы не поддерживаем создание вирусов, не так ли? 🙂


11 ноября 1983 года был написан первый вирус, который открыл новую эру опасных программ для компьютеров.

Американский студент из Университета Южной Калифорнии Фред Коэн составил программу, демонстрировавшую возможность заражения компьютера со скоростью размножения вируса от 5 минут до 1 часа.

Давайте же вспомним, какие вирусы были самыми разрушительными в недолгой истории компьютерных сетей.

10 место. Code Red

9 место. Morris

В 1988 году вирус заразил по сети 60 тыс. компьютеров, не давая им нормально работать. Ущерб от червя Морриса был оценён примерно в $96.5 млн.

Создатель вируса Роберт Моррис хорошо законспирировал код программы, и вряд ли кто мог доказать его причастность. Однако его отец, компьютерный эксперт Агентства национальной безопасности, посчитал, что сыну лучше во всем сознаться.

На суде Роберту Моррису грозило до пяти лет лишения свободы и штраф в размере $250 тыс, однако, принимая во внимание смягчающие обстоятельства, суд приговорил его к трем годам условно, $10 тыс штрафа и 400 часам общественных работ.

8 место. Blaster

По отчетам из Лаборатории Касперского — по всему миру было заражено порядка 300 тысяч компьютеров. Для пользователяБыл запущен в 2003 году для атаки сайтов Microsoft. Его автора так и не нашли.

Для пользователя данный червь был сравнительно безопасен, если не считать побочного эффекта в виде регулярной перезагрузки компьютера. Целью этого червя являлась атака на серверы Microsoft 16 августа 2003 года в полночь. Однако Microsoft временно закрыла свои серверы, что позволило сократить ущерб от вируса к минимуму.

7 место. Melissa

Автор вируса Дэвид Смит назвал свое детище в честь стриптизерши из Майами. Собственно, при заражении на домашней странице появлялась стриптизерша. Вирус нанес более $80 млн. убытка. Компаниям Microsoft и Intel даже пришлось выключить собственные почтовые сервера.

Смита арестовали и приговорили к трем годам заключения.

6 место. CIH

Знаменитый вирус Чернобыль, который был написан тайваньским студентом Чэнь Инхао специально для операционок Windows 95\98. 26 апреля, в годовщину аварии на АЭС, вирус активировался, парализуя работу компьютеров.

По различным оценкам, от вируса пострадало около полумиллиона персональных компьютеров по всему миру.

По данным The Register, 20 сентября 2000 года власти Тайваня арестовали создателя знаменитого компьютерного вируса, но, согласно тайваньским законам тех времен, он не нарушил никаких законов, и он никогда не привлекался к уголовной ответственности за создание этого вируса.

В настоящее время Чэнь работает в Gigabyte.

5 место. Nimda

Распространялся по электронной почте. Стал самым быстрораспространяемым вирусом. Для того, чтобы заразить миллионы компьютеров, ему понадобилось всего 22 минуты.

4 место. Storm Worm

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

3 место. Slammer

Самый агрессивный вирус. В 2003-м уничтожил данные с 75 тыс. компьютеров за 10 минут.

2 место. Conficker

Один из опаснейших из известных на сегодняшний день компьютерных червей.

Вредоносная программа была написана на Microsoft Visual C++ и впервые появилась в сети 21 ноября 2008. Атакует операционные системы семейства Microsoft Windows (от Windows 2000 до Windows 7 и Windows Server 2008 R2). На январь 2009 вирус поразил 12 млн компьютеров во всём мире. 12 февраля 2009 Microsoft обещал $250 тыс. за информацию о создателях вируса.

1 место. ILOVEYOU

В общей сложности, вирус поразил более 3 млн компьютеров по всему миру. Предполагаемый ущерб, который червь нанес мировой экономике, оценивается в размере $10 – 15 млрд, за что вошел в Книгу рекордов Гиннесса, как самый разрушительный компьютерный вирус в мире.

Страница может отображаться некорректно.

Другие наши ресурсы

Чтобы добавить ресурс в библиотеку, войдите в аккаунт.

  • Все: -
  • Незакрытые: -
  • Последний: -

Свяжитесь с нами Незакрытые запросы:

В данную группу объединяют вирусы, написанные на языках программирования высокого уровня, таких как С, С++, Pascal, Basic и других. HLL вирусы разделяют на 5 классов:

Классы Описание
1 HLLC
(High Level Language Companion)
Программа-компаньон, которая использует алгоритм инфицирования, базирующийся на манипуляции именами файлов в файловой системе. HLLC-вирус, как правило, переименовывает оригиналы исполняемых файлов (или перемещает их в другие папки), а затем использует оригинальные названия для создания вирусных копий.
2 HLLO
(High Level Language Overwriting)
Вредоносная программа, которая перезаписывает данные файла-жертвы.
3 HLLP
(High Level Language Parasitic)
Паразитическая вредоносная программа, которая поражает исполняемые файлы, не повреждая их данные. Пример: Win32.HLLP.Coler.17
4 HLLM
(High Level Language MassMailing Worm)
Вредоносная программа, рассылающая себя по почте.
Пример : Win32.HLLM.MailSpamer
5 HLLW
(High Level Language Worm)
Вредоносная программа, которая для распространения не нуждается в хост-файле. Может реплицироваться и по сети.
Пример : Win32.HLLW.Flame
  • "Trojan." — общее название для различных Троянских программ (Троянцев) :
  • "PWS." — Троянская программа, которая ворует пароли. Как правило, префикс такой вирусной программы дополняется словом "Trojan." - "Trojan.PWS."
  • "Backdoor." — вирусная троянская программа, которая содержит в себе RAT-функцию (RAT - Remote Administration Tool — утилита удаленного администрирования).

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

  • "SillyC." — не резидентные в памяти вирусы, объектами поражения которых являются только COM-файлы;
  • "SillyE." — не резидентные в памяти вирусы, объектами поражения которых являются только EXE-файлы;
  • "SillyCE." — не резидентные в памяти вирусы, объектами поражения которых являются только COM- и EXE-файлы;
  • "SillyRC." — резидентные в памяти вирусы, объектами поражения которых являются только COM-файлы;
  • "SillyRE." — резидентные в памяти вирусы, объектами поражения которых являются только EXE-файлы;
  • "SillyRCE." — резидентные в памяти вирусы, объектами поражения которых являются только COM- и EXE-файлы;
  • "SillyO." -не резидентные в памяти вирусы, которые перезаписывают файлы;
  • "SillyOR." — резидентные в памяти вирусы, которые перезаписывают файлы.

В данную группу объединяют вирусы, использующие особенности файлов офисных программ, а также встроенные макроязыки данных приложений. Группа содержит 6 классов.

Классы Описание
1 P98M Инфицирует документы и шаблоны MS PowerPoint 98.
2 W97M Инфицирует документы и шаблоны MS Word 8.0–9.0 (MS Office'97/2000).
3 X97M Инфицирует документы MS Excel 8.0–9.0 (MS Office'97/2000).
4 O97M Кросс-платформенный макровирус.
Инфицирует одновременно несколько приложений MS Office.
5 A97M Инфицирует базы данных MS Access'97/2000.
6 StarOffice Инфицирует файлы офисного пакета StarOffice, предназначенного для операционных систем Solaris, Microsoft Windows, Linux, macOS.

В данную группу объединяют вирусы, написанные на различных интерпретируемых языках. Скрипт-вирусы разделяют на 9 классов.

Классы Описание
1 VBS Написан на языке программирования Visual Basic Script.
2 JS Написан на языке программирования Java Script language.
3 Wscript Написан на языке программирования Windows Script.
4 HTML Написан на языке программирования HTML.
5 Perl Написан на языке программирования Perl.
6 PHP Написан на языке программирования PHP.
7 IRC Конфигурационные файлы IRC-клиентов, позволяющие злоумышленникам удаленно производить различные вредоносные действия, передавая команды по протоколу IRC.
8 Java Написан на языке программирования Java в виде class-файлов.
9 BAT Написан на языке командного интерпретатора MS-DOS.

В данную группу объединяют вирусы, разработанные для инфицирования файлов конкретных программ. Выделяют 3 класса узкоспециализированного вредоносного ПО.

Классы Описание
1 ACAD Вредоносная программа, написанная на языке AutoLisp
2 AutoLisp Вредоносная программа, написанная на языке AutoLisp
3 SWF Вредоносные флеш-файлы, либо внедренные в них флеш-объекты

В данную группу объединяют вредоносные программы, разработанные для осуществления DoS-атак (от англ. Denial of Service) с целью довести вычислительную систему до отказа в обслуживании. В группе выделяют 2 класса.

Классы Описание
1 DDoS Вредоносные программы для осуществления DDoS — атак (от англ. Distributed Denial of Service), т. е. атак, выполняемых одновременно с большого количества компьютеров.
2 FDOS Вредоносные программы, отправляющие большое число запросов к какому-либо сервису с целью вывести его из строя.

В данную группу объединяют программы, неспособные к самовоспроизведению и представляющие потенциальную опасность. Группа содержит 5 классов.

Классы Описание
1 Joke Программы-шутки.
2 Program Программы, которые могут быть использованы злоумышленниками.
3 Tool Потенциально опасные программы и хакерские утилиты.
4 Dialer Невредоносная программа, использующая доступ в интернет с разрешения пользователя для того, чтобы попасть на определенные сайты. Обычно имеет подписанный сертификат и уведомляет обо всех своих действиях.
5 Adware Программное обеспечение, демонстрирующее рекламу на компьютере пользователя без его согласия.
Примеры : Adware.Adshot, Adware.GameVance.11

В данную группу объединяют вредоносные программы, разработанные для определенных операционных систем (ОС). В зависимости от типа инфицируемой ОС выделяют 19 классов.

Классы Описание
1 BeOS Для операционной системы BeOS
2 FreeBSD Для операционной системы FreeBSD
3 IphoneOS Для операционной системы iOS
4 MeOS Для операционной системы MeOS
5 OS2 Поражают исполняемые файлы (LX) операционной системы OS/2
6 Win2K Для операционной системы Windows 2000
7 Win32/Linux Кросс-платформенный вирус, для Windows с 32-разрядной архитектурой и Linux
8 Win64 Для 64-разрядных версий ОС Windows
9 Win9x Для ОС семейства Windows 95/98, ME
10 WinCE Для операционных систем WinCE, Windows Mobile
11 Win Поражают 16-битные исполняемые файлы (NE) в ОС Windows (NewExe — формат исполняемых файлов операционной системы Windows 3.xx). Некоторые из этих вирусов могут работать не только в ОС Windows 3.xx, но также и в ОС Win'95/98/.
12 Win32 Поражают 32-битные исполняемые файлы(PE) операционных систем Windows 95/98/NT.
13 Win95 Поражает 32-битные исполняемые файлы (PE и LE(VxD)) операционных систем Windows 95/98.
14 Win98 Для операционной системы Windows 98.
15 Symbian Для Symbian OS (мобильная ОС).
16 SunOS Для ОС SunOS (Solaris).
17 Mac Для операционной системы macOS.
18 Android Для Android (мобильная ОС)/
19 Linux Поражают исполняемые программы операционной системы Linux.

Программы данной группы характеризуют как опасные и разделяют на 3 класса.

Классы Описание
1 Backdoor Программы, предоставляющие злоумышленнику несанкционированный доступ к системе. Бэкдоры получают информацию с управляющих серверов (C&C, от англ. Command and Control Center). Возможные функции: загрузка файлов, осуществление DDoS-атак, рассылка спама и т. д.
Примеры : BackDoor.Andromeda, BackDoor.DaVinci.1
2 Trojan Вредоносные программы, осуществляющие несанкционированные пользователем действия на его компьютере. Данные действия не обязательно будут разрушительными, но они всегда направлены во вред пользователю.
Название этого типа атак происходит от известной легенды о деревянной статуе коня, использованной греками для проникновения в Трою.
Примеры : Trojan.Botnetlog, Trojan.DownLoad, Trojan.Stuxnet
3 Exploit Данные (или программный код), предназначенные для использования уязвимостей в системе пользователя.
Примеры : Exploit.BlackHole, Exploit.Java

Конструктор для создания вирусов, троянцев и других вредоносных программ — VirusConstructor.


Поговорим о компьютерных вирусах? Нет, не о том, что вчера поймал ваш антивирус. Не о том, что вы скачали под видом инсталлятора очередного Photoshop. Не о rootkit-e, который стоит на вашем сервере, маскируясь под системный процесс. Не о поисковых барах, downloader-ах и другой малвари. Не о коде, который делает плохие вещи от вашего имени и хочет ваши деньги. Нет, всё это коммерция, никакой романтики…

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

Мы будем говорить о вирусах, живущих в исполняемых файлах форматов PE и ELF, то есть о вирусах, тело которых представляет собой исполняемый код для платформы x86. Кроме того, пусть наш вирус не будет уничтожать исходный файл, полностью сохраняя его работоспособность и корректно инфицируя любой подходящий исполняемый файл. Да, ломать гораздо проще, но мы же договорились говорить о правильных вирусах, да? Чтобы материал был актуальным, я не буду тратить время на рассмотрение инфекторов старого формата COM, хотя именно на нем были обкатаны первые продвинутые техники работы с исполняемым кодом.

Начнём со свойств кода вируса. Чтобы код удобней было внедрять, разделять код и данные не хочется, поэтому обычно используется интеграция данных прямо в исполняемый код. Ну, например, так:


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

Исполняемый файл (PE или ELF) состоит из заголовка и набора секций. Секции – это выровненные (см. ниже) буферы с кодом или данными. При запуске файла секции копируются в память и под них выделяется память, причем совсем необязательно того объёма, который они занимали на диске. Заголовок содержит разметку секций, и сообщает загрузчику, как расположены секции в файле, когда он лежит на диске, и каким образом необходимо расположить их в памяти перед тем, как передать управление коду внутри файла. Для нас интересны три ключевых параметра для каждой секции, это psize, vsize, и flags. Psize (physical size) представляет собой размер секции на диске. Vsize (virtual size) – размер секции в памяти после загрузки файла. Flags – атрибуты секции (rwx). Psize и Vsize могут существенно различаться, например, если программист объявил в программе массив в миллион элементов, но собирается заполнять его в процессе исполнения, компилятор не увеличит psize (на диске содержимое массива хранить до запуска не нужно), а вот vsize увеличит на миллион чего-то там (в runtime для массива должно быть выделено достаточно памяти).

Флаги (атрибуты доступа) будут присвоены страницам памяти, в которые секция будет отображена. Например, секция с исполняемым кодом будет иметь атрибуты r_x (read, execute), а секция данных атрибуты rw_ (read,write). Процессор, попытавшись исполнить код на странице без флага исполнения, сгенерирует исключение, то же касается попытки записи на страницу без атрибута w, поэтому, размещая код вируса, вирмейкер должен учитывать атрибуты страниц памяти, в которых будет располагаться код вируса. Стандартные секции неинициализированных данных (например, область стека программы) до недавнего времени имели атрибуты rwx (read, write, execute), что позволяло копировать код прямо в стек и исполнять его там. Сейчас это считается немодным и небезопасным, и в последних операционных системах область стека предназначена только для данных. Разумеется, программа может и сама изменить атрибуты страницы памяти в runtime, но это усложняет реализацию.

Также, в заголовке лежит Entry Point — адрес первой инструкции, с которой начинается исполнение файла.

Необходимо упомянуть и о таком важном для вирмейкеров свойстве исполняемых файлов, как выравнивание. Для того чтобы файл оптимально читался с диска и отображался в память, секции в исполняемых файлах выровнены по границам, кратным степеням двойки, а свободное место, оставшееся от выравнивания (padding) заполнено чем-нибудь на усмотрение компилятора. Например, логично выравнивать секции по размеру страницы памяти – тогда ее удобно целиком копировать в память и назначать атрибуты. Даже вспоминать не буду про все эти выравнивания, везде, где лежит мало-мальски стандартный кусок данных или кода, его выравнивают (любой программист знает, что в километре ровно 1024 метра). Ну а описание стандартов Portable Executable (PE) и Executable Linux Format (ELF) для работающего с методами защиты исполняемого кода – это настольные книжки.

Если мы внедрим свой код в позицию точно между инструкциями, то сможем сохранить контекст (стек, флаги) и, выполнив код вируса, восстановить все обратно, вернув управление программе-хосту. Конечно, с этим тоже могут быть проблемы, если используются средства контроля целостности кода, антиотладка и т.п., но об этом тоже во второй статье. Для поиска такой позиции нам необходимо вот что:

  • поставить указатель точно на начало какой-нибудь инструкции (просто так взять рандомное место в исполняемой секции и начать дизассемблирование с него нельзя, один и тот же байт может быть и опкодом инструкции, и данными)
  • определить длину инструкции (для архитектуры x86 инструкции имеют разные длины)
  • переместить указатель вперед на эту длину. Мы окажемся на начале следующей инструкции.
  • повторять, пока не решим остановиться

Это минимальный функционал, необходимый для того, чтобы не попасть в середину инструкции, а функция, которая принимает указатель на байтовую строку, а в ответ отдает длину инструкции, называется дизассемблером длин. Например, алгоритм заражения может быть таким:
  1. Выбираем вкусный исполняемый файл (достаточно толстый, чтобы в него поместилось тело вируса, с нужным распределением секций и т.п.).
  2. Читаем свой код (код тела вируса).
  3. Берем несколько первых инструкций из файла-жертвы.
  4. Дописываем их к коду вируса (сохраняем информацию, необходимую для восстановления работоспособности).
  5. Дописываем к коду вируса переход на инструкцию, продолжающую исполнение кода-жертвы. Таким образом, после исполнения собственного кода вирус корректно исполнит пролог кода-жертвы.
  6. Создаем новую секцию, записываем туда код вируса и правим заголовок.
  7. На место этих первых инструкций кладем переход на код вируса.

Это вариант вполне себе корректного вируса, который может внедриться в исполняемый файл, ничего не сломать, скрыто выполнить свой код и вернуть исполнение программе-хосту. Теперь, давайте его ловить.

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

Итак (рассматриваем классические вирусы), на входе имеем исполняемый файл и один из сотни тысяч потенциальных вирусов в нем. Давайте детектировать. Пусть это кусок исполняемого кода вируса:

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

  • сокрытие кода самого вируса;
  • сокрытие его точки входа.

Сокрытие кода вируса в результате вылилось в появление полиморфных движков. То есть движков, позволяющих вирусу изменять свой код в каждом новом поколении. В каждом новом зараженном файле тело вируса мутирует, стараясь затруднить обнаружение. Таким образом, затрудняется создание содержимого сигнатуры.

Сокрытие точки входа (Entry Point Obscuring) в результате послужило толчком для появления в вирусных движках автоматических дизассемблеров для определения, как минимум, инструкций перехода. Вирус старается скрыть место, с которого происходит переход на его код, используя из файла то, что в итоге приводит к переходу: JMP, CALL, RET всякие, таблицы адресов и т.п. Таким образом, вирус затрудняет указание смещения сигнатуры.

Гораздо более подробно некоторые алгоритмы таких движков и детектора мы посмотрим во второй статье, которую я планирую написать в ближайшее время.

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

Читайте также:

Пожалуйста, не занимайтесь самолечением!
При симпотмах заболевания - обратитесь к врачу.

Copyright © Иммунитет и инфекции