自二十世紀八十年代發布以來,殺毒軟體已和免殺技術對抗二十多年。黑客們前僕後繼,想方設法地讓一小段shellcode在內存中執行並不被發現。下面簡單介紹一些免殺技術。
殺軟檢測木馬的重要手段之一就是提取特徵,生成特徵碼,再與特徵庫中地特徵碼進行匹配。無論特徵碼是靜態的還是行為的,只要破壞木馬原有的特徵,就可以使靠特徵碼識別的殺軟失效。最簡單粗暴的方式是對惡意軟體的字符串、文件結構和原始碼進行修改調整,例如在代碼中加入花指令,在真正的惡意代碼中加入大量的無用指令,導致殺毒軟加無法識別真正的惡意行為代碼邏輯。常見的花指令包括加數據計算代碼,加減乘除各類組合、加字符串操作代碼,增加、刪除、查找、替換等、加多層跳轉,跳轉間加無效指令(不會執行的)、加貌似有效的API調用,如LoadLibrary+GetProcAddr+API等。
將木馬偽裝成正常軟體也是免殺的思路之一,很多殺毒軟體會有白名單,檢查了程序的籤名,圖標和版本信息等,如果可信就不對其進行惡意軟體掃描。例如使用ResHacker對文件進行資源操作,找來多個正常軟體,將它們的資源加入到自己軟體,如圖片,版本信息,對話框等、使用籤名偽造工具,將正常軟體的籤名信息加入到自己軟體中。
加殼免殺也是修改特徵的手段。這裡的加殼和軟體加殼是一個概念,是通過增加一段代碼對軟體進行加密或者壓縮,從而阻止軟體被反編譯。加了殼的程序特徵會被殼完全破壞,但是程序的功能卻能完整保留,看起來是不是非常適合運用到木馬上製作成免殺馬?不過現在有些殺毒軟體也會檢測殼的特徵,簡單的殼甚至會被直接脫了進而對程序進行分析。這時候我們可以找一些冷門殼,或者開源殼手動修改殼的特徵。
其實惡意行為都是通過調用系統API的方式實現,殺毒軟體只要監控特定API就可以監控惡意軟體的行為。因此我們可以針對API實現行為免殺:將特定API替換成相同功能的導出API、未導出API和更底層API,甚至可以在自己的惡意軟體中實現重寫API。這些都可以規避殺毒軟體監控的固定API,從而實現免殺。