好久没有共享贴了,过来发个Delphi梦魇的
其实也不是什么新鲜玩意,早该发了,就是因为我懒,没发出来,sysconst病毒(也就是Delphi梦魇)的原理性分析,大多是翻译自E文,也有自己的一点研究,欢迎大家拍砖。
进入正题,病毒会通过注册表搜索Delphi的安装目录,然后查找sysconst.bak文件,以此判断文件是否感染,如果未被感染,则打开sysconst.pas文件,写入病毒代码,把原来的sysconst.scu改成sysconst.bak,之后调用dcc32.exe编译生成sysconst.dcu文件,并且同步时间戳,最后删除更改过的pas文件。
而大家都知道,dcu是Delphi IDE生成的二进制映像文件,里面有保存的pas代码信息,很多控件为了避免开源,都用dcu格式发布自己的第三方控件,使得其他人无法得到源代码。如此说来,dcu是可以被编译进EXE文件的,病毒利用了这一点邪恶了编译器。
关于病毒的流程这里就不多说了,大家可以去看我的上一篇文章关于sysconst病毒的一点分析
既然我们知道了,sysconst.dcu是由sysconst.pas编译而来,那么病毒在pas文件中做了什么,那就是很重要的一个步骤了,我们也知道,pas当中包含了各种常量的定义,比如:
SUnknown = '<unknown>';
SInvalidInteger = '''%s'' is not a valid integer value';
SInvalidFloat = '''%s'' is not a valid floating point value';
SInvalidCurrency = '''%s'' is not a valid currency value';
SInvalidDate = '''%s'' is not a valid date';
SInvalidTime = '''%s'' is not a valid time';
一个程序不可能没有常量(Consts),因为这个缘故,所有进行编译的EXE都要引用这个单元,这样就正中病毒作者的下怀。当然这里大家可能会有一个疑问,既然Pas没有被感染(Pas被感染后就被病毒删除了,留下的是干净的pas),生成的EXE为什么会被感染呢?答案很简单,因为Delphi的编译器引用常量单元的时候,不是引用sysconst.pas而是sysconst.dcu,所以病毒不需要感染pas文件,只要保证dcu文件被感染过就行了。
事实上,每个EXE被编译的过程,都要经过dcu这个中间文件:
1、首先编译器把目标pas文件编译成dcu文件,实现代码到二进制的转换。
2、编译器当中的链接器(linker)将所有的dcu文件汇编成exe文件。
编译生成的EXE当中,首先运行的是初始化代码,然后会转到程序当中的Begin处,而sysconst.pas掌管的就是初始化(initialization)部分,因此,无论在Begin事件后怎样编写代码,都无法影响到这个病毒,在sysconst.dcu当中加入的代码会被直接编译进EXE文件,而EXE当中的附加代码则会重复查找Sysconst.pas并且感染文件这一过程。
这个病毒是否无法察觉呢?答案是否定的。编译生成的新sysconst.dcu一般会比原来的那个大好几KB,笔者的电脑上,这个文件有20KB,而未被感染的同名文件只有13-14kb左右,而编译生成的带毒EXE和普通EXE在大小上也有5-6KB的差距。
如果利用各种防御措施,在病毒感染pas之后,没有让其自删除(可以利用主动防御拦截deleteFile操作),而是保留了罪证的话,那样。。。嘿嘿
查看被感染的pas代码,会有如下发现:
{$IFDEF LINUX}
SEraEntries = '';
{$ENDIF}
SCannotCreateDir = 'Unable to create directory';
SCodesetConversionError = 'Codeset conversion failure';
Implementation
Const infect=’infect’
Procedure infect
Begin
Infectcode//这里被病毒插入了代码,为了简便用infectcode伪代码代替
End
Begin
Infect;//感染过程,调用上面的代码
end.
到了这里大家应该都明白了吧?
这里纠正一个错误,上个帖子当中本人说到这个病毒对D2000+无效,事实上如此,但是原理不正确,这个病毒可以感染D2000+,只是由于D7和D2007的注册表位置不一样,D2000以上就变成了HKEY_LOCAL_MACHINE\SOFTWARE\CodeGear\BDS\X.0\
病毒没这么智能,所以也改不了这个键值,D2000也就幸免于难了。
最后说下预防的方法,要想预防这个病毒,把DCC32.exe移动到其他的目录下,病毒找不到编译器,自然无法进行编译感染了;或者在lib文件夹下面新建一个名称为sysconst.bak的文件,病毒能够打开这个文件,就会误认为被感染过了,因此我们也可以逃过一劫。
[解决办法]
up
mark
[解决办法]
没空,先MARK
我日你的 回复内容太短了!
[解决办法]
感谢分享
mark
[解决办法]
接分
我日你的 回复内容太短了
[解决办法]
[解决办法]
学习了
回复内容太短了!
[解决办法]
[color=#FFFFFF]学习学习[/color]
[解决办法]
[解决办法]
[解决办法]
支持一下先......
[解决办法]
?????????.......
[解决办法]
学习了
回复内容太短了!
------解决方案--------------------
Thanks.
学习了
[解决办法]
厉害啊,学习了。。。
[解决办法]
upupupupupupupup
[解决办法]
[解决办法]
没空,先MARK
我日你的 回复内容太短了
[解决办法]
[解决办法]
[解决办法]
学习学习^^^^^^^^^^^^^^^^^^^^^^
[解决办法]
有点复杂,看不懂,学习一下。
[解决办法]
http://www.bvbuy.cn/TopSales.html
[解决办法]
mark
mark
[解决办法]
有点复杂,看不懂,学习一下。
[解决办法]
sysconst.bak
很好
[解决办法]
[解决办法]
还以为是讲delphi坎坷的前景呢
[解决办法]
有点复杂,看不懂,学习一下。
[解决办法]
各位大侠回复积分增加不增加啊,谢谢了
[解决办法]
学习,jf
[解决办法]
谢谢ls的兄弟,晚上回家试试
[解决办法]
学习 很好 很有帮助
[解决办法]
delphi 好像很久没有用了。项目不让用了。
[解决办法]
学习。。。。。学习。。。。。。。。。。。。。。。。。。
[解决办法]
学习。。。。。。。。。。。
[解决办法]
好用,,,,谢谢 好像很久没有用了
[解决办法]
支持一下
支持一下
[解决办法]
dingy! !!!!!
[解决办法]
感谢分享
mark
[解决办法]
看不懂 也支持一下
··········
[解决办法]
看不懂,支持一下......
[解决办法]
好贴,学习~~~~
回复内容太短了!
[解决办法]
真富足
学习了
[解决办法]
------解决方案--------------------
看看啊,看看了,回复太短了
[解决办法]
看看啊,看看了,回复太短了
[解决办法]
楼主去投稿了没有啊,呵呵,没准还能赚些稿费呢
[解决办法]
谢谢楼主提醒哦。。。。。。
[解决办法]
厉害厉害!学习了!!!
[解决办法]
xue xi xue xi
[解决办法]
明白了,看了一下sysconst.dcu的属性,没中毒
[解决办法]
当学生就是好,有时间去搞这些东西,羡慕
[解决办法]
当学生就是好,有时间去搞这些东西,羡慕,cai bu hao ne 一点不好
[解决办法]
强啊
我也想 向你学
[解决办法]
强啊
我也想 向你学
[解决办法]
学习学习 学习学习
[解决办法]
有点复杂,看不懂,学习一下。
日后研究
[解决办法]
有点复杂,看不懂,学习一下。
[解决办法]
这种病毒的症状楼主说了,但中毒者是怎么中毒的?即:电脑第一次中毒的起源?
[解决办法]
此病毒貌似是有delphi的机子上,拷回了一个染过毒的delphi程序,运行后便进行感染。
昨天是第二次中delphi梦魇。。。顶一个~
[解决办法]
接分..................
[解决办法]
感谢分享
mark
[解决办法]
好东西,我看看!不夺城一三三
[解决办法]
好多 杀软 能直接 清除了
[解决办法]
每天回帖即可获得10分可用分
[解决办法]
mark
回复内容太短了!
[解决办法]
虽然太短了,我也日你
[解决办法]
这个。。。学习了。。。
[解决办法]
xuexi/////...........
[解决办法]
很不幸我的SysConst.dcu只有11.3K所以估计没中但据体也没研究过原文件多大,所以也没法估算
有一次我要读写注册表起动项都被杀了,所以我对病毒不是很感冒,杀软只是软件不是人工智能,我相信我自已多一点
[解决办法]
支持,框架让程序员更加成为工具、民工
[解决办法]
[解决办法]
学习了,被这个东西烦过
[解决办法]
学习了,被这个东西烦过
------解决方案--------------------
有源代码吗?拿出来学习一下啊
[解决办法]
学习了,谢谢楼主分享
[解决办法]
mark 一下
[解决办法]
UP
先
收
藏
[解决办法]
好象都是治标的,有没有治本的呢?
[解决办法]
每天回帖即可获得10分可用分!
[解决办法]
[解决办法]
支持下 好的 东西
[解决办法]
太难熬了………………………………………………
[解决办法]
今天终于明白了一点啊。谢谢楼主分享啦
[解决办法]
各位大侠回复积分增加不增加啊,谢谢了
[解决办法]
看帖要回,养成好习惯
[解决办法]
先回帖再看贴 养成好习惯
[解决办法]
先MARK
我日你的 回复内容太短了