本來想寫個“紅色代碼Ⅳ”,不過病毒的首要特征,例如API重定位,調用GetKBase 得到Kernel32.dll的基地址,然后再調用調用GetAPIz得到病毒所需要的API,在匯編上實現這些,目前對我來說有難度。在感染過程,要考慮到什么時候感染?感染什么?感染是病毒的核心技術,病毒野蠻地把預定的可執行代碼插入到正常文件中,當文件執行的時候,先執行病毒代碼,或者添加一些字節。在正常的PE文件中,包括執行代碼,頭文件信息,數據結構以及描述的各類資源信息,病毒感染文件的時候,并沒有把這些也寫進去,所以要自己搜索,具體的代碼,目前還不能寫,但是我會參照別人寫的。在傳播方面,目前倒是有一個利用郵件附件傳播的,在創建Base64編碼等方面,我略有缺陷。
病毒不能完整的寫,起碼也要來個半斤的,所以,就有了這個惡意程序的編寫過程.說到惡意,其實也不惡,頂多是惡作劇,僅是修改了一些注冊表,設置為啟動,象征性刪除一些文件。本來想加入日志鉤子,事件發生時,創建一個shutdown進程惡搞,不過在加進去的模塊對話框后,程序進入了一個死循環。
在程序的開頭,調用_createKey子程序設置了啟動的鍵值:
|
這些就是第一步所以設定的。在啟動方式中,估計注冊表Run啟動是最脆弱的,復制到啟動文件夾的話,又明顯。最好的辦法是創建遠程線程,然后打開文件管理器 xplorer.exe插入,并且還能隱藏。有個例子是隱藏窗口進程的,桌面的窗口類是“Progman”,我想插進去rundll32.exe,無奈不知道它的類,所以將就些,把目標定位注冊表啟動,況且這個我掌握的也比較熟悉。
在開機后,我加入了判斷本地時間后發作的代碼:
|
在win32API 中,對GetSystemTime的描述是“在一個SYSTEMTIME中載入當前系統時間,這個時間采用的是‘協同世界時間’(即UTC,也叫做 GMT)格式”,參數只有一個“lpSystemTime”,并要定義一個“SYSTEMTIME”結構 “lpSystemTime SYSTEMTIME >”。如果今天是1,3,5,7,9……,27,29,那么程序在開機運行的時候,就對系統進行了如下操作:復制自己到系統目錄 [注:這個系統目錄,我定義成"szWin db ''C:\windows\system32\exp1orer.exe'',0")所以在windows2000以下的系統,是不能復制的。
|
利用GetModuleFileName獲取路徑,然后調用CopyFile,復制到系統目錄去。接著“call _AttribCmd”,調用了“_AttribCmd”這個子程序設置只讀,隱藏屬性。“_AttribCmd”代碼描述如下:
|
很顯然,是調用了createProcess創建一個帶szCmdAttrib參數的進程。這樣,一些用命令參數的程序,可以這樣編程來運行,例如 ping,首先設定變量“szCmd db ''c:\windows\system32\ping.exe IP -t'',0”,描述代碼是:
|
本來這里就到了全盤搜索exe文件進行感染的時候了,不過這個程序不是病毒,只能象征性搞些惡作劇,我這里是通過修改注冊表達到隱藏桌面圖表,估計MM是認為感染了病毒。
Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\'', |
調用了子程序_WriteKey來完成:
|
做完后,這一步就到了傳播,呵呵,不過偶沒寫,就來個“invoke deleteFile,addr szDirectory”刪除,然后也就退出了“invoke ExitProcess,NULL”雖然說惡意程序,但是破壞的地方不多。如果要模擬“萬花谷”的破壞方式,也就是禁止了注冊表而已,這個完全可以做到。程序的完整代碼如下:
Policies\Explorer\'',0szWriteValue db ''NoDesktop'',0 ; |
這個程序要是經過惡意修改,格式化磁盤是完全沒問題的,無非就是調用一個“createProcess”,但是知道了一種調用方法,其他的也是千篇一律,例如對注冊表修改,禁止右鍵,禁止使用任務管理器,禁止IE選項等等所以我聲明一下,這個程序帶有一點點的攻擊性,發表僅僅提供交流,如果使用,后果由使用者自己負責,與作者和邪惡八進制無關。


