Как создаются вирусы

Методы защиты

Самое время подумать о способах защиты от вторжения:

  • Программные методы. К ним относятся антивирусы, файрволлы и другое защитное ПО.
  • Аппаратные методы. Защита от постороннего вмешательства к портам или файлам устройства, непосредственно при доступе к «железу».
  • Организационные методы защиты. Это дополнительные меры для сотрудников и иных лиц, которые могут иметь доступ к системе.

Как найти список вирусных ссылок? Благодаря Интернету можно скачать сервисы, например, от Dr.Web. Или воспользоваться специальным сервисом для показа всех возможных вредных ссылок. Там есть список на вирусные ссылки. Остается выбрать наиболее подходящий вариант.

Виды вирусов

Зачем создают вирусы? Существует много причин. Одна часть вредоносных файлов действительно опасна и может навредить работоспособности машины, другая наносит вред косвенно. Список основных целей:

  1. Дестабилизация.
  2. Установка другого вредоносного ПО.
  3. Кража, мошенничество, шпионаж.
  4. Рекламное ПО.
  5. Прочее.

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

Некоторые программы ведут себя достаточно хитро. Загрузка медиафайлов по зараженной ссылке может привести к скачиванию вредоносного ПО.

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

Из-за испорченного файла на компьютере может быть организован общедоступный прокси-сервер, машина станет участником ботнета и будет использоваться для проведения DDOS-атак. С популяризацией биткоина участились случаи скрытого майнинга на ПК пользователей.

Также существуют программы, которые показывают рекламу или собирают различную информацию в маркетинговых целях.

Как сделать вирус-шутку

Вирус — это в первую очередь программа, которая изменяет содержимое каких-либо файлов. Она создается так же, как и любая другая программа. Самые простые варианты вредоносного ПО можно создать в «Блокноте». Для этого не нужны специальные навыки или знание языков программирования.

Как создать вирусы в «Блокноте»?

Следующие строки создадут 1000 папок за одну секунду, что введет юзера в ступор:

@ECHO off

:top

md %random%

goto top

Теперь нужно сохранить документ с расширением .bat. Программу не обязательно писать именно в «Блокноте», команды могут быть написаны в командной строке и просто сохранены в соответствующий файл.

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

Как создать вирусы

В «Блокноте» (а точнее, в любом текстовом редакторе) можно создать вредоносную программу, причем сделать это можно точно так же, как создают обычные программы. Используются любые языки программирования. Обычно, это C++, но может быть Delphi и .Net. Целью создания вируса может быть шутка или ознакомление с тем, как он работает. Как сделать вирус-шутку? Простая программа пишется прямо в «Блокноте», а сам код занимает очень мало строк.

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

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

Что такое вирус

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

  • уничтожать информацию или нарушать работу компьютера;
  • выполняться без предупреждения;
  • иметь явную цель несанкционированного доступа или уничтожения информации.

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

Virus-total изнутри

Virus-total устроен не просто, а очень просто. Он использует консольные
версии антивирусов, управляемые посредством командой строки и выдающие результат
сканирования в стандартный проток вывода, который легко перенаправить в файл или
пайп (pipe).

Что мы делаем? Через специальную форму на сайте закачиваем «подопытный» файл,
скармливаем его антивирусу, предварительно перенаправив вывод во временный файл/пайп,
который тут же парсим (то есть выбрасываем все лишнее, оставляя только статус
проверки и имя вируса). Парсить вывод легче всего Perl’ом, поддерживающим мощный
механизм регулярных выражений, но Си-программы намного более производительны, а
потому предпочтительнее (особенно, при большом наплыве пользователей).

На этом, собственно говоря, возможности virus-total’а и заканчиваются. Это
создает большие проблемы: во-первых, далеко не все антивирусы имеют консольные
версии, а, во-вторых, даже те, что имеют, поведением зачастую радикально
отличаются от полноценных GUI-версий. В чем легко убедиться, сравнив результаты
сканирования большой коллекции вирусов локальным способом и через virus-total –
сравнение будет отнюдь не в пользу virus-total’а.

Учитывая, что практически все антивирусы (и GUI-версии в том числе)
поддерживают запись результатов сканирования в log-файл и позволяют задавать имя
сканируемого файла через командную строку или на худой конец через механизм DDE
(Dynamic Data Exchange), ничего не стоит прикрутить GUI-версию к онлайновой
службе. Просто «скармливаем» антивирусу файл, форсируем запись результатов
сканирования в log-файл, который парсим так же, как и вывод консольных версий.

Остается только собрать «показания» всех имеющихся в нашем распоряжении
антивирусов, оформить их в виде HTML-таблицы и выдать на экран, что по силам
даже самым начинающим программистам.

