木马编程

发布时间:2019-04-12 05:44:26   来源:文档文库   
字号:

C木马

【内容提要】

本书全面介绍了C/C++语言网络编程和Socket编程的基本方法。重点剖析了目前流行木马的编程方法,揭露了黑客木马编程技术内幕。本书的特色在于从整体入手,先学习木马程序的整体框架雏形,然后一步一步地深入学习木马编程中的隐藏技术、管道技术、反弹技术以及远程注入技术等,全书结合多个生动案例,环环相扣,深入浅出,实现黑客编程技术的融会贯通。 本书提供的程序代码力求完整、精简以及可读性强,为初、中级黑客编程爱好者提供了实用的学习参考资料。同时也可以作为大中专院校学生课外编程参考资料。

【序】

一直以来想写一本关于黑客编程方面的书,一方面,市面上流行的黑客书籍大多拘泥于黑客工具的使用上,仅适合入门级的黑客技术爱好者;另一方面,黑客技术博大精深,自身的学识浅薄,不能写成令大家满意的作品,所以就一直搁浅。由于我的上一部专著《信息安全顾问最佳实践指南》的读者给了我颇多的建议,同时也给了我写一本黑客编程方面的书籍的信心。在中国,随着Internet的发展,黑客技术的爱好者也越来越多,水平也越来越高,他们不再满足使用别人的工具,也想自己亲自动手编制一些工具,这就非常需要一部关于黑客技术理论方面的书籍。

兵家云:"知己知彼,百战不殆",毛主席也说过"要想知道梨子的滋味,就得亲自尝一下",所以,我们要亲自动手编制一些实用的小程序,首先,我们要摈弃那些代码冗长,功能大而全的程序;其次,从整体入手,先有面的概念,然后在学习点的知识,最后串起来;最后,任何代码都要在实践中进行检验,所以,在本部书最后一章设计了四个完整实用的程序,给读者一个豁然开朗的感觉。

【本书的组织】

19章主要内容如下:

1章,木马介绍-介绍了木马的历史以及当前木马的发展趋势。

2章,Windows下黑客编程语言-如何学习黑客编程以及C/C++语言的使用入门。

3章,Socket套接字编程基础-TCP/UDPSocket介绍,木马基本结构介绍。

4章,木马隐藏技术剖析-介绍了注册表的自启动加载技术、服务的加载技术、DLL远程注入的加载技术。

5章,匿名管道技术-介绍了匿名管道的技术利用,单、双管道后门代码的分析,以及简单的双管道后门。

6章,反弹木马技术-介绍了反弹木马的出现背景,着重分析了反弹木马的原理以及给出反弹式木马的源代码。

7章,端口重用技术-介绍了端口重用的实现方法,以及给出了端口重用的源代码。

8章,黑客编程经典代码-给出了经常使用的部分C语言源代码,例如:下载者、关机、进程查杀等。可以直接使用或作为函数使用。

9章,实战编程-从实践出发,通过四个真实的案例,对学过的技术进行练习,由浅入深,最后做出真正实用的木马。

【致谢】

最后,感谢一直支持我的家人和朋友,在写作的过程中,每当我遇到困难的时候,甚至放弃的时候,是他们给了我巨大的精神鼓舞和物质支持,在此,再一次向他们表示感谢。

【目录】

第一章 木马介绍... 1

1.1木马发展历史... 1

1.2国内木马发展趋势... 3

第二章Windows下黑客编程语言... 10

2.1如何学习黑客编程... 11

2.2黑客编程的基本技巧... 12

2.3 C语言编程入门... 14

2.3.1 C程序结构... 14

2.3.2利用VisualC++6.0编译... 16

2.3.3VisualC++6.0 使用技巧... 18

第三章Socket套接字编程基... 22

3.1客户机/服务器模式介绍... 22

3.2基于TCPsocket编程... 27

3.3基于UDPsocket编程... 28

3.4 木马雏形框架... 32

3.5木马源码剖析... 33

第四章 木马隐藏技术剖析... 37

4.1 注册表加载技术... 40

4.1.1注册表的基本操作... 44

4.1.2 代码实现注册表自启动... 48

4.2服务级的木马技术... 49

4.2.1 Windows服务简介... 49

4.2.2编程实现服务级木马... 51

4.3 DLL远程注入技术... 55

4.3.1 动态链接库... 62

