VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:8979回复:30

病毒的本质

楼主#
更多 发布于:2002-10-11 16:32
病毒的本质
by Koms Bomb/CVC.GA

本文的目的,就是想说明写病毒其实是多么的容易。
一,病毒神话
我们先看看让大家“兴奋”、“激动”的病毒技术。
1,CIH,简直成了神话,CIH的作者也成为无数人的偶像。这神话,是AVer吹出来的,这偶像,只是中国人盲目崇拜的延续,外国人没这臭毛病。看看这个病毒里究竟有什么?1K多点的代码,再厉害能有什么?我觉得这个病毒唯一比较好的地方就是它的非常优化。这种优化,其实说白了也不难,只要稍微有些汇编编程经验,再加上一部指令手册(至少要有指令长度),再有足够的耐心,都可以做到。其它还有什么?进入Ring 0?早已有之,再说稍微懂些保护模式的人都知道利用GDT/IDT/LDT是可以进行特权转换的,常识问题。感染后文件大小不变?稍微了解PE格式的人都知道PE里有多少空地。使用VxD技术?Flash BIOS?只要能找到这些资料,有什么难的?VxD无非就是玩一些int 20h,Flash BIOS无非是写一些端口。调用中断,写端口,谁不会?但怎么调中断,写哪些端口,则需要知道相关的资料。我就写不出VxD为基础的病毒,我也不会Flash BIOS,因为我没有这方面的资料。
再看看时下“热门”的病毒技术。
2,跨平台病毒。跨Windows和Linux,同样是X86指令,有什么特殊的吗?基本上这种跨平台病毒,公用一部分变形之类的和OS无关的代码,而和OS有关的则是分开的。比如在Windows上就调用API,而在Linux上则用int 80h(没搞错中断号吧,我对Linux没什么研究)。其实就相当于两个病毒的合并。只要有了相关系统调用的资料,这种病毒显然很容易。其实写出针对不同CPU的病毒也不难,只要针对不同的文件感染不同的代码,然后把另外OS或CPU的代码做为数据不执行就行。顺便说一句,跨平台有什么用?有几个Linux机器上有PE文件的?又有几个Windows上有ELF文件的?
3,.net病毒。有什么新鲜吗?Java不是也有病毒吗?只要掌握MSIL汇编,写一个真正的.net病毒并不难。值得一提的是前一阵炒得火热的两个.net病毒其实根本难登大雅之堂。29A的那个是用X86汇编写的,稍微有点头脑的都知道,.net是架构在MSIL上的,是一种中间语言,X86汇编根本就和.net无关。我没仔细看这个病毒的代码,但我估计无非是对EPE格式有一些不同于PE的操作,总体来说,还是PE病毒。那个“17岁天才少女”的C#病毒,算是.net病毒吧,但值得一吹吗?你,说的就是你,去看看C#语法,再略微看一些.net framework,相信你也可以用C#写出一个可以把自己通过邮件发出去的程序,这就是时髦的.net病毒。
4,metamorphism。简直被AVer吹上天了。这东西说白了其实就是对自身代码进行重新编码。过程是,反汇编自己的代码,重新改写(比如mov eax,esi可以写成push esi;pop eax等等),插入垃圾代码。当然最好还要在下一代中删除垃圾代码。怎样判断垃圾代码?显然看到一条指令的目的操作数在以后没有被当作源操作数,就可以认为是垃圾。这东西玩弄的是机器代码技巧,只要在手边摆一部Intel的指令手册,再加上足够的耐心,想对代码重新编码,不难。但写这东西确实很繁琐,可以说是非常繁琐,写出的代码也很大,没有实用价值。以后有空我可能会重新考虑一个semi-metamorphism,也不难,但力求小,如果engine超过8K,我将放弃。

