6.3.2 木马病毒程序的关键技术

6.3.2 木马病毒程序的关键技术

虽然木马病毒程序千变万化,但其攻击方式是一样的:通过客户端程序向服务控制端程序发送指令,控制端接收到控制指令后,根据指令内容在本地执行相关程序段,然后把执行结果返回给客户端。

在前面我们实现了一个基本的木马病毒系统,该系统包含几种基本技术:自动隐藏技术、自动加载技术、信息获取、硬件操作、远程重新启动等。尽管该系统已经具有木马病毒系统的雏形,但是它还不是一个功能完整的木马病毒系统。接下来介绍一些广泛应用于木马病毒程序的关键技术。

1.植入技术

木马病毒植入技术是木马病毒工作流程的第一个步骤,它也是木马病毒能不能成为实战工具的先决条件。

(1)常用的植入手段

1)邮件植入。木马病毒被放在邮件的附件里发给受害者,当受害者在没采取任何措施的情况下下载并运行了该附件,便感染了木马病毒。因此,对于带有附件的邮件,最好不要下载运行,尤其是附件名为“*.exe”的文件。

2)IM传播。因为IM(QQ、MSN等)有文件传输功能,所以现在也有很多木马病毒通过IM进行传播。恶意破坏者通常把木马病毒服务程序通过合并软件和其他的可执行文件绑在一起,然后欺骗受害者去下载运行。如果受害者相信这是个好玩的东西或者是想要的照片,当接受并运行后,就成了木马病毒的牺牲品了。

3)下载传播。在一些个人网站或论坛下载共享软件时有可能会下载绑有木马病毒的程序,所以建议要下载共享软件的话最好去比较知名的网站。在解压缩安装之前也要养成对共享软件进行病毒扫描的习惯。

4)漏洞植入。一般是利用系统漏洞或应用程序的漏洞,把配置好的木马病毒在目标主机上运行就完成了。这种方法的难点是要掌握漏洞技术,如IPC漏洞、Unicode漏洞等。

5)网上邻居植入。网上邻居即共享入侵。当受害者的139端口是开放的,且有共享的可写目录时,攻击者就可以直接将木马病毒或种子放入共享目录中。如果使用一个具有诱惑性的名字,或者使用一个具有欺骗性的扩展名,受害者就可能会运行这个程序,于是就被感染了。

6)网页植入。网页植入是比较流行的植入木马病毒的方法,接下来的章节会重点讲解这种方法。黑客可以制作一个ActiveX控件,放在网页里,只要用户选择了安装,就会自动从服务器上下载一个木马病毒程序并运行,这样就达到植入木马病毒的目的了。按此方法制作的木马病毒对任何版本的IE都有效,但是在打开网页时弹出对话框要用户确定是否安装,只要用户不安装,黑客们就不能达到目的了。

另一类植入木马病毒的技术主要是利用微软的HTML Object标签的一个漏洞。Object标签主要是用来把ActiveX控件插入到HTML页面里。由于加载程序没有根据描述远程Object数据位置的参数检查加载文件的性质,因此Web页面里面的木马病毒会悄悄地运行。对于DATA所标记的URL,IE会根据服务器返回HTTP头中的Conten-Type来处理数据,也就是说如果HTTP头中返回的是appication/hta等,那么该文件就能够执行,而不管IE的安全级别有多高。如果恶意攻击者把该文件换成木马病毒程序,并修改其中FTP服务器的地址和文件名,将其改为他们的FTP服务器地址和服务器上木马病毒程序的路径,那么当别人浏览该网页时,会出现“Internet Explorer脚本错误”的错误信息提示,询问是否继续在该页面上运行错误脚本,当单击“是”按钮时便会自动下载并运行木马病毒。

还有一种网页木马病毒是直接在网页的源代码中插入木马病毒代码,只要对方打开这个网页就会感染上木马病毒,而受害者对此还一无所知。

(2)首次运行

随着安全意识的加强,大多数上网用户警惕性越来越高,想骗取他们执行木马病毒程序是件很困难的事。即使不是计算机高手都知道,一见到是陌生的“*.exe”文件便不会轻易运行它,因而中毒的机会也就相对减少了。对于此种情况,黑客们是不会甘于寂寞的,于是想方设法引诱或欺骗用户运行木马病毒种子。

1)冒充为图像文件。首先,黑客最常使用欺骗别人执行木马病毒的方法就是将特洛伊木马病毒伪装成图像文件,如照片等,应该说这是一个最不合逻辑的方法,但却是使很多用户中招的有效而又实用的方法。

只要入侵者扮成美女或使用其他诱惑的文件名,再假装传送照片给受害者,受害者就会立刻执行它。

2)程序捆绑欺骗。通常有经验的用户是不会将图像文件和可执行文件混淆的,所以很多入侵者一不做二不休,干脆将木马病毒程序伪装成应用程序。然后再变着花样欺骗受害者,如新出炉的游戏、无所不能的黑客程序等,目的是让受害者立刻执行它。而木马病毒程序执行后一般是没有任何反应的,于是在悄无声息中,很多受害者便以为是传送时文件损坏了而不再理会它。

如果有更小心的用户,上面的方法有可能会使他们产生怀疑,所以就衍生了一些捆绑程序。捆绑程序是可以将两个或以上的可执行文件(*.exe文件)结合为一个文件,当执行这个组合文件时,两个可执行文件就会同时执行。如果入侵者将一个正常的可执行文件(一些小游戏,如wrap.exe)和一个木马病毒程序捆绑,由于执行组合文件时wrap.exe会正常执行,受害者在不知情时也同时执行了木马病毒程序。常用的捆绑软件有joier、Hammer Binder等。

3)以Z-file伪装加密程序。使用者会将木马病毒程序和小游戏捆绑,再用Z-file加密及将此“混合体”发给受害者,由于看上去是图像文件,受害者往往都不以为然,打开后又只是一般的图片,最可怕的地方还在于就连杀毒软件也检测不出它内藏特洛伊木马病毒。当打消了受害者的警惕性后,再让他用WinZip解压缩及执行伪装体,这样就成功地安装了木马病毒程序。

4)伪装成应用程序扩展组件。此类属于最难识别的特洛伊木马病毒。黑客们通常将木马病毒程序写成为任何类型的文件(如dll、ocx等)然后挂在一个十分出名的软件中,如OICQ。由于OICQ本身已有一定的知名度,没有人会怀疑它的安全性,更不会有人检查它的文件是否多了。而当受害者打开OlCQ时,这个有问题的文件即会同时执行。此种方式与捆绑程序相比,有一个更大的好处就是不用更改被入侵者的登录文件,以后每当其打开OICQ时木马病毒程序就会同步运行,相对一般特洛伊木马病毒可说是“踏雪无痕”。

2.网站挂马技术

网站挂马就是攻击者通过在正常的页面中(通常是网站的主页)插入一段代码。浏览者在打开该页面的时候,这段代码被执行,然后把某木马病毒的服务器端程序或种子下载到浏览者本地并运行,进而控制浏览者的主机。网站被挂马是管理员无论如何都无法忍受的。不仅Web服务器被攻克,还“城门失火,映及池鱼”,网站的浏览者也不能幸免。这无论是对企业的信誉,还是对管理员的技术能力都是沉重的打击。常见的网站挂马技术包括框架挂马、js挂马、图片伪装挂马、网络钓鱼挂马、伪装挂马。下面结合实例对网页后门及其网页挂马的技术进行分析。

(1)框架挂马。在HTML编程中,ifframe语句可以加载到任意网页中并执行。网页木马病毒攻击利用这种技术进行框架挂马。框架挂马是最早也是最有效的一种网络挂马技术。通常挂马所使用的代码如下:

上面这句代码意思是,在打开插入该句代码的网页后,也就打开了http://www.xxx.com/muma.html页面。但是由于它的长和宽都为“0”,因此很难察觉,非常具有隐蔽性。

(2)js挂马。js挂马是一种利用js脚本文件调用的原理进行的网页挂马技术,这种挂马技术非常隐蔽。例如,黑客可以先制作一个“.js”文件,然后利用js代码调用到挂马的网页。通常挂马所使用的代码如下:

在上面这段代码中,http://www.xxx.com/gm.js就是一个js脚本文件,攻击者通过它调用和执行木马病毒的服务端。这些js文件一般都可以通过工具生成,攻击者只需输入相关的选项就可以了。

(3)图片伪装挂马。随着防毒技术的发展,黑客手段也不断地更新技术,图片伪装挂马技术是逃避杀毒监视的新技术。攻击者将木马病毒代码植入到test.jpg图片文件中,这些嵌入代码的图片都可以用工具生成,攻击者只需输入相关的选项就可以了。图片木马病毒生成后,再利用代码调用执行,是比较新颖的一种挂马隐蔽方法,实例代码如下:

这两句代码的意思是,当用户打开http://www.xxx.com/test.html时,显示给用户的是http://www.xxx.com/test.jpg,而http://www.xxx.com/test.html网页代码也随之运行。

(4)网络钓鱼挂马。钓鱼挂马是网络中最常见的欺骗手段,黑客们利用人们的猎奇、贪婪等心理,伪装构造一个链接或者一个网页,利用社会工程学欺骗方法,引诱受害者来单击链接。当受害者打开一个看似正常的页面时,木马病毒代码随之运行,隐蔽性极高。这种方式往往和欺骗用户输入某些个人隐私信息然后窃取个人隐私相关联。例如,攻击者模仿腾讯公司设计了一个获取Q币的页面,引诱输入QQ账号和口令。等用户输入完提交后,就把这些信息发送到攻击者指定的地方。

(5)伪装挂马。伪装挂马是高级欺骗技术之一。是黑客利用IE或者Firefox浏览器的设计缺陷制造的一种高级欺骗技术,当用户访问木马病毒页面时地址栏显示www.sina.com或者security.ctocio.com.cn等用户信任地址,其实却打开了被挂马的页面,从而实现欺骗。示例代码如下:

上面的代码的效果,在貌似http://safe.it168.com的链接上单击却打开了http://www.hacker.com.cn网站。

3.自启动技术

木马病毒植入到受害系统的难度非常大,因此不能每次都依靠入技术来启动木马病毒。一旦成功植入,木马病毒可以靠一些自动手段在被害系统重新启动时加载自己。以下介绍这些技术。

(1)修改批处理

这是一种很古老的方法,但至今仍有木马病毒在使用。这种技术一般通过修改下列三个文件来实现。

1)Autoexec.bat(自动批处理,在引导系统时执行)。

2)Winstart.bat(在启动GUI图形界面环境时执行)。

3)Dosstart.bat在进入MS-DOS方式时执行)。

例如,编辑C:\windows\Dosstart.bat,加入start Notepad,当进入"MS-DOS方式"时,就可以看到记事本被启动了。

(2)修改系统配置

这是经常使用的方法之一,通过修改系统配置文件System.ini、Win.ini来达到自动运行的目的,设计的范围如下。

在Win.ini文件中:

[windows]

load=程序名

run=程序名

在System.ini文件中:

[boot]

shell=Explorer.exe

其中,修改System.ini中Shell值的情况要多一些,木马病毒通过修改这里使自己成为Shell,然后加载Explorer.exe,从而达到控制用户计算机的目的。

(3)借助自动播放功能

在被木马病毒程序应用之前,该方法不过是被发烧友用来修改硬盘的图标而已,如今它被赋予新的意义,黑客甚至声称这是Windows的新漏洞。

Windows的自动播放功能确实有很多弊端,早年许多用户因为自动运行的光盘中带有CIH病毒而“中招”,现在不少软件可以方便地禁止光盘的自动运行,但硬盘呢?其实硬盘也支持自动运行,可尝试在D盘根目录下新建一个Autorun.inf,用记事本打开它,输入如下内容:

[autorun]

open=Notepad.exe

保存后进入“我的电脑”,按F5键刷新,然后双击D盘盘符,记事本打开了,而D盘却没有打开。

当然,以上只是一个简单的实例,黑客做得要精密很多,他们会把程序改名为“.exe”(中文的全角空格),这样在Autorun.inf中只会看到“open=”而后边的内容被忽略,此种行径常在修改系统配置时使用,如“run=”。为了更好地隐藏自己,其程序运行后,还会打开硬盘,使人难以觉察。

由此可以推想,如果打开了D盘的共享,黑客就可以将木马病毒和一个Autorun.inf存入到该分区中,当Windows自动刷新时,也就“中招”了,因此千万不要共享任何根目录,当然更不能共享系统分区。

(4)通过注册表中的Run来启动

这也是一个很老的方法,但大多数的黑客仍在使用这种方法。通过在Run、Run Once、RunOnceEx、RunServices以及RunServicesOnce中添加键值,可以比较容易地实现程序的加载。黑客尤其喜欢在带Once的主键中做手脚。在程序运行后,如果木马病毒自动将键值删除,当用户使用注册表修改程序查看时就不会发现异样。在退出时(或关闭系统时),木马病毒程序又自动添加上需要的键值,达到隐藏自己的目的。

(5)通过文件关联启动

这是一种很受黑客喜爱的方式,通过“.exe”文件的关联(主键为exefile),让系统在执行任何程序之前都运行木马病毒。通常修改的还有txtfile(文本文件的关联),regfile(注册表文件关联),一般用来防止用户恢复注册表格,如双击“.reg”文件就关闭计算机)和unkown(未知文件关联)。为了防止用户恢复注册表,用此方法的黑客通常还连带清除scanreg.exe、sfc.exe、Extrac32.exe和regedit.exe等程序,以阻碍用户修复。

(6)通过API HOOK启动

这种方法较为高级,通过替换系统的DLL文件,让系统启动指定的程序。例如,拨号上网的用户必须使用Rasapi32.dll中的API函数来进行连接,那么黑客就会替换这个DLL文件,当应用程序调用这个API函数时,黑客的程序就会先启动,然后调用真正的函数完成这个功能(特别提示:木马病毒可不一定只是EXE文件,还可以是DLL文件或Vx D文件),这样既方便又隐蔽(不上网时根本不运行)。如果感染了此种病毒,只能重装系统。

(7)通过Vx D启动

这种方法也是较高级的方法之一,通过把木马病毒写成Vx D形式加载,直接控制系统底层。这种方法极为罕见,它们一般在注册表[HKEY_LOCAL_MACHINE\System\Current ControlSet\Services\Vx D]主键中启动,很难发觉,解决方法最好也是用Ghost恢复或重新安装系统。

(8)通浏览网页启动

这种方法利用了MIME的漏洞。这是2001年黑客中最流行的手法,因为它简单有效,加上宽带网的流行,令用户防不胜防。想一想,仅仅是鼠标变一下“沙漏”,木马病毒就安装妥当,Internet真是太“方便”了!不过近年来这种方法的使用有所减少,一方面许多人都改用高版本的浏览器,另一方面大部分个人主页空间都不允许上传“.eml”文件了。

MIME被称为多用途Internet邮件扩展(Multipurpose Internet Mail Extension,是一种技术规范,原用于电子邮件,现在也可以用于浏览器。MIME对邮件系统的扩展是巨大的,在它出现前,邮件内容如果包含声音和动画,就必须把它转为ASCII码或把二进制的信息,即变成可以传送的编码标准,而接收方必须经过解码才可以获得声音和图像信息。MIME提供了一种可以在邮件中附加多种不同编码文件的方法,这与原来的邮件是大不相同的。而现在MIME已经成为HTTP协议标准的一部分。

(9)利用Java applet

划时代的Java高效、更方便,但也能悄悄地修改注册表,让用户千百次地访问黄(黑)色网站,让用户关不了机,还可以让用户感染木马病毒。这种方法其实很简单,先利用HTML把木马病毒下载到计算机的内存中,然后修改注册表,指向其程序。

(10)利用系统自动运行的程序

这一方法主要利用户的麻痹大意和系统的运行机制进行,命中率很高。在系统运行过程中,有许多程序是自动运行的。例如,在磁盘空间已满时,系统自动运行“磁盘清理”程序(cleanmgr.exe)。在启动资源管理器失败时,双击桌面将自动运行“任务管理器”程序(Taskman.exe)。在格式化磁盘完成后,系统将提示使用“磁盘扫描”程序(scandskw.exe)。当单击帮助或按下Fl键时,系统将运行Winhelp.exe或Hh.exe打开帮助文件。启动时,系统将自动启动“系统栏”程序(Sys Tray.exe)、“输入法”程序(int巳rnat.exe)以及“注册表检查”程序(scanregw.exe),“计划任务”程序(Mstask.exe)以及“电源管理”程序等。

以上机制都为恶意程序提供了机会,通过覆盖这些文件,不必修改任何设置系统就会自动执行它们,而用户在检查注册表的系统配置时也不会有任何怀疑。例如,“注册表检查”程序的作用是启动时检查和备份注册表,正常情况不会有任何提示,那么它被覆盖后真可谓是“神不知、鬼不觉”。当然,这也许会被“系统文件检查器”检查出来。

黑客还有一个“偷天换日”的高招,不覆盖程序也可达到这个目的。这种方法是利用System目录比Windows目录优先的特点,以相同的文件名,将程序放到System目录中。读者可以尝试一下,将Notepad.exe复制到System目录中,并改名为Regedit.exe(注册表编辑器),然后在“开始”→“运行”命令中,输入“Regedit”并按Enter键,会发现运行的竟然是那个假冒的Notepad.exe!由于这种方法中大部分目标程序不是经常被系统调用,因此常被黑客用来作为文件被删除后的恢复方法。

(11)其他方法

黑客还常常使用名字欺骗技术和运行假象与之配合。上述的全角空格主文件名“.exe”就是一例名字欺骗技术,另外常见的有在修改文件关联时,使用“”(ASCII值255,输入时先按下Alt键,然后在小键盘上输入255)作为文件名,当这个字符出现在注册表中时,人们往往很难发现它的存在。此外还有利用字符相似性的,如“Systray.exe”和“5ystray”(5与大写S相似);长度相似性的,如“Explorer.exe”和“Explore.exe”(后者比前者少一个字母,心理学实验证明,人的第一感觉只识别前4个字母,并对长度不敏感)。运行假象则是指运行某些木马病毒时,程序给出一个虚假的提示来欺骗用户。一个运行后什么都没有的程序,也许会引起大家的注意,但对于一个提示“内存不足的程序”,恐怕不会引起多少人的重视。

4.隐藏技术

木马病毒为了生存,使用许多技术隐藏自己的行为(进程、连接和端口)。在Windows 9x时代,木马病毒简单地注册为系统进程就可以从任务栏中消失。可是在Windows XP盛行的今天,这种方法遭到了惨败,注册为系统进程不仅仅能在任务栏中看到,而且可以直接在Services中控制木马病毒。使用隐藏窗体或控制台的方法也不能欺骗无所不见的Administrator用户。在Windows NT/2000/XP下,Administrator是可以看见所有进程的。防火墙和各种网络工具的发展也对木马病毒提出了进一步的考验,通信过程容易被发现。本节的内容主要总结目前用于木马病毒隐藏的各种技术,非常值得学习和研究。

(1)反弹式木马病毒技术

常见的普通木马病毒是驻留在用户计算机里的一段服务程序,而攻击者控制的则是相应的客户端程序。服务程序通过特定的端口,打开用户计算机的连接资源。一旦攻击者所掌握的客户端程序发出请求,木马病毒便和它连接起来,将用户的信息窃取。

此类木马病毒的最大弱点在于攻击者必须和目标主机建立连接,木马病毒才能起到作用,所以在对外部连接审查严格的防火墙策略下,这样的木马病毒很难工作起来。

而反弹式木马病毒在工作原理上就与常见的木马病毒不一样。由于反弹式木马病毒使用的是系统信任的端口,系统会认为木马病毒是普通应用程序,而不对其连接进行检查。防火墙在处理内部发出的连接时,也就信任了反弹式木马病毒。

个人防火墙采用独特的“内墙”方式应用程序访问网络规则,专门对付存在于用户计算机内部的各种不法程序对网络的应用。可以有效地防御像“反弹式木马病毒”那样的骗取系统合法认证的非法程序。当用户计算机内部的应用程序访问网络的时候,必须经过防火墙内墙的审核。合法的应用程序被审核通过,而非法的应用程序将会被防火墙的“内墙”所拦截。

(2)用ICMP方法隐藏连接

一般的木马病毒都是通过建立TCP连接来进行命令和数据的传递的,但是这种方法有一个致命的漏洞,就是木马病毒在等待和运行过程中,始终有一个和外界联系的端口打开着,这是木马病毒的缺点所在,也是高手查找木马病毒的撒手锏之一。而木马病毒也是在斗争中不断进步,不断成长的,其中一种ICMP木马病毒就彻底摆脱了端口的束缚,成为黑客入侵后门工具中的佼佼者。

ICMP全称是Internet Control Message Protocole(互联网控制报文协议),它是IP协议的附属协议,用来传递差错报文以及其他需要在意的消息报文,这个协议常常为TCP或UDP协议服务,但是也可以单独使用,如著名的工具Ping就是通过发送接收ICMP_ECHO和ICMP_ECHOREPLY报文来进行网络诊断的。

实际上,ICMP木马病毒的出现正是得到了Ping程序的启发,由于ICMP报文是由系统内核或进程直接处理而不是通过端口,这就给木马病毒一个摆脱端口的好机会,木马病毒将自己伪装成一个Ping的进程,系统就会将ICMP_ECHOREPLY(Ping的回包)的监听、处理权交给木马病毒进程,一旦事先约定好的ICMP_ECHOREPLY包出现(可以判断包大小、ICMP_SEQ等特征),木马病毒就会接收、分析并从报文中解码出命令和数据。

ICMP_ECHOREPLY包还有对于防火墙和网关的穿透能力。对于防火墙来说,ICMP报文被列为危险的一类。从Ping of Death到ICMP风暴再到ICMP碎片攻击,构造ICMP报文一向是攻击主机的最好方法之一,因此一般的防火墙都会对ICMP报文进行过滤。但是ICMP_ECHOREPLY报文却往往不会在过滤策略中出现,这是因为一旦不允许ICMP_ECHOREPLY报文通过就意味主机没有办法对外进行Ping的操作,这样对于用户是极其不友好的。如果设置正确,ICMP_ECHOREPLY报文也能穿过网关,进入局域网。

为了实现发送/监听ICMP报文,必须建立SOCK_RAWC原始套接口。首先,需要定义一个IP头部和一个ICMP头部结构,如下所示:

然后可以使用fill_icmp_data子程序填充ICMP报文段,最后就可以通过sendto()函数发送ICMP_ECHOREPLY报文。

作为服务端的监听程序,基本的操作相同,只是需要使用recvfrom()函数接受ICMP_ECHOREPLY报文,并用decoder()函数将接收来的报文解码为数据和命令。

对于ICMP木马病毒,除非使用嗅探器或者监视Windows的Sock API调用,否则,很难发现木马病毒的行踪。如果想阻止ICMP木马病毒,就必须过滤ICMP报文,对于Windows 2000可以使用系统自带的路由功能对ICMP协议进行过滤。Windows 2000的Routing&Remote Access功能十分强大,其中之一就是建立一个TCP/IP协议过滤器。不过值得注意的是,一旦在输入过滤器中禁止了ICMP_ECHOREPLY报文,就无法再用Ping这个工具了。如果过滤了所有的ICMP报文,就收不到任何错误报文,当使用IE访问一个并不存在的网站时,往往要花数倍的时间才能知道结果,而且基于ICMP协议的Tracert工具也会失效,这也是方便与安全之间矛盾的统一。

(3)隐藏端口

端口是木马病毒最大的漏洞,经过不断宣传,现在连一个刚刚上网没有多久的新手也知道用Netstat查看端口。放弃了端口后木马病毒怎么和控制端联络呢?对于这个问题,不同的木马病毒采用了不同的方法,大致分为寄生和潜伏两种方法。

1)寄生就是找一个已经打开的端口寄生其上,平时只是监听,遇到特殊的指令就解释执行。因为木马病毒实际上是寄生在已有的系统服务之上的,所以在扫描或查看系统端口的时候是没有任何异常的。据作者所知在Windows 98下进行这样的操作是比较简单的,但是对于Windows 2000要麻烦得多。由于作者对这种技术没有很深的研究,在这里就不阐述了,感兴趣的朋友可以进一步研究。

2)潜伏是使用IP协议族中的其他协议,而不是TCP或UDP来进行通信,从而瞒过Netstat和端口扫描软件。一种比较常见的潜伏手段是使用ICMP协议(参见前面内容)。

除了寄生和潜伏隐藏方法之外,木马病毒还有其他更好的方法进行端口隐藏,如直接针对网卡或Modem进行底层的编程,这需要更高的编程技巧。

5.其他技术

(1)Socket技术

计算机通信的基石是套接字,一个套接字端口是通信的一端。在这一端上可以找到与其对应的一个名字。一个正在被使用的套接字都有它的类型和与其相关的进程。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念。套接字通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序)。Windows Socket规范支持单一的通信域,即Internet域。使用这个域的各种进程互相之间用Internet协议来进行通信(Windows Socket1.1IV.上的版本支持其他的域)。

(2)修改注册表

经常研究注册表的读者一定知道,在注册表中是可以设置一些启动加载项目的,编制木马病毒程序的高手们当然不会放过这样的机会,况且他们知道修改注册表会更安全,因为会查看并且编辑注册表的人很少。事实上,Run、RunOnce、RunOnceEx,RunServices以及RunServicesOnce等都可能是木马病毒程序加载的入口。

为了使操作系统运行得更为稳定,微软在Windows 95及其后继版本中,推出了一种叫作“注册表”的数据库,将设备及应用程序的信息资源与配置信息进行集中管理。注册表包括以下几个根键。

1)HKEY_CLASSES_ROOT:此处存储的信息可以确保当使用Windows资源管理器打开文件时,将使用正确的应用程序打开对应的文件类型。

2)HKEY_CURRENT_USER:存放当前登录用户的有关信息。用户文件夹、屏幕颜色和“控制面板”设置都存储在此处。该信息称为用户配置文件。

3)HKEY_LOCAL_MACHINE:包含针对该计算机(对于任何用户)的配置信息。

4)HKEY_USERS:存放计算机上所有用户的配置文件。

5)HKEY二CURRENT CONFIG:包含本地计算机在系统启功时所用的硬件配置文件信息。

6)HKEY DYN DATA:记录系统运行时刻的状态。

注册表按层次结构来组织,6个分支都以HKEY开头,称为主键(KEY),这和资源管理器中的文件夹相似,表示主键的图标与文件夹的图标一样。每个主键图标的左边有一个“+”号图标,单击可将这一分支展开,展开后可以看到主键还包含次级主键(Sub Key)。当单击某一主键或次级主键时,右边窗格中显示的是所选主键内包含的一个或多个键值(Value)。

键值由键值名称(ValueName)和数据(ValueDate)组成,这就是右窗口中的两个列表(名称、数据)所表示的。主键中可以包含多级的次级主键,注册表中的信息就是按照多级的层次结构组织的。每个分支中保存计算机系统软件或硬件中某一方面的信息与数据。

注册表通过键和子键来管理各种信息。但是注册表中的所有信息都是以各种形式的键值项数据保存的。在注册表编辑器右窗格中显示的都是键值项数据。这些键值项数据可以分为三种类型。

1)字符串值:在注册表中,字符串值一般用来表示文件的描述和硬件的标识。通常由字母和数字组成,也可以是汉字,最大长度不能超过255个字符。

2)二进制值,在注册表中二进制值是没有长度限制的,可以是任意字节长。在注册表编辑器中,二进制以十六进制的方式表示。

3)DWORD值:该值是一个32位(4个字节)的数值。在注册表编辑器中也是以十六进制的方式表示。

对于木马病毒等应用程序,需要调用API函数来操作注册表。API(Application Programing Interface)是Windows提供的一个32位环境下的应用程序编程接口,其中包括了众多的函数,提供了相当丰富的功能。在编制应用程序时,可以调用其中的注册表函数来对注册表进行操作以实现我们需要的功能。

(3)远程屏幕抓取

如果想知道目标机用户目前在干什么,木马病毒程序就必须达到控制目标机的目的,要想知道被攻击者正在干什么,通常有两种方式:第一种方式是记录目标机的键盘和鼠标事件,形成一个文本文件,然后把该文件发送到控制端,最后控制端可以通过查看文件的方式了解被控制端的动作。第二种方式是在被控制端抓取当前屏幕,形成一个位图文件,然后把该文件发送到控制端计算机并显示出来。这种方式非常像一个远程控制软件(PC Anywhere)。

实现远程屏幕抓取功能是木马病毒的一个必备技巧。屏幕抓取功能的实现比较复杂,涉及面比较广,如内存管理技术、图形存取技术和图像压缩传输技术等,在此就不做详细介绍了。

(4)输入输出设备控制

在木马病毒程序中,木马病毒使用者可以通过网络控制目标机的鼠标和键盘,以达到模拟键盘的功能,也可以通过这种方式启动或关闭被控制端的应用程序。这里将学习编写程序控制计算机和键盘的基本知识。模拟键盘用Keybd_event()这个API函数,模拟鼠标按键用mouse_event()函数。在VC里调用API函数是既简单又方便的事情。下面以VC++为例介绍如何实现这两个功能。

1)首先介绍Keybd_event()函数。Keybd_event()能触发一个按键事件,也就是说会产生一个WM_KEYDOWN或WM_KEYUP消息。当然也可以用产生这两个消息的方法来模拟按键,但是没有直接用这个函数方便。Keybd_event()共有4个参数,第1个参数为按键的虚拟键值,如Enter键为vk_return,Tab键为vk_tab;第2个参数为扫描码,一般不用设置,用0代替就行;第3个参数为选项标志,如果为keydown则置0即可,如果为keyup则设置成KEVENTF_KEYUP;第4个参数一般也是置0即可。用如下代码即可实现模拟按下键的功能,其中第一个参数表示被模拟键的虚拟键值,在这里也就是各键对应的键码,如A=65。

2)mouse_event()最好配合SetCursorPos(x,y)函数一起使用,与Keybd_event()类似,mouse_event()有5个参数,第1个参数为选项标志,为MOUSEEVENTF_LEFTDOWN时表示主键按下,为MOUSEEVENTF_LEFTUP时表示左键松开,向系统发送相应消息;第2和第3个参数分别表示x,y相对位置,一般可设为(0,0);第4和第5个参数并不重要,一般也可设为(0,0)。若要得到mouse_event()函数更详细的用法可参考MSDN。下面是关于mouse_event()的实例代码:

上面的代码表示鼠标的双击,若要表示单击,用两个mouse_vent()即可(一次按下,一次松开)。注意,不管是模拟键盘还是鼠标事件,都要注意还原,即单击后要松开,一个keydown对应一个keyup。鼠标单击完也要松开,不然可能影响程序的功能。