在XP時代,少有病毒作者使用。net編程語言開發惡意程序,反病毒廠商也很少檢測。net文件,因為默認環境下。net程序需要額外安裝運行時環境。但隨著Win7的普及,其自帶的。net環境免除了這一限制,也讓。net型病毒快速增加;另外由於。net的指令是非x86的中間語言(IL),也使傳統的啟發式和虛擬機引擎很難做到通用檢測。 最近AVG中國防病毒實驗室截獲到一款。net下載器,值得一提的是它利用了用戶機器中的語言編譯器對自身代碼進行重新編譯,以躲過主防軟件的查殺。
原始文件的,net IL經過加密,受保護的文件內容在經過加密後通過Assembly.Load重現裝入內存,並進入入口調用。
真實的病毒文件首先向磁盤寫入一個vb源代碼文件,然後調用%Windows%\\Microsoft.NET\\Framework\\v2.0.50727\\vbc.exe 將其編譯為WLIDSCV.exe,並設置自啟動。Vbc.exe是。net framework 自帶的vb編譯器。
由於這個程序是在用戶的機器上編譯生成的,部分主防認為是開發測試之用,因此忽略這個文件。病毒因此達到躲避主防的目的。另外由於源程序每次編譯產生的可執行文件都有一些差異,這樣也為病毒逃脫雲查殺提供了機會。
該文件的代碼也比較簡單,結束掉vbc.exe進程,並且每3秒鐘檢查一次。net病毒母體是否在運行,沒有在運行就啟動它。這樣動態編譯出的程序就成為了作為病毒的守護進程存在。
病毒主要的功能是下載,從互聯網下載一個新的惡意程序,並運行。
下載下來的文件仍然是一個。net程序。使用同樣的加密方式。
首先病毒釋放一個C#源代碼文件,它的功能是注入代碼到目標進程,使用經典的NtUnmapViewOfSection方法。
然後調用位於C:\Windows\Microsoft.NET\Framework\v2.0.50727 下的csc.exe,將此源代碼編譯為一個dll.Csc.exe是。net framework自帶的C#編譯器。
病毒體加載這個dll,並調用這個dll將自身中解密出的一個非。net惡意程序注入到svchost中。病毒編譯生成新dll並調用新dll,而不是直接調用的原因是部分啟發引擎會識別。net程序中的引用的Win32API,會檢測產生注入的代碼。
由於。net程序難以操作底層,因此。net惡意軟件常常以下載器,釋放器的面目出現,為黑客進一步入侵用戶的計算機做鋪墊。尤其隨著WP7 等微軟移動設備的普及,。net framework 因為其跨平台,開發較容易的特點,會吸引越來越多的開發人員,當然其中也包括病毒作者……net惡意軟件也許會漸漸成為一種趨勢。AVG提醒廣大用戶,經常更新病毒庫,不輕易運行陌生的可執行程序,包括。net應用程序。