二,病毒的本质
大家之所以觉得病毒神秘,其实主要是因为大家没有对病毒没有了解,AVer又在大肆鼓吹(这种现象在中国尤为严重)。病毒到底是什么?
病毒是一段程序,它与普通程序的不同是它会复制自己,这是最主要的不同。复制有很多方法,直接copy,通过网络,插入别的可执行文件内部,等等,但这些方法的实现也是一段程序,并无特殊之处。
其实写病毒和写普通程序一样,不需要太高的智商。我为什么这么说?编程只是技术,这种技术所需要的基础知识是很浅的,可以说是非常浅,而且没有阶梯性。如果你要做物理学家,则一定要先学会中学物理,否则你就学不会大学物理。但如果你要做汇编程序员(听起来很高深的样子),你不必先学Basic,再学Pascal和C,最后学汇编,你完全可以从一开始就学汇编,完全没有问题。很多人以自己了解系统核心而自称高手,但这哪里高了?可能他花了三个月发现的一个系统核心的秘密,只是M$的一个程序员用一个小时写出来的。这一点也造就了很多“天才少年/少女”的神话,十几岁的小孩可以写出很好的程序或者病毒,让大家觉得真是天才。其实我敢肯定一个10岁的小孩对编程知识的理解能力不会比我差,甚至可能因为年龄小记忆力好而比我强,大家认为我智商有问题?也许吧,但小孩一样比你强。中国人对电脑界的“天才少年”总是津津乐道,其实只是愚蠢无知的表现。编程不需要智商,但需要资料,如果你不掌握一定数量的Win32 API,你很难写出像样的Win32程序。其实程序这东西还和物质力量有关,为什么外国有很多编程方面的“天才少年”?因为他们智商高?显然不是,中国人的智商至少不输于西洋人。主要是因为他们比较富裕,可以很早就接触电脑,并且有钱上网,上网当然可以获得许多有用的资料。靠,说到这里我不得不发牢骚,我正式开始能够经常接触电脑还是在2000年大学毕业以后。我在十几岁的时候,买本书都没钱,更别提电脑了,现在平时在家还是拿猫上网。
我说了这么多,其实一个结论就是,写病毒和写普通程序一样,不需要智商(当然智商也不能太低,如果智商低于80,除非真的是另类天才,否则还是别玩程序的好),但需要资料,这间接的需要物质力量。
所以说,病毒并不神秘,一点都不神秘,而且不难,可以说是相当简单,因为他们通常很小,最大也就几十K。我现在逐渐明白,哪怕是用Delphi这样易用的工具,开发大型程序,也是比较复杂比较困难的事,要有完善的设想,科学的模块划分,等等。
病毒虽然简单,但也有很好玩的地方,因为它的本质就是复制隐藏自己。如何更快的复制传播自己,如何隐蔽自己使得用户不容易发现病毒的踪影,是我的主要研究目标。这种目标显然违背了某些卫道士的“XX精神”(他们鼓吹的是黑客精神,但我不会黑,只会毒,是毒客而不是黑客),但这正是病毒的本质,如果脱离这些本质,那病毒也就不称之为病毒,而且也没必要研究病毒,有那精力不如做点应用软件。这种卫道士,鼓吹的是那种研究“新”、“高深”技术来写病毒的人,这样的病毒也就是AVer说的“学术病毒”、“概念病毒”。但这种病毒有什么用?除了给AVer吹牛的机会以外,没什么用。除了CIH以外,我上面说的基本都是这种病毒。大家可以看看,哪里有新技术?哪里有高深技术?
值得注意的是网上颇为流行江海客的那篇老文章“后英雄时代的AVER与VXER”,而且许多人都认为“受益菲浅”,为了不误导大家,我还是说两句。这篇文章总体来说就是在胡说八道。“AV企业的一般工程师,玩起softice的手法,远没有cracker熟练”?我确实不知道AVer是不是熟悉SI,但这句话有两个大问题,1),玩SI熟练就能代表水平?那好,我从现在开始天天玩SI,一个月后精通SI的各个功能,那我是不是成大师了?这简直是不合人类逻辑。 2),研究病毒一定要用SI?我调试病毒主要用VC,SI只是辅助,非常方便。“想象反病毒公司那些呆头呆脑的样本分析工程师,“**,原来病毒也可以这样编” 的惊呼,然后心情紧张的把样本交给公司中的前辈高人寻求指点他们已经心满意足。”更是胡说八道,有谁相信Symantec的在Nimda,Klez,BugBear爆发几个小时内就拿出解决方案的工程师是呆头呆脑的?”而是用了类似社交工程或者心理学一类的方法“,”当然,那些资深的VXER对此是不耻的,他们从不以自己的病毒传播如何广泛为荣誉,这些人的品性有些类似老牌黑客的绅士风范,这些人中确实也有我很欣赏的“,不是每个人都能做出成功的social engine的,好的S/E会得到全世界人的赞叹(套用卫道士的话,全世界人惊呼,”**,这他都能想得到“),一个人只要有耐心,可以对系统核心钻研很深,这没什么神秘,但好的S/E却需要灵光闪现。不能广泛传播的病毒显然不是好的病毒,无论它的技术如何高超(而且基本如我所说,并没有什么高超的技术),而且病毒和黑客不一样,黑客黑网站,真正有道德的不应该搞破坏,但他有能力可以破上10000个网站。有道德的病毒也不应该搞破坏,但有能力的病毒可以感染1000万台机器,这没什么不对,这是病毒应该做的,当然有能力感染不一定真的感染,不一定真的释放出去,但验证感染能力通常需要实战。还有就是他也是我说的那种卫道士,鼓吹那种黑客精神,其实如果大家都遵循他那种精神,那么结局就是大家整天都在研究不切实际的技术,根本就没有实用品出来。总体说,一个不懂得病毒本质,对病毒没有很深了解,没有写过病毒的人,不配写这种文章。
我一直对知道现在还在奉CIH和其它病毒为神明的无知之人感到气愤,在中国这种人太多了,所以就写了这篇文章,因为气愤,所以言语有不当之处,还望大家见谅,如果你对我感到气愤,可以理论,但不要骂人。


