
一.一個特殊dll文件ws2_32.dll
在軟件安裝目錄下新建一個文本文件,改名為ws2_32.dll,此時將導致該軟件無法運行.
解釋如下:ws2_32.dll是Windows Sockets應用程序接口,用于支持Internet和網絡應用程序.程序運行時會自動調用ws2_32.dll文件,ws2_32.dll是個動態鏈接庫文件位于系統文件夾中.Windows在查找動態鏈接庫文件時會先在應用程序當前目錄搜索,如果沒有找到會搜索Windows所在目錄;如果還是沒有會搜索system32和system目錄。一些病毒可能會利用此原理在殺毒軟件目錄中建立名為ws2_32.dll文件或文件夾,在殺毒軟件看來這是程序運行需要的文件而調用,而這個文件又不具備系統ws2_32.dll文件的功能,所以殺毒軟件等就無法運行了而提示:應用程序或DLL為無效的windows映像,請再檢測一遍您的安裝盤,我隨便測了一個程序
我現在拿一個程序做個試驗…
找到一個程序,如我的ACD See,增加一個ws2_32.dll文件…
如:
刪除ws2_32.dll就可以正常運行~~
二.一個特殊的程序rundll32.exe
這個文件的作用,從文件名應該就可以猜到了,用于運行32位的DLL文件,位于%systemroot%\system32\rundll32.exe
下面來看看這個命令的格式:
Rundll32.exe DLL文件名,DLL文件中的引出函數 引出函數的具體參數
這里說的DLL文件名其實也可以是exe文件名,引出函數的具體參數是可選的.
大家打開開始,運行對話框,復制下面一行的命令粘貼進去,然后點確定.先不說效果,自己操作下哈.
rundll32.exe C:\WINDOWS\system32\shimgvw.dll,ImageView_Fullscreen C:\WINDOWS\Web\Wallpaper\Bliss.bmp
是不是被這么長的命令嚇怕了,其實很簡單,看看上面的格式,都能對上號吧
rundll32.exe這是命令名,可以不寫擴展名.
C:\WINDOWS\system32\shimgvw.dll這個就是DLL文件名
ImageView_Fullscreen這個是前面這個DLL文件的引出函數,功能是最大化顯示圖片,注意它和前面的DLL文件名是用逗號分隔的.
C:\WINDOWS\Web\Wallpaper\Bliss.bmp引出函數的具體參數,這里就是所要打開的圖片文件路徑.
rundll32這個命令是相當復雜的,不要求大家記住所有DLL文件的引出函數(也不可能記住),但要知道它的格式.
來看個短一點的命令吧
rundll32.exe shell32.dll,Control_RunDLL desk.cpl
打開了桌面屬性對話框.
說了這么多,好像和病毒沒有關系?呵呵,關系很大,病毒可以通過這個命令來運行,配合注冊表中的幾個自啟動位置...是不是很強大了,舉個例子:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
鍵main,值rundll32.exe C:\progra~1\intern~1\use6.dll mymain
這里的C:\progra~1\intern~1\use6.dll就是病毒文件,很好地實現了開機自動運行,并且還看不到病毒的進程,因為它只是一個DLL文件,但可以看到rundll32.exe進程,這個進程應當結束.打開控制面板中的一些項目時,也會出現這個進程,此時是正常的(剛剛打開桌面屬性對話框時也會有這個進程啊).
三.文件關聯
一種類型的文件與一個可以打開它的程序建立起一種依存關系,當雙擊該類型的文件時,系統會自動用已關聯的程序來打開它.例如,默認情況下,.txt文件是用記事本來打開的,.jpg文件是用windows圖片和傳真查看器來打開的.當某種類型的文件未與任何程序關聯時,雙擊它系統會彈出打開方式對話框.
修改文件關聯的方法很多,這里大致介紹幾種常用的.我以.jpg文件用記事本來打開為例.
1.點擊任意一張jpg圖片屬性,單擊更改,出現打開方式對話框,選擇記事本(也可以點擊瀏覽找到%systemroot%\notepad.exe),確定即可.現在雙擊一下圖片看看,出現的是記事本,但是顯示亂碼.現在改回來吧,只能通過選擇windows圖片和傳真查看器改回來,無法通過瀏覽來改,其實也是可以的,瀏覽時,下面選擇所有文件就行了,因為windows圖片查看器并不是一個可執行文件而是一個動態鏈接庫,文件位置是%systemroot%\system32\shimgvw.dll,當然dll文件是不能直接執行的,事實上它是由rundll32.exe來啟動的,剛剛運行過那個很長的命令的話應該不會有太大的疑惑.
2.點擊工具,文件夾選項,文件類型,找到JPG,單擊更改,出現打開方式對話框,和剛才一樣操作就行了,簡單.點擊下面的高級,出現編輯文件類型對話框,雙擊open(或者選中后點右邊的編輯)
看下用于執行操作的應用程序.
值為rundll32.exe C:\WINDOWS\system32\shimgvw.dll,ImageView_Fullscreen %1
和上面運行的那個命令很類似吧,區別只在于最后面是%1,而不是一個文件名.%1表示將選中的圖片文件名作為參數傳遞給windows圖片查看器,也就是說雙擊的時候,%1將被當前的文件名替換(在批處理中,%1代表命令行的第一個參數,).嘿嘿,你可以把%1換成某具體圖片的路徑試試,很爽吧,無論雙擊哪個圖片,打開的都是同一個圖片.(玩得差不多了記得改回來哦)
3.注冊表(regedit),展開HKEY_CLASSES_ROOT\jpegfile\shell\open\command,是不是在右邊看到了和剛才的那一串"rundll32.exe C:\WINDOWS\system32\shimgvw.dll,ImageView_Fullscreen %1"一模一樣,這就是jpg文件的打開方式,看一下這個注冊表路徑吧
HKEY_CLASSES_ROOT\jpegfile\shell\open\command
HKEY_CLASSES_ROOT不多說,這下面的都是一些OLE信息,包括文件擴展名,文件類型,文件圖標,關聯的打開方式,以及分類標識(CLSID).
jpegfile某種文件類型,這里是jpg圖片文件.
shell一般是固定的
open選中該類文件右鍵第一項所出現的文字(該項是黑體的),默認顯示為打開,這里是預覽.可以是其他名字,但這樣將不保證它一定會出現在右鍵第一項,特別是有多種程序關聯時.我做個示范,把open重命名為open1.
重命名前:
重命名后:
可能你的右鍵菜單沒這么多選項,這里真正只與jpg文件關聯的只有用ImageReady編輯,用Photoshop編輯,預覽,打印這四個,對應注冊表如圖:
如何將預覽放到右鍵第一個選項而又不以open為名,很簡單,只要讓它在注冊表的位置排到另兩個前面就可以了,注冊表中的項是按字母順序排列的,所以只要我的名字能比EdtIR8更靠前就行,比如以A開頭的...
command當前一項是open時,它表示雙擊或右鍵選擇第一項時所要執行的命令,只要有command的上一項,右鍵菜單都會出現一個選項而command表示選擇這一項時所要執行的命令.
如果要將jpg用記事本打開,只要將rundll32.exe C:\WINDOWS\system32\shimgvw.dll,ImageView_Fullscreen %1修改為notepad.exe %1即可,更好的寫法應該是notepad.exe "%1",加上引號的目錄是即使要打開的文件路徑中包含空格,也可以打開.因為默認情況下,命令行的各參數間是以空格分隔的,如果文件路徑中出現空格,空格前將不再認為是第一個參數,從而導致系統找不到指定文件等.但這里由于notepad的特殊性,不會出錯的.
有興趣的可以看看txt,exe,com,bat,vbs等文件的關聯,如果病毒要修改文件關聯,這幾個是優先選擇的.
其中exe的關聯是比較特殊的,它的值為"%1" %*
這里的"%1"可以和上面一樣理解,%*是指其他所有參數,這也是exe文件可以帶參數運行的原因.
試試把它的值改成%1 %*,即去掉%1上的引號,很多程序仍然可以正常打開,有些卻不行,原因是該exe文件路徑中有空格,打開目錄運行C:\Program Files\WinRAR\WinRAR.exe,結果如圖:
病毒一般會直接把這個值改成病毒文件的路徑,不帶參數.此時當你雙擊exe文件時,運行的將是病毒,這種改法是最常見的.另一種改法是不直接修改exefile下面的項,而是這樣修改:
新建一個項,名字任意,比如我取名為anti4,繼續新建shell,command等項,將值改為病毒文件的路徑.
然后,將HKEY_CLASSES_ROOT\.exe右邊名稱為默認的項的值改為anti4.
當你雙擊一個文件時,系統所做的工作是這樣的:先判斷文件的后綴,比如我雙擊的是一個exe文件,則系統會在HKEY_CLASSES_ROOT下面找名為.exe的項,讀取它的值,比如它的值為anti4,那么系統再找名為anti4的項,再讀取它下面shell\command的值,然后根據這里的命令打開.
剛剛是不是在我的右鍵菜單中看到了有個復制文件路徑的命令,它是關聯所有文件的,目的是為了自己使用方便,方法是這樣的:
在HKEY_CLASSES_ROOT\*\shell下新建一個項,名稱任意,直接取名為"復制文件路徑"好了,在它下面新建一名為command的項,將它右邊的值改成符合要求的命令,這個命令其實是一個程序文件,該程序的功能是讀取命令行的第一個參數,并將該參數復制到系統剪貼板并退出,有能力的自己寫一下這個程序,或者下載附件中的解壓到某個路徑下,command的值就改為這個程序的路徑,后面加個半角空格,再加%1即可,比如d:\soft\system\copy.exe %1
這樣只是關聯了所有類型的文件,如果要關聯文件夾,方法和上面一樣的:
[HKEY_CLASSES_ROOT\Directory\shell\復制文件夾路徑\command]默認=d:\soft\system\copy.exe %1
然后就是一些細節問題了,比如去掉第一個字下面的下劃線,加個快捷鍵等.
[HKEY_CLASSES_RO/T\Directory\shell\復制文件夾路徑]默認=復制文件夾路徑(&C)
關聯文件也可以到HKEY_CLASSES_ROOT\Folder\shell下去修改.
如果你要把記事本關聯到所有文件,方法也是一樣的,如果要關聯某幾種文件類型,就到特定的文件類型下修改即可.其他的東西大家可以自己探索下,比如修改某類文件的圖標,不顯示某類文件的擴展名等.
四.系統特殊文件夾
在我們的桌面上或其他地方有一些文件夾并不是真正的文件夾,而是一個OLE對象(組件類),比如我的電腦,控制面板等.系統使用一個叫做class id(CLSID)的一串16進制數字來標識它們(稱為分類標識),注冊表路徑:HKEY_CLASSES_ROOT\CLSID
CLSID像居民身份證一樣,是一個組件類的唯一標識.對于每個組件類,系統都分配一個唯一表示它的ID(IDentity),這個ID是根據當時的時間,機器地址等信息動態產生的,命名規則為{8-4-4-4-12},這里的數字表示16進制數的個數.
class id中的class在這里解釋為對象,至于什么是對象,請看前面的課程.
比如我的文檔的CLSID為450D8FBA-AD25-11D0-98A8-0800361B1103,使用時必須將CLSID用大括號括起來.
如果要修改某個的圖標,只要修改HKEY_CLASSES_ROOT\CLSID\{xxxxx}\DefaultIcon的圖標文件的路徑.
大家先找到我的文檔的CLSID,不要直接去找哈,用查找功能,不然會眼花的的.也不要試圖去記住這串字符,我保證你是記不住的.我的文檔圖標的默認值為%SystemRoot%\system32\SHELL32.dll,-235.
InProcServer32這個項下的也是很重要的,它包含了線程模型(ThreadingModel),當你打開這個對象時,這里默認值處的DLL就會被加載,于是又給了病毒可乘之機.
附常用的CLSID:
我的文檔:450D8FBA-AD25-11D0-98A8-0800361B1103
我的電腦:20D04FE0-3AEA-1069-A2D8-08002B30309D
網上鄰居:208D2C60-3AEA-1069-A2D7-08002B30309D
回收站:645FF040-5081-101B-9F08-00AA002F954E
Internet Explorer:871C5380-42A0-1069-A2EA-08002B30309D
控制面板:21EC2020-3AEA-1069-A2DD-08002B30309D
五.勾子掛接啟動
注冊表位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks
很多軟件都會利用這個位置,病毒,安全軟件等當然也會用.以達到隨系統啟動的目的,鍵名是一個CLSID,值為空.根據這個CLSID到HKEY_CLASSES_ROOT\CLSID下去查找,找到后展開InPrOcservEr32,右邊就可以看到對應的DLL文件了.如果是病毒文件,則要刪除這兩個地方的信息.舉例如下:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks]
鍵名{288BD9BD-F0DC-46B1-81B5-2B61DF8077CE}值為空
[HKEY_CLASSES_ROOT\CLSID\{288BD9BD-F0DC-46B1-81B5-2B61DF8077CE}\InPrOcservEr32]
默認值為abc.dll
清理時需要刪除上面的鍵名以及整個HKEY_CLASSES_ROOT\CLSID\{288BD9BD-F0DC-46B1-81B5-2B61DF8077CE}項,有時候不是刪除,而是修改,主要看這個CLSID是本來就有的還是病毒創建的