4.3.2 DLL木马的启动... 63

第五章 匿名管道技术... 68

5.1匿名管道技术的利用... 68

5.2单管道后门代码... 71

5.3双管道后门代码... 73

5.4简化双管道后门代码... 76

第六章 反弹木马技术... 78

6.1什么是反弹式木马... 78

6.2反弹式木马的原理... 78

6.3反弹木马程序源码... 80

第七章 端口重用技术... 82

7.1端口重用实现... 83

7.2端口重用实现代码... 86

第八章 黑客编程经典代码... 95

8.1 下载者源码... 95

8.2 关机源码... 96

8.3 获取系统信息源码... 96

8.4 进程查杀源码... 100

第九章 实战编程... 103

9.1牛刀小试-我的第一个木马... 103

9.2进一步思考-穿过防火墙... 106

9.3再进一步-控制与隐藏... 116

9.4终极篇-实战检验... 132

【其他】

书名:C/C++木马编程进阶与实战

作者:赵玉明

开本:780x1000 1/16 字数:200 千字

版次:20083月第一版 20083月第一次印刷

印数:00015000

定价:35.00

第一章 木马介绍

什么是"木马"

正像历史上的"特洛伊木马"一样,被称作"木马"的程序也是一种掩藏在美丽外表下打入我们电脑内部的东西。确切地说,"木马"是一种经过伪装的欺骗性程序,它通过将自身伪装吸引用户下载执行,从而破坏或窃取使用者的重要文件和资料。

木马程序与一般的病毒不同,它不会自我繁殖,也并不"刻意"地去感染其他文件,它的主要作用是向施种木马者打开被种者电脑的门户,使对方可以任意毁坏、窃取你的文件,甚至远程操控你的电脑。木马与计算机网络中常常要用到的远程控制软件是有区别的。虽然二者在主要功能上都可以实现远程控制,但由于远程控制软件是"善意"的控制,因此通常不具有隐蔽性。木马则完全相反,木马要达到的正是"偷窃"性的远程控制,因此如果没有很强的隐蔽性的话,那么木马简直就是"毫无价值"的。

一个完整的"木马"程序包含了两部分:"服务器""控制器"。植入你的电脑的是它的"服务器"部分,而所谓的"黑客"正是利用"控制器"进入运行了"服务器"的电脑。

众所周知,基于TCP/IP协议接入互联网的电脑有065535256×256个端口。通常我们上网的时候,电脑通过80端口与外界保持联系。运行了木马程序的"服务器"以后,你的电脑就会有另一个或几个端口被打开,使黑客可以利用这些打开的端口进入你的系统,你的系统安全和个人隐私也就全无保障了!

1.1木马发展历史

计算机世界中的特洛伊木马的名字由《荷马史诗》的特洛伊战记得来。故事说的是希腊人围攻特洛伊城十年后仍不能得手,于是阿迦门农受雅典娜的启发:把士兵藏匿于巨大无比的木马中,然后佯作退兵。当特洛伊人将木马作为战利品拖入城内时,高大的木马正好卡在城门间,进退两难。夜晚木马内的士兵爬出来,与城外的部队里应外合而攻下了特洛伊城。而计算机世界的特洛伊木马(Trojan)是指隐藏在正常程序中的一段具有特殊功能的恶意代码,是具备破坏和删除文件、发送密码、记录键盘和攻击等特殊功能的后门程序。

? 第一代木马 :伪装型病毒

这种病毒通过伪装成一个合法性程序诱骗用户上当。世界上第一个计算机木马是出现在1986年的PC-Write木马。它伪装成共享软件PC-Write2.72版本(事实上,编写PC-WriteQuicksoft公司从未发行过2.72版本),一旦用户信以为真运行该木马程序,那么他的下场就是硬盘被格式化。在我刚刚上大学的时候,曾听说我校一个前辈牛人在WAX机房上用BASIC作了一个登录界面木马程序,当你把你的用户ID,密码输入一个和正常的登录界面一模一样的伪登录界面后后,木马程序一面保存你的ID,和密码,一面提示你密码错误让你重新输入,当你第二次登录时,你已成了木马的牺牲品。此时的第一代木马还不具备传染特征。

? 第二代木马 :邮件型木马