欢迎转载,请注明 by Koms Bomb/CVC.GA。
又:我发现深圳之窗网站曾从CSDN转了我的一篇文章,但去掉了所有作者信息,我给他们发信叫他们改正,也没有回音。这种行为是极度卑鄙无耻的,如果引起众怒将会玩火自焚!
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
ooze
驱动牛犊
驱动牛犊
  • 注册日期2001-09-26
  • 最后登录2004-03-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-10-14 13:21
相同观点,但是开头难啊,有些技术,或者想法,第一个拿出来的还是值得我们尊敬的,如果没有前人的累计的知识,很躲思路,新手根本就不可能掌握。
Be a true hacker of Windows NT alike
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-10-14 13:23
相同观点,但是开头难啊,有些技术,或者想法,第一个拿出来的还是值得我们尊敬的,如果没有前人的累计的知识,很躲思路,新手根本就不可能掌握。
 

但是谁开头?如果Intel不公布芯片指令手册,估计没人会X86汇编,M$不公布MSDN,估计没有几个人会做Windows程序。
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
ooze
驱动牛犊
驱动牛犊
  • 注册日期2001-09-26
  • 最后登录2004-03-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-10-14 13:36
不公布出来,那他做的还叫产品么?
啥都有个开头人,芯片的设计,也是人来做的,做出第一块的才是让人叫好,后来模仿上来的,没什么改进,甚至还落后目前技术的,根本不应该叫好,中国心那种垃圾,也到处张扬,中国科学家的脸还怎么放?
人家有先进的地方,我们必须承认,为什么你想不到这种技术,人家能相出来呢?然后才是你的模仿呢?还有人家可以把知识集成起来,你又为什么要强调,你只知其一,不知其二,就不做?
同样都是写代码,为什么你的就比我的好?难道我就不用承认自己的不足,老是看到你有很多资料,掌握的比我多,这样就行了?

[编辑 -  10/14/02 by  ooze]
Be a true hacker of Windows NT alike
yunri_2
驱动中牛
驱动中牛
  • 注册日期2002-08-16
  • 最后登录2011-09-10
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-10-14 13:37
相同观点,但是开头难啊,有些技术,或者想法,第一个拿出来的还是值得我们尊敬的,如果没有前人的累计的知识,很躲思路,新手根本就不可能掌握。
 

9494
曾经 所以 然后 ~!@ 完 @!~
wumengyun
驱动牛犊
驱动牛犊
  • 注册日期2003-11-06
  • 最后登录2003-12-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-11-07 11:24
