CC 木马编程进阶与实战

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C/C++木马编程进阶与实战精摘
【内容提要】
本书全面介绍了C/C++语言网络编程和Socket编程的基本方法。

重点剖析了目前流行木马的编程方法,揭露了黑客木马编程技术内幕。

本书的特色在于从整体入手,先学习木马程序的整体框架雏形,然后一步一步地深入学习木马编程中的隐藏技术、管道技术、反弹技术以及远程注入技术等,全书结合多个生动案例,环环相扣,深入浅出,实现黑客编程技术的融会贯通。

本书提供的程序代码力求完整、精简以及可读性强,为初、中级黑客编程爱好者提供了实用的学习参考资料。

同时也可以作为大中专院校学生课外编程参考资料。

【序】
一直以来想写一本关于黑客编程方面的书,一方面,市面上流行的黑客书籍大多拘泥于黑客工具的使用上,仅适合入门级的黑客技术爱好者;另一方面,黑客技术博大精深,自身的学识浅薄,不能写成令大家满意的作品,所以就一直搁浅。

由于我的上一部专著《信息安全顾问最佳实践指南》的读者给了我颇多的建议,同时也给了我写一本黑客编程方面的书籍的信心。

在中国,随着Internet的发展,黑客技术的爱好者也越来越多,水平也越来越高,他们不再满足使用别人的工具,也想自己亲自动手编制一些工具,这就非常需要一部关于黑客技术理论方面的书籍。

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

【本书的组织】
第1~9章主要内容如下:
第1章,木马介绍-介绍了木马的历史以及当前木马的发展趋势。

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

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