PC-Write之后,1989年出现了AIDS木马。由于当时很少有人使用电子邮件,所以AIDS的作者就利用现实生活中的邮件进行散播:给其他人寄去一封封含有木马程序软盘的邮件。之所以叫这个名称是因为软盘中包含有AIDSHIV疾病的药品,价格,预防措施等相关信息。软盘中的木马程序在运行后,虽然不会破坏数据,但是他将硬盘加密锁死,然后提示受感染用户花钱消灾。可以说第二代木马已具备了传播特征(尽管通过传统的邮递方式)。

? 第三代木马:网络传播性木马

随着Internet的普及,这一代木马兼备伪装和传播两种特征并结合TCP/IP网络技术四处泛滥。同时他还有新的特征:

第一,添加了"后门"功能。

所谓后门就是一种可以为计算机系统秘密开启访问入口的程序。一旦被安装,这些程序就能够使攻击者绕过安全程序进入系统。该功能的目的就是收集系统中的重要信息,例如,财务报告、口令及信用卡号。此外,攻击者还可以利用后门控制系统,使之成为攻击其它计算机的帮凶。由于后门是隐藏在系统背后运行的,因此很难被检测到。它们不像病毒和蠕虫那样通过消耗内存而引起注意。

第二,添加了击键记录功能。

从名称上就可以知道,该功能主要是记录用户所有的击键内容然后形成击键记录的日志文件发送给恶意用户。恶意用户可以从中找到用户名、口令以及信用卡号等用户信息。这一代木马比较有名的有国外的BO2000BackOrifice和国内的冰河木马。它们有如下共同特点:基于网络的客户端/服务器应用程序。具有搜集信息、执行系统命令、重新设置机器、重新定向等功能。 当木马程序攻击得手后,计算机就完全在黑客控制的傀儡主机,黑客成了超级用户,用户的所有计算机操作不但没有任何秘密而言,而且黑客可以远程控制傀儡主机对别的主机发动攻击,这时候背俘获的傀儡主机成了黑客进行进一步攻击的挡箭牌和跳板。

1.2国内木马发展趋势

BO、冰河诞生以来,国内的木马历史便正式展开了,下面我们以技术的发展突破作为界限,分别说说他们的历史和发展趋势。

? 后台运行程序

早期的特洛伊木马后门先驱可以追溯到1997年那个网络在国内还未大量普及的时代,在当时,初期阶段的特洛伊木马技术在国外早已热火朝天,而国内众多用户却还在用着拨号上网偶尔浏览新闻和下载文件,只有少数用户知道并研究外国传入的英文界面特洛伊木马程序BOSubSeven等,木马技术始终属于少数人手里的"高科技"入侵工具,直到国产木马"冰河"的出现和随后的几个版本升级,才标志着国内用户迎来了网络木马的混沌时代。冰河在2000年停止更新时放出的最后一个版本更是让大家第一次体会到了远程控制他人计算机的心跳感觉,于是冰河在短时间内就掀起了一股热潮,一时之间国内许多计算机都对外开放了被冰河驻扎的标志--7626端口,并且大量的扫描报告也都指向7626端口,随后众多带有模仿性质和改良优化的其他后门也相应出事,这个时代的后门入侵是极其简单的,究其原因,是由于那时候网络防火墙的雏形仍在探索发展阶段,大部分网络用户都是处于毫无防备的状态下,而且那时候又有几个人明白所谓的"安全问题"是什么东西呢?于是许多人依靠这些木马入了门。

这一时期的木马在现在的时代眼光看来,都是及其简单的入门级产品了,但是由于当时的主流系统是安全性马马虎虎的Windows 9x系列,这些木马只需要简单的一些功能函数就实现了在任务管理器中的隐藏,而且由于当时并没有太多相对强大的第三方任务管理器,加上用户自身安全意识比现在相对更低,于是造就了一个木马招摇过市的时代。

