[Javascript]ActiveX與小紅傘(Avira AntiVir)的孽緣
最近有使用者反應,我們的系統有病毒,而被偵測出有病毒的是某個js檔,怪怪,js不過就是文字檔,又沒有夾帶巨集,怎麼會被視為病毒呢?不過有圖為證:
厲害了,它檢查出我程式中用到的一個ActiveX.js是有危險性的檔案,可能夾帶病毒,所以建議使用者將他排除,使用者將他排除後發現系統某些功能不work了,後來我確認後發現這個檔案有用到ActiveX,且有透過RegWrite嘗試去寫機碼,不過玄奇的來了,如果是在寫機碼的過程中被判斷這個檔案『嘗試』、『意圖』侵害你的系統我也就認了,偏偏不是,我只是從Server上下載這個檔案,在網頁中這麼寫,跑到這一行開始下載這個js檔就被判斷是有問題了:
這就讓人感到有趣了,後來我發現是因為我的js檔中有.RegWrite這個字樣,所以會被判斷是病毒,以下三種格式的寫法都會被判斷是病毒:
//實際呼叫RegWrite
WshShell.RegWrite();
//隨便亂寫
xxx.RegWrite();
//連Object都沒有
.RegWrite();
而單純只有RegWrite(沒有前面那一點)的寫法卻是OK的,不過沒有那個點,RegWrite就只是一般的function而已,系統的功能還是需要執行ActiveX去寫機碼,怎麼辦?
後來我想如果他是以關鍵字來識別的話,我透過eval來欺騙它試看看,我就這樣寫,故意把.跟RegWrite分開:
這樣沒有看到.RegWrite應該要OK了吧,結果很讓人失望的,竟然不行,讓人不得不佩服它的判斷法則,大概已經考量到這種破解方法了吧,不過本著開發人員頑固的心,我還是要再試看看各種組合:
eval("WshShell"+ "." + "RegWrite('HKCU\\Software\\Microsoft\\Internet Explorer\\New Windows\\PopupMgr','0')");
//把Reg分開
eval("WshShell"+ ".Reg" + "Write('HKCU\\Software\\Microsoft\\Internet Explorer\\New Windows\\PopupMgr','0')");
//亂拆
eval("WshShell"+ ".RegWri" + "te('HKCU\\Software\\Microsoft\\Internet Explorer\\New Windows\\PopupMgr','0')");
結果一樣讓人大失所望,還是不行,所以我猜,它在遇到eval時,會先將參數的內容組起來看看是否包含.RegWrite,就在我快將放棄之際,我想再嘗試最後一種方法,如果它是這樣判別,那我就先將各字串放到變數中,最後再透過eval來組合,它總沒辦法識別我runtime才組出來的結果吧:
var tA = "WshShell";
var tB = ".RegWri";
var tC = "te('HKCU\\Software\\Microsoft\\Internet Explorer\\New Windows\\PopupMgr','0')";
eval(tA + tB + tC);
本來只是想測驗一下它是不是真的這麼神,結果這個寫法,竟然可以了,可以了,可以了耶...沒枉費我跟你奮戰一個多小時...(泣)...
我現在用來測試的是Avira AntiVir 9.0版,不知道下個版本這種方法會不會被鎖掉(應該不太可能鎖的到,除非runtime時去檔),以後還是儘量不要用ActiveX好了...
話說這個小紅傘真厲害,我在我電腦中搬移這個js檔,修改它存檔時它都會跟我說這個檔案有病毒,其它的防毒軟體都沒這麼厲害...
游舒帆 (gipi) 探索原力Co-founder,曾任TutorABC協理與鼎新電腦總監,並曾獲選兩屆微軟最有價值專家 ( MVP ),離開職場後創辦探索原力,致力於協助青少年培養面對未來的能力。認為教育與組織育才其實息息相關,都是在為未來儲備能量,2018年起成立為期一年的專題課程《職涯躍升的關鍵24堂課》,為培養台灣未來的領袖而努力。 |