В клинических случаях, когда антивирус начисто игнорирует командную строку
или не умеет вести логи, на помощь приходит механизм Windows-сообщений (Windows
Message или, сокращенно, WM). Посылая WM-сообщения элементам управления
антивируса, мы можем манипулировать кнопками, меню и прочими элементами
управления по своему усмотрению. Аналогичным способом извлекается и содержимое
окна, содержащего результаты проверки. Получив форматированный rich-текст или
plain-текст, пропускаем его через парсер – и все!

Признаки

Любое заболевание или заражение протекает в скрытой фазе или в открытой, этот принцип присущ и вредоносному программному обеспечению:

  • Устройство начало работать со сбоями, программы, которые работали раньше хорошо, вдруг стали тормозить или вылетать.
  • Медленная работа устройства.
  • Проблема с запуском операционной системы.
  • Исчезновение файлов и каталогов или изменение их содержимого.
  • Содержимое файла подвергается изменению.
  • Изменение времени модификации файлов. Можно заметить, если в папке используется вид «список», или вы посмотрите на свойство элемента.
  • Увеличение или уменьшение количества файлов на диске, и впоследствии увеличение или уменьшение объема доступной памяти.
  • Оперативной памяти становится меньше из-за работы посторонних сервисов и программ.

  • Показ шокирующих или иных изображений на экране без вмешательства пользователя.
  • Странные звуковые сигналы.

Проблемы конфиденциальности

Вирусы встречаются не только в программах, но и в офисных документах, PDF’ах
и прочих файлах с конфиденциальной информацией, разглашать которую крайне
нежелательно, поэтому необходимо предусмотреть опцию «не отсылать данный файл в
антивирусные центры», при необходимости взводимую пользователем. Технически это
реализуется проще простого, но… как избежать злоупотреблений?! Особенно, если мы
строим наш бизнес на отправке свежих штаммов разработчикам антивирусов?

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

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

Ищем адреса API-функций

Следующая проблема состоит в поиске этих самых адресов. Но для начала нужно найти адрес библиотеки kernel32.dll в памяти, т.к. самые необходимые функции находятся именно в ней. Если нам потребуется использовать функции из других библиотек, мы просто используем LoadLibrary и GetProcAddress, которые находятся в kernel32.dll.

Существует множество методов поиска базы kernel32, один из которых — использование механизма структурной обработки исключений SEH (Structured Exception
Handling).

SEH представляет собой цепочку обработчиков — ячейки памяти, в которых содержатся адреса на процедуры обработки исключений. Эта цепочка начинается с fs:0000 и заканчивается последним обработчиком, который содержит значение 0FFFFFFFFh. Ну и что это нам дает? А то, что адрес последнего обработчика — это и есть адрес kernel32.dll в памяти.

Итак, дельта-смещение мы определили. Приведем теперь код поиска базы kernel32:

Здесь мы сканируем память (с того адреса, который мы только что получили) на наличие сигнатуры MZ (4D5Ah). Если она присутствует, значит, все сделано верно. Далее по смещению 3Ch находится смещение начала PE-заголовка. Сравниваем значение 2х байтов по этому смещению на сигнатуру PE (5045h) (на случай, если мы чисто случайно попали на ту область памяти, где нам встретились символы MZ). Если значение этих байт равно PE, то kernel32.dll несомненно найдена.

Теперь рассмотрим некоторые поля PE-заголовка, необходимые нам:

Чтобы найти адрес необходимой нам API-функции в kernel32, нам нужно добраться до секции экспорта этой библиотеки. По смещению 78h от начала PE-заголовка находится RVA адрес этой секции. Но не забудем, что нам нужен не RVA, а VA. Для этого нужно сложить этот RVA со значением Image Base (адрес в области памяти, куда файл проецирован системой). Тогда мы получим реальный адрес секции экспорта.

Наверняка при просмотре таблицы может возникнуть вопрос: а что это за поле Win32VersionValue? Это поле загрузчиком не используется вообще, поэтому мы можем считать его резервным и записывать какую-то информацию. В дальнейшем будем использовать данное резервное поле для записи сигнатуры нашего вируса, чтобы не заражать уже зараженные нашим вирусом программы.

Теперь нам нужно получить адрес таблицы экспорта из секции экспорта. Рассмотрим некоторые интересные нам поля секции экспорта:

Первое поле содержит базу ординалов функций. Второе поле содержит число указателей на имена. Третье поле содержит RVA таблицы экспорта. Эта таблица содержит адреса экспортируемых функций (их точки входа) или данных в формате DWORD RVA (по 4 байта на элемент). Четвертое поле — RVA таблицы указателей на имена. Последнее поле — RVA на таблицу ординалов. Для доступа к данным используется ординал функции с коррекцией на базу ординалов (Ordinal
Base).