第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基于TCP的socket编程 (27)
3.3基于UDP的socket编程 (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 千字
版次:2008年3月第一版2008年3月第一次印刷
印数:0001~5000
定价:35.00元
第一章木马介绍
什么是“木马”?
正像历史上的“特洛伊木马”一样,被称作“木马”的程序也是一种掩藏在美丽外表下打入我们电脑内部的东西。

确切地说,“木马”是一种经过伪装的欺骗性程序,它通过将自身伪
装吸引用户下载执行,从而破坏或窃取使用者的重要文件和资料。

木马程序与一般的病毒不同,它不会自我繁殖,也并不“刻意”地去感染其他文件,它的主要作用是向施种木马者打开被种者电脑的门户,使对方可以任意毁坏、窃取你的文件,甚至远程操控你的电脑。

木马与计算机网络中常常要用到的远程控制软件是有区别的。

虽然二者在主要功能上都可以实现远程控制,但由于远程控制软件是“善意”的控制,因此通常不具有隐蔽性。

木马则完全相反,木马要达到的正是“偷窃”性的远程控制,因此如果没有很强的隐蔽性的话,那么木马简直就是“毫无价值”的。

一个完整的“木马”程序包含了两部分:“服务器”和“控制器”。

植入你的电脑的是它的“服务器”部分,而所谓的“黑客”正是利用“控制器”进入运行了“服务器”的电脑。

众所周知,基于TCP/IP协议接入互联网的电脑有0到65535共256×256个端口。

通常我们上网的时候,电脑通过80端口与外界保持联系。

运行了木马程序的“服务器”以后,你的电脑就会有另一个或几个端口被打开,使黑客可以利用这些打开的端口进入你的系统,你的系统安全和个人隐私也就全无保障了!
1.1木马发展历史
计算机世界中的特洛伊木马的名字由《荷马史诗》的特洛伊战记得来。

故事说的是希腊人围攻特洛伊城十年后仍不能得手,于是阿迦门农受雅典娜的启发:把士兵藏匿于巨大无比的木马中,然后佯作退兵。

当特洛伊人将木马作为战利品拖入城内时,高大的木马正好卡在城门间,进退两难。

夜晚木马内的士兵爬出来,与城外的部队里应外合而攻下了特洛伊城。

而计算机世界的特洛伊木马(Trojan)是指隐藏在正常程序中的一段具有特殊功能的恶意代码,是具备破坏和删除文件、发送密码、记录键盘和攻击等特殊功能的后门程序。

? 第一代木马:伪装型病毒
这种病毒通过伪装成一个合法性程序诱骗用户上当。

世界上第一个计算机木马是出现在1986年的PC-Write木马。

它伪装成共享软件PC-Write的2.72版本(事实上,编写PC-Write 的Quicksoft公司从未发行过2.72版本),一旦用户信以为真运行该木马程序,那么他的下场就是硬盘被格式化。

在我刚刚上大学的时候,曾听说我校一个前辈牛人在WAX机房上用BASIC作了一个登录界面木马程序,当你把你的用户ID,密码输入一个和正常的登录界面一模一样的伪登录界面后后,木马程序一面保存你的ID,和密码,一面提示你密码错误让你重新输入,当你第二次登录时,你已成了木马的牺牲品。

此时的第一代木马还不具备传染特征。

? 第二代木马:邮件型木马
继PC-Write之后,1989年出现了AIDS木马。

由于当时很少有人使用电子邮件,所以AIDS 的作者就利用现实生活中的邮件进行散播:给其他人寄去一封封含有木马程序软盘的邮件。

之所以叫这个名称是因为软盘中包含有AIDS和HIV疾病的药品,价格,预防措施等相关信息。

软盘中的木马程序在运行后,虽然不会破坏数据,但是他将硬盘加密锁死,然后提示受感染用户花钱消灾。

可以说第二代木马已具备了传播特征(尽管通过传统的邮递方式)。

? 第三代木马:网络传播性木马
随着Internet的普及,这一代木马兼备伪装和传播两种特征并结合TCP/IP网络技术四处泛滥。

同时他还有新的特征:
第一,添加了“后门”功能。

所谓后门就是一种可以为计算机系统秘密开启访问入口的程序。

一旦被安装,这些程序就能够使攻击者绕过安全程序进入系统。

该功能的目的就是收集系统中的重要信息,例如,财务报告、口令及信用卡号。

此外,攻击者还可以利用后门控制系统,使之成为攻击其它计算机的帮凶。

由于后门是隐藏在系统背后运行的,因此很难被检测到。

它们不像病毒和蠕虫那样通过消耗内存而引起注意。

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

从名称上就可以知道,该功能主要是记录用户所有的击键内容然后形成击键记录的日志文件发送给恶意用户。

恶意用户可以从中找到用户名、口令以及信用卡号等用户信息。

这一代木马比较有名的有国外的BO2000(BackOrifice)和国内的冰河木马。

它们有如下共同特点:基于网络的客户端/服务器应用程序。

具有搜集信息、执行系统命令、重新设置机器、重新定向等功能。

当木马程序攻击得手后,计算机就完全在黑客控制的傀儡主机,黑客成了超级用户,用户的所有计算机操作不但没有任何秘密而言,而且黑客可以远程控制傀儡主机对别的主机发动攻击,这时候背俘获的傀儡主机成了黑客进行进一步攻击的挡箭牌和跳板。

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

? 后台运行程序
早期的特洛伊木马后门先驱可以追溯到1997年那个网络在国内还未大量普及的时代,在当时,初期阶段的特洛伊木马技术在国外早已热火朝天,而国内众多用户却还在用着拨号上网偶尔浏览新闻和下载文件,只有少数用户知道并研究外国传入的英文界面特洛伊木马程序BO、SubSeven等,木马技术始终属于少数人手里的“高科技”入侵工具,直到国产木马“冰河”的出现和随后的几个版本升级,才标志着国内用户迎来了网络木马的混沌时代。

冰河在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 Explorer、Foxmail、QQ等也都是主动对外连接的,一般的用户根本就无法将其判断分析出来。

端口反弹型木马的出现虽然让入侵的隐蔽等级又提高了一个层次,但是它也不是无懈可击的,由于木马需要实现主动连接客户端的功能,而大部分入侵者是不会使用固定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 Explorer、IceSword等都能将它们清
理干净——它们的文件名太明显了。

但是不得不否认,早期的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自身。

而广大用户中,能够理解并找到这个注册表项的人不多。

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

相关文档
最新文档