牛人,
ldwdos
驱动牛犊
驱动牛犊
  • 注册日期2003-05-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-11-22 23:23
        同意楼主的观点,其实对编程来说,欠缺的主要是资料,剩下的都不是什么大问题

        如果不从根本上提高自己,则我们只是一个可怜的追随者而已,看似懂得了很多底层的东西,可从本质上看,还是一个不折不扣的模仿秀
wpnewems
驱动牛犊
驱动牛犊
  • 注册日期2004-02-08
  • 最后登录2008-02-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-02-08 17:04
非常感谢你的帮助
wpnewems
驱动牛犊
驱动牛犊
  • 注册日期2004-02-08
  • 最后登录2008-02-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-02-08 17:06
dingdingdingdingdingdingdingdingdingvv
wpnewems
驱动牛犊
驱动牛犊
  • 注册日期2004-02-08
  • 最后登录2008-02-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-02-08 17:07
希望能推荐几个技术网站
RED_spring
驱动中牛
驱动中牛
  • 注册日期2002-07-28
  • 最后登录2016-11-06
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望19点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2004-05-22 16:46
\"很多人以自己了解系统核心而自称高手,但这哪里高了?可能他花了三个月发现的一个系统核心的秘密,只是M$的一个程序员用一个小时写出来的。\"

-----------------------------------------------------

哈哈,我就是想知道为什么M$用一个小时写的东东能稳定运行,而我用3年写的东东却跑不起来。 :D

当然了,这和病毒技术无关。
fleabane
驱动牛犊
驱动牛犊
  • 注册日期2004-07-12
  • 最后登录2004-08-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-07-12 14:43
人在win32,不得不低头啊
satanli1982
驱动牛犊
驱动牛犊
  • 注册日期2004-03-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-08-11 09:32
"很多人以自己了解系统核心而自称高手,但这哪里高了?可能他花了三个月发现的一个系统核心的秘密,只是M$的一个程序员用一个小时写出来的。"

这句话经典!!!!
wangshihu
论坛版主
论坛版主
  • 注册日期2003-12-31
  • 最后登录2012-03-26
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望96点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-03-07 16:41
\"很多人以自己了解系统核心而自称高手,但这哪里高了?可能他花了三个月发现的一个系统核心的秘密,只是M$的一个程序员用一个小时写出来的。\"

这句话经典!!!!
ACHER
驱动牛犊
驱动牛犊
  • 注册日期2003-12-19
  • 最后登录2005-09-07
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2005-05-23 18:10
归根结底
0+0=0
0+1=1
1+0=1
1+1=0
大家都别学了,学习还有什么用啊?所以学数字通信的(包括软硬)都是个废物,哈哈
我不是学数字的,学模拟的,公式都是经验公式,我想应该比较牛比。
wonder_2001
驱动小牛
驱动小牛
  • 注册日期2002-07-02
  • 最后登录2010-12-03
  • 粉丝0
  • 关注0
  • 积分452分
  • 威望96点
  • 贡献值0点
  • 好评度36点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2005-06-22 17:57
我认为缺少的是时间,资料不是关键。
wino_2008
驱动牛犊
驱动牛犊
  • 注册日期2005-07-05
  • 最后登录2005-08-16
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2005-07-06 13:28
不完全支持楼主的观点,创新精神应该值得鼓励!

有些东西做出来了不是因为它有多难多高深而大家为它叫好,而是谁第一个想到并且把它做出来了
carroty
驱动牛犊
驱动牛犊
  • 注册日期2005-01-05
  • 最后登录2005-12-23
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2005-07-19 21:43
第一个吃螃蟹的人难得.说的一文不值也是不对的.从lz的文章我没有什么获益,以前读过作者的几篇pe病毒入门的文章,觉得很不错.
另外写病毒不光需要资料,而更多的需要耐心和激情.
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2005-07-21 10:58
我认为病毒的本质是机器的快速性和机械性与人的慢速性和智能性的差别
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
kinbvan
驱动牛犊
驱动牛犊
  • 注册日期2005-04-11
  • 最后登录2005-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2005-08-09 09:31
看了这篇文章,受益匪浅,非常钦佩楼主的精神!!
上一页
游客

返回顶部