从技术上看,这时期的木马后门普遍都是运行于用户层(Ring3)上的隐藏了窗体并将自己在Windows9x中注册为"服务程序"RegisterAsService)的后台网络应用程序,而且大部分并不存在自我保护功能,就连冰河的自我保护也是更改了一些常用文件如文本文件等类型的打开方式以实现的;这一时代的木马启动项也非常简单易找,就现在的木马发展程度来说,它们充其量只能作为初学者的木马查杀防范入门练习教材罢了,首先这些木马的标准运行环境是毫无安全防御可言的Windows 9x系统,到了NT架构系统上甚至会直接报错退出运行了,只有少数木马对NT架构系统做了一点额外设置以便绕过Win9x专有的系统函数来确保运行顺利,但是这样的后果就是它们直接在NT系统自带的任务管理器中暴露并简单终结掉了;其次,用户只需要找到它的进程并终结,然后简单的清理一下启动项残留数据就完成了木马的查杀--大部分此类型的木马的全部家当就是一个能够自我复制到系统目录并设置自启动项的可执行程序而已,只要这个程序消失,就等于把整个木马扫地出门了。然而,由于这一时期的用户群体几乎没有安全意识和相应反病毒产品领域的空白,这一批木马技术先驱却为后面的木马发展打下了不可忽视的基础。

? 内部间谍软件

好景不长,随着越来越多用户对信息安全有了隐隐约约的需求和安全厂商适时推出了用于屏蔽过滤外部异常访问扫描的网络防火墙产品以后,许多用户即使对计算机处于朦胧状态,也会给自己安装一个网络防火墙产--虽然用户可能根本连它的用处是什么都不知道;其次,网吧作为一种大众普遍上网场所也开始流行起来,初涉木马的试探者们很快发现他们无法成功对网吧里的电脑进行连接控制了,但是在网吧里使用木马连接Internet上的受感染机器却又不存在这个问题,这是为什么?因为网吧的内部网络环境是一个局域网,它使用私有IP地址进行通讯,对外部网络的访问出口是通过代理服务器(Proxy)或路由器NAT(网络地址转换,Network Address Translation)方式实现的,这两种方法都会屏蔽掉内部网络,所有内部网络中的计算机对于公共网络来说都是不可见的,也就是说,无论用户在网吧内部什么机器上种植了木马,那么只要他离开了网吧到外面的公共网络中意图对这个木马进行连接控制,他就会发现无论如何努力都做不到了,这是由于网吧对外提供的只是一个由网络接口设备负责通讯和地址转换的公共网络IP,用户在公共网络中执行的访问操作都只会被视为对这个网络接口设备的访问,而这个网络接口设备上是不可能存在用户刚才在网吧内部机器中设置的木马的,而且由于连接条件匹配不充分,它也不会把这个连接请求转交给内部网络中任何一台计算机,所以网吧内部网络里植入的木马根本就收不到来自外部的连接控制请求,自然也就无法工作了。

这个现象直接导致了基于C/S(客户端/服务端)模式的传统木马在遇到网吧或者类似的局域网环境时无功而返,同时一部分安装了网络防火墙的用户也由于防火墙默认屏蔽了外部网络访问的大部分端口而幸免于难,在相当一段时间内造成了传统木马一蹶不振的局面,然而好景不长,在经过一段时间的沉寂后,一种新型的木马连接概念被提出来了,虽然其原理也是基于C/S模式的网络连接,但是在连接时却将态度转了180度:这次的入侵,发出第一个连接请求的不再是远程控制者使用的客户端,而是受害者的木马服务器端。第一个使用此概念的木马名为"网络神偷",被设计用来从局域网内往外盗取文件数据。

这个概念被业界称为"端口反弹",它的实现思路是将以往的C/S模式来了个逆转:客户端开启一个本地端口来监听远方连接请求,而服务端却是通过一些方法获得客户端IP以后主动来连接它,最终实现远程控制。这个思路一下子就把网络防火墙打个措手不及,因为早期的防火墙开发者并未考虑过通过本机主动发起的连接也会出现这种意料之外的情况,而对于网吧等局域网环境,它们更只是会把这一行为视作用户发出的一次正常网络请求,于是,这个来自心灵地狱的连接请求最终和入侵者碰了头,连接成功后发生的事情就和传统木马所要做的所有事情一模一样了。

在早期网络防火墙尚未出现记录本机主动连接请求的功能之前,要判断自己的机器上是否存在反弹型木马是一件比较困难的事情,因为使用端口反弹概念的服务端并不主动开放任何端口连接,在其未发起入侵连接之前,用户无法得知自己机器进程里是否有异常,直到它与远方入侵者建立了连接,用户才有可能在网络程序状态检测工具里看到一些对外连接的进程信息,可是这样主动对外连接的进程也太多了,如Internet ExplorerFoxmailQQ等也都是主动对外连接的,一般的用户根本就无法将其判断分析出来。端口反弹型木马的出现虽然让入侵的隐蔽等级又提高了一个层次,但是它也不是无懈可击的,由于木马需要实现主动连接客户端的功能,而大部分入侵者是不会使用固定IP的,在生成木马服务端的时候就必须使用一个相对固定的公共网络连接方式让服务端以后能通过这个途径得到客户端的控制请求,这一途径经常是公共网络上的HTTP空间或FTP空间,随着技术发展还出现过依赖动态域名直达客户端的端口反弹型木马,它们与客户端建立连接的步骤是:

1.服务端根据入侵者预设的反弹依据,连接到一个指定的公共网络空间里,通过读取某个数据文件获得客户端的当前IP地址,这个数据文件是通过客户端的自动更新上传实现的。

2.获得IP地址数据后,服务端尝试与之建立连接

3.如果连接成功,则开始控制行为

? 无进程"木马后门

2002年和2003年间,网络上出现了3款令当时的用户和安全技术者大呼头痛的木马作品"广外系列",分别是"广外男生""广外女生"以及"广外幽灵",这3个作品都使用了在当时颇感新鲜的技术"远程线程注射",做到了国内真正意义上的第一款"无进程"木马--DLL木马。

"广外男生"的主体是一个可执行程序EXE和一个动态链接库DLL,而EXE只是用于在开机时调用这个DLL执行木马主线程并使用"远程线程注射"RemoteThread Inject)技术将DLL与这个EXE脱离开来,然后DLL的线程进入系统里现有的任意一个进程的内存空间中维持运行,而用于执行最初的DLL启动工作并实现在DLL被破坏时复活它的EXE会在DLL成功插入其他进程后自动退出,这种传统的DLL启动方式成为早期大量DLL木马的加载方式,所以它存在一个弱点:在计算机启动时用户如果查看任务管理器的速度稍微快一些,他就能看到一个迅速消失的进程,而且这时期的DLL木马虽然实施了无进程启动,但却是被动的加载方式,在如今可以枚举并终止进程中相关DLL模块的程序遍天下的现状中,任意一款具备进程模块查找功能的程序如Process ExplorerIceSword等都能将它们清理干净--它们的文件名太明显了。

但是不得不否认,早期的DLL木马技术虽然只是个雏形,但它却是为如今到处横行的真正无第三方EXE加载项(使用特殊技术令系统外壳程序加载它)的众多恶意软件和木马的DLL主体的技术实现做了铺垫。从最初的第三方EXE加载DLL启动方式开始,到随后的使用rundll32.exe加载运行,再到利用NT服务的宿主程序svchost.exe实现启动,直到现在的技术巅峰--使用"ShellExecuteHook"(执行挂钩)技术。

经常关注安全的用户或许会见到过"ShellExecuteHook",如今许多木马和恶意程序都在用户层使用它作为启动方式了,但这是一种什么技术,大家可能又会迷惑不解了,究竟这个技术和木马有什么联系?其实这是一种正常的系统功能,名为"执行挂钩",操作系统厂商开发它的初衷十分简单:为程序提供一个额外的通知功能,以实现系统中任何程序启动时都提前让使用了"执行挂钩"的程序收到新程序的启动通知,简单的说,这是操作系统在出于某种程序交互需求的考虑下所衍生的技术,它的作用就是让一部分程序能够在其他程序开始运行之前就得知有新程序即将运行的通知,以及这个程序的映像文件名称等信息,用于接收通知的程序必须遵循COM对象编程标准编写。

这个技术是通过外壳程序Explorer.exe实现的,它的加载项被指定在系统注册表"HKLMSoftwareMicrosoftWindowsCurrentVersionExplorerShellExecuteHooks"内,用户浏览这里会发现里面并不是熟悉的路径和文件名,而是一堆奇怪组合的数字和字符串,这些字符串被称为"Class ID"(类唯一标识符,CLSID),每一个DLL模块都拥有属于它自己的唯一CLSID,操作系统自身是通过CLSID获得这个DLL的详细文件位置并加载它的。在执行挂钩技术里,这个注册表键里的数据就代表了申请接受通知的DLL模块的CLSID,当一个新程序执行时,系统会将这个消息通过注册表的执行挂钩入口派发出去,而后系统会载入这些符合COM对象标准的DLL文件以执行它预先定义的线程代码对消息进行处理,换句话说,也就是系统自己启动了声明为"执行挂钩"对象的DLL模块,它们的初次加载程序是外壳Explorer.exe。看到这里,各位是不是觉得这个过程很熟悉?没错,这简直就是第一代DLL木马依靠第三方EXE实现自启动的翻版,所不同的是,这次的DLL启动宿主是系统外壳自身,而且它还拥有一个任何第三方EXE宿主都无法具备的功能:确保DLL在每一个进程启动时自动加载运行。

这个技术最早被杀毒软件用于实现提前检测功能,然而现在它却被恶意软件、木马后门等程序编写者大量的用在了不法行为之上,与IFEO的初衷一样,它们的功能都被曲解应用了。

由于这个技术的执行逻辑使得木马主体DLL可以在每一个程序运行时也随着它执行并随之进入它的内存空间,成为其模块之一,也就是说,这个技术使得做了保护措施的DLL木马变得难以彻底查杀,而且它不会产生任何敏感位置的启动项,也不需要指明一个加载器--它的加载器就是Explorer.exe自身。而广大用户中,能够理解并找到这个注册表项的人不多。

? 网页木马

网页木马并不是指使用网页编写的木马程序,也不是一种新的木马类型,而是一种通过浏览器漏洞实现普通木马传播的感染手段,这个时代里浏览器已经成为众多入侵途径的窗口,它们都是通过一些嵌入了特殊构造的漏洞执行代码的网页和脚本进行入侵的,其后果是浏览器代替用户自动运行了之前下载的木马程序,这一切,让人防不胜防。

其实不仅仅是浏览器自身漏洞可以引发木马危机,各种以浏览器为执行宿主的BHO控件漏洞也同样可以导致浏览器崩溃或自行下载执行入侵者指定的页面,如支付宝、Web迅雷、百度搜霸、蓝天语音聊天室插件等IE控件都出现过危害程度高的漏洞。

当一个被载入浏览器的控件出现漏洞时,对用户而言就等于是浏览器自身出了漏洞,因为它们形成了宿主关系,其影响已经形成一体了,当入侵者使用特殊编写的脚本诱使存在漏洞的控件发生溢出时,轻则控件发生崩溃直接导致浏览器也跟着崩溃,重则发生缓冲区溢出,执行来自浏览器传递的攻击代码ShellCode而导致用户机器变成一个"木马下载器"Trojan-Downloader),自动下载执行木马等危害程序。

网页木马的历史非常悠久,自从1999MIME执行漏洞被公开后,早期的网页木马便宣告出世,如果你是那个时代就走过来的用户,你一定听说过"求职信",它就是使用浏览器MIME漏洞传播的早期恶意程序之一,随后的"大无极"更是把漏洞影响扩散到了严重危害的程度。大部分网页木马的共同点都是依赖于用户机器的浏览器漏洞来实现下载木马本体执行的功能,在相关厂商未出有效的安全补丁之前,我们能做的只有通过某种手段预防漏洞危害,那就是利用浏览器自身提供的一个小功能将问题控件暂时屏蔽。细心的用户在阅读一些安全小组的漏洞分析报告时,经常会看到这么一句:"在软件厂商未发布安全补丁之前,我们建议用户对该控件设置Killbit"。那么,什么是"Killbit"?微软编号Q240797的知识库文章《如何禁止 ActiveX 控件在 Internet Explorer 中运行》一文对此做出了诠释:Internet Explorer 有一项安全功能,可用于禁止 Internet Explorer HTML 呈现引擎加载某个 ActiveX 控件。此功能可通过进行注册表设置来完成,这种设置叫做设置"killbit"。一旦设置了"killbit",该控件即永远不可加载,即使将其完全安装也是如此。此设置可以确保,即使有漏洞的组件被引入或重新引入系统中,它也不具活性,没有破坏力。

? 主流技术"Rootkit"

上面提到的木马和恶意程序手段其实都是在用户层Ring3级别运行的应用程序,所以它们无法做得非常厉害,只要用户使用适当的安全工具即可检测并除去,然而现在,技术的战斗转入了系统核心层Ring0

要了解Rootkit木马的原理,就必须从系统原理说起,我们知道,操作系统是由内核(Kernel)和外壳(Shell)两部分组成的,内核负责一切实际的工作,包括CPU任务调度、内存分配管理、设备管理、文件操作等,外壳是基于内核提供的交互功能而存在的界面,它负责指令传递和解释。由于内核和外壳负责的任务不同,它们的处理环境也不同,因此处理器提供了多个不同的处理环境,把它们称为运行级别(Ring),Ring让程序指令能访问的计算机资源依次逐级递减,目的在于保护计算机遭受意外损害--内核运行于Ring 0级别,拥有最完全最底层的管理功能,而到了外壳部分,它只能拥有Ring 3级别,这个级别能操作的功能极少,几乎所有指令都需要传递给内核来决定能否执行,一旦发现有可能对系统造成破坏的指令传递(例如超越指定范围的内存读写),内核便返回一个"非法越权"标志,发送这个指令的程序就有可能被终止运行,这就是大部分常见的"非法操作"的由来,这样做的目的是为了保护计算机免遭破坏,如果外壳和内核的运行级别一样,用户一个不经意的点击都有可能破坏整个系统。

由于Ring的存在,除了由系统内核加载的程序以外,由外壳调用执行的一般程序都只能运行在Ring 3级别,也就是说,它们的操作指令全部依赖于内核授权的功能,一般的进程查看工具和杀毒软件也不例外,由于这层机制的存在,我们能看到的进程其实是内核"看到"并通过相关接口指令(还记得API吗?)反馈到应用程序的,这样就不可避免的存在一条数据通道,虽然在一般情况下它是难以被篡改的,但是不能避免意外的发生,Rootkit正是"制造"这种意外的程序。简单的说,Rootkit实质是一种"越权执行"的应用程序,它设法让自己达到和内核一样的运行级别,甚至进入内核空间,这样它就拥有了和内核一样的访问权限,因而可以对内核指令进行修改,最常见的是修改内核枚举进程的API,让它们返回的数据始终"遗漏"Rootkit自身进程的信息,一般的进程工具自然就""不到Rootkit了。更高级的Rootkit还篡改更多API,这样,用户就看不到进程(进程API被拦截),看不到文件(文件读写API被拦截),看不到被打开的端口(网络组件Sock API被拦截),更拦截不到相关的网络数据包(网络组件NDIS API被拦截)了,幸好网络设备的数据指示不受内核控制,否则恐怕Rootkit要让它也不会亮了才好!我们使用的系统是在内核功能支持下运作的,如果内核变得不可信任了,依赖它运行的程序还能信任吗?

Rootkit技术是如今这个时代的研究主流,从最初的可以在安全模式里轻易发现并删除的灰鸽子保护驱动、3721保护驱动等,到现在的无视安全模式照常运行的驱动,它们在Ring0层里实现的功能早已不再是简单的文件隐藏保护手段,而是到了全面负责的地步,例如有一种Rootkit分为Ring3层执行程序和Ring0驱动两部分,而它的Ring3启动项是一般用户无论如何也找不出来的,因为它的驱动实现的功能是在用户系统每次启动进入桌面,所有启动项都未加载时将Ring3层可执行程序的路径写入启动项,当桌面加载完毕、所有启动项都执行完毕后,驱动又做了一件事情,它将刚才自己写入的启动项删除了,如此一来,不知情的用户根本就不知道自己机器上存在过如此险恶的东西。

沁园春·雪

北国风光, 千里冰封, 万里雪飘。

望长城内外,?惟余莽莽;?大河上下,?顿失滔滔。

山舞银蛇, 原驰蜡象, 欲与天公试比高。

须晴日, 看红装素裹,?分外妖娆。

江山如此多娇, 引无数英雄竞折腰。

惜秦皇汉武,?略输文采;?唐宗宋祖,?稍逊风骚。

一代天骄,?成吉思汗,?只识弯弓射大雕。

俱往矣,?数风流人物, 还看今朝。

精品文档 你我共享

AAAAAA

           出师表

两汉:诸葛亮

  先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。

  宫中府中,俱为一体;陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理;不宜偏私,使内外异法也。

  侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下:愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。

  将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰"",是以众议举宠为督:愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。

  亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之、信之,则汉室之隆,可计日而待也。

  臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。

  先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐托付不效,以伤先帝之明;故五月渡泸,深入不毛。今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。

  愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏。臣不胜受恩感激。

  今当远离,临表涕零,不知所言。

本文来源:https://www.2haoxitong.net/k/doc/8efeee66f9c75fbfc77da26925c52cc58ad6903a.html

《木马编程.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式