Итак, теперь мы знаем адрес таблицы имен и адрес таблицы адресов всех функций библиотеки kernel32.dll. Чтобы найти адрес конкретной функции, мы должны сравнить ее имя с каждым именем в таблице имен экспортируемых функций, и если очередное сравниваемое имя совпало с искомым, мы смотрим в таблицу ординалов по соответствующему индексу и извлекаем таким образом адрес функции. Далее нам этот адрес остается где-то сохранить (в нашем случае – в стеке) для дальнейшего использования и перейти к поиску адреса другой нужной нам функции и так далее.

Чтобы не хранить в коде вируса имена функций (ведь они бывают иногда длинные), нам достаточно хранить 4-байтовые хеш-значения имен. Заодно и при просмотре тела вируса в HEX-редакторе не бросаются в глаза имена функций, содержащиеся в коде вируса:

А при поиске нужной нам функции мы будем сравнивать не имена, а хеш-значения имен (подсчитав предварительно это значение для каждой нужной нам функции). Т.е., допустим, что мы нашли какое-то имя в таблице имен kernel32. Вычисляем хеш-значение этого имени и сравниваем это значение с искомым из нашей таблицы хешей HashTable. Если совпадают – значит, нашли. Если нет – ищем
дальше:

Но как нам вычислить заранее хеш-значение определенного имени? Для этого я написал небольшую программку на Visual C++ с ассемблерной вставкой, ссылку на которую можно найти в конце статьи (с исходником).

После выполнения приведенного кода адреса всех функций будут находиться в стеке:

Кратко о формате PE

Поскольку наш вирус будет заражать именно PE-файлы, мы, естественно, должны иметь представление об этом формате. Это формат исполняемых в операционной системе Windows файлов. Кстати, раз уж мы заговорили об ОС, то заметим, что наш вирус должен нормально исполняться на как можно большем числе ОС данного семейства. Программа тестировалась на работоспособность в Win
9x\Me\NT\2000\XP\2K3.

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

PE-файл в самом своем начале (MZ-заголовок) содержит программу для ОС DOS. Эта программа называется stub и нужна для совместимости со старыми ОС. Если мы запускаем PE-файл под ОС DOS или OS/2, она выводит на экран консоли текстовую строку, которая информирует пользователя, что данная программа не совместима с данной версией ОС. Программист при линковке может указать любую программу DOS, любого размера. После этой DOS-программы идет структура, которая называется IMAGE_NT_HEADERS (PE-заголовок). Эта структура описывается следующим образом:

typedef struct  
     
     
     

Первый элемент IMAGE_NT_HEADERS – сигнатура PE-файла. Для PE-файлов она должна иметь значение «PE\0\0». Далее идет структура, которая называется файловым заголовком и определенная как IMAGE_FILE_HEADER. Файловый заголовок содержит наиболее общие свойства для данного PE-файла. После файлового заголовка идет опциональный заголовок — IMAGE_OPTIONAL_HEADER32. Он содержит специфические параметры данного PE-файла. После опционального заголовка начинается таблица секций (Object Table). В ней содержится информация о каждой секции. После таблицы секций идут исходные данные для секций. В конец PE-файла можно записать любую информацию и от этого функционирование программы не изменится (если там не присутствует проверка контрольной суммы или что-то подобное).

Зарабатываем деньги лопатами

Третье – взимать деньги непосредственно с самих пользователей. Хочешь подолгу
стоять в очередях и сканировать файлы не больше чем … мегабайт? Пожалуйста,
пользуйся нашим сервисом бесплатно! Хочешь иметь определенные привилегии – будь
добр заплатить. Главное, выбрать удобную схему оплаты. Здесь вам не Америка,
здесь климат (финансовый) иной. Кредитные карты имеют единицы, электронные
системы платежей только начинают набирать популярность. Зато практически каждый
IT-специалист – владелец сотового телефона, а значит, можно воспользоваться
микро-платежами через SMS либо потребовать от клиента сообщить номер карты
универсальной оплаты (перечислив заданную сумму на счет, который он может
расходовать, когда пользуется нашим сервисом)

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

Тоже относится и к микро-платежам через SMS. Гарантий,
что снимут 150 рублей, а не 450, у клиента нет никаких.

Заключение

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

Используй полученные знания с осторожностью, изучай ассемблер, не забывай мыть руки перед едой и всегда помни о том, что создание вирусов в каких-либо иных целях, кроме исследовательских, не только очень веселое, но еще и противозаконное занятие. А закон, как любил говорить один литературный персонаж, надо чтить!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector