Worm.Win32. RavMon

該病毒屬蠕蟲類,病毒作者通過python2exe來編譯的病毒,python2exe使用python的modualfinder來調入要運行的scripts尋找並運行它所需要的所有python模組和擴展模組。病毒運行後會複製原病毒體到%windir%\RavMon.exe,而後調用註冊表相關函式,將該病毒副本添加到啟動項,達到隨系統啟動的目的。

概述

病毒名稱:Worm.Win32. RavMon
病毒類型:蠕蟲
危害等級:中
檔案長度:3,513,806 位元組
檔案MD5:5D8CC0712927E07A1BAB416493F43036
公開範圍:完全公開
感染系統:windows 98 及以上版本
開發工具:python

病毒描述

病毒還會嘗試收集感染主機的信息,如:感染的主機名,當前windows版本等。如果當前系統為xp,則病毒還會通過運行“netsh firewall delete portopening TCP”來刪除防火牆連線埠配置協定中的傳輸控制協定,進而降低系統的安全性。病毒嘗試連線網路,獲取一個shell,通過運行rundll32.exe並載入shdocvw.dll來打開一個URL地址。病毒還具有結束進程功能。此病毒通過隨身碟和移動設備來進行傳播。

行為分析

1、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\RavAV
鍵值: 字串: "C:\WINNT\RavMon.exe"
2、病毒嘗試連線網路,嘗試連線下地址:
3、開啟本機一個隨機連線埠並傳送獲得的計算機信息。如:計算機名、連線埠、版本信息等。
4、猜測該病毒的某些功能對應的python模組檔案名:
終止進程對應的python模組名為:killProcName.pyo
url地址對應的python模組名為: urllib.pyo、urlparse.pyo
獲取目標主機信息對應的python模組名為:os.pyo
http相關的python模組名為:httplib.pyo
刪除cookiess對應的python模組名為:cookiess.pyo
base64/quopri編碼功能對應的python模組名為:base64.pyo
cmd功能對應的python模組名為:cmd.pyo
修改註冊表對應的python模組名為:copy_reg.pyo
ftp相關的python模組名為:ftplib.pyo
調用socket相關的python模組名為:socket.pyo
usb相關的python模組名為:usb.pyo
--------------------------------------------------------------------------------

代碼分析

python2exe使用python的modualfinder來調入要運行的scripts並且尋找運行它所需要的所有python模組和擴展模組。
純python的模組在臨時目錄里被編譯成.pyc(debug)和.pyo(optimized)的檔案。編譯後的擴展模組pyd檔案也能找到。
最後生成一個與zip兼容的包,包含一個dependency目錄和你的script,這個包最後提供給一個py2exe自帶的python解釋器。
運行生成的程式,將建立一個重要的關聯,這樣在script開始運行的時候,必要的模組可以從包中的正確地import。
由於擴展模組不能從zip包中包含或import,它們以被單讀提供。放在dist\myscript目錄下。
解碼的過程:
main, winmain調用start函式。
start:
(1) 獲得目錄名和檔案名稱(GetModuleFileName)
(2) 取出執行檔案的數據(MapExistingFile)
(3) 獲得script的信息(GetScriptInfo)
(4) 用_putenv設定用戶的環境變數(PYTHONHOME,PYTHONPATH,PYTHONOPTIMIZE,PYTHONDEBUG等)
(5) 將scriptinfo種的信息來設定python內部變數(Py_NoSiteFlag, Py_VerboseFlag等)
(6) Py_Initialize()
(7) PySys_SetArgv(argc, argv)
(8) 調用BuildToc獲得toc(dict對象)
(9) 調用PyRun_SimpleString執行"import sys; sys.path=[r'%s']"
(10)調用Load_Module調入imputil模組,調用PyRun_SimpleString執行"import imputil"
(11)Py_InitModule("__main__", methods);
(12)解出Scripts\\並運行它
(13)解出Scripts\\__main__.py並運行它(這裡的__main__.py就是要打包的python檔案,被重命名為__main__.py)
source\start.c:
1. MapExistingFile:用檔案映像的方法打開檔案,讀處理裡面的內容。
2. GetScriptInfo: 從archive.h中定義的(central directory record)格式的數據中取出script info(optimize, verbose, tag)到全局變數p_script_info中。
3. BuildToc:構造一個新的dict對象,在arch檔案中做一個循環,取出所有的name放入dict中(PyDict_SetItem),其中調用了fixpath來解決"\"和"/"的統一問題,並將dict返回(注意,name好像是不帶後綴的)。
4. extract_data: 使用zlib.h中定義的zstream結構,從archive結構中獲得指定的長度的數據 5. GetContentsFromOffset:計算位置,調用extract獲得數據。
6. GetContents:利用PyDict_GetItemString從toc中得到指定的名字的檔案的位置,調用GetContentsFromOffset獲得數據。
7. Load_Module:檢查p_script_info->optimize,判斷檔案名稱的後綴是".pyo"還是".pyc",調用GetContents從數據中調出這個檔案。
8. get_code:指定名字,獲得這個檔案的內容:GetContents + PyString_FromString。

相關詞條

相關搜尋

熱門詞條

聯絡我們