隨著黑客圈子逐漸向商業化靠攏,以及防毒廠商間的互相競爭愈演愈烈,導致新出現的免費且好用的木馬越來越少,除此之外,木馬的生存期也在逐漸縮短!而另一方面,新出現的攻擊手法越來越少,使得學習黑客技術的我們不得不考慮怎樣擺脫或改善現有環境。 因此,免殺技術逐漸火熱起來,而作為一個黑客技術初學者,掌握免殺技術更是迫在眉睫! 這篇文章就由帶領你由防毒軟體原理開始,逐步砸實基礎,從而晉升為免殺高手,為以後的黑客生涯鋪平道路。 對於免殺,也許大家或多或少都有些瞭解,但是大家對防毒軟體又有多少了解呢?也許正因為是你對防毒軟體瞭解不足,所以才造成一些看似比較奇怪的問題,例如無法精確的定位出特徵碼,或者每次定位的特徵碼都不一樣等等。 如果我們對防毒軟體若能有一個大體的瞭解,就會使一些問題迎刃而解,從而做到更加有效率的進行免殺。 一、防毒軟體原理基礎 一個防毒軟體的構造的複雜程度要遠遠高於木馬或病毒,所以其原理也比較複雜。而且鑑於現在木馬病毒越來越向系統底層發展,防毒軟體的編譯技術也在不斷向系統底層靠近。例如現在的“主動防禦”技術,就是應用RING0層的編譯技巧。這裡我簡單為大家介紹一下基本構成。 一個防毒軟體一般由掃描器、病毒庫與虛擬機器組成,並由主程式將他們結為一體,如圖1。 掃描器是防毒軟體的核心,用於發現病毒,一個防毒軟體的防毒效果好壞就直接取決於它的掃描器編譯技術與演算法是否先進,而且防毒軟體不同的功能往往對應著不同的掃描器,也就是說,大多數防毒軟體都是由多個掃描器組成的。而病毒庫儲存的特徵碼形式則取決於掃描器採用哪種掃描技術。它裡面儲存著很多病毒所具有的獨一無二的特徵字元,我們稱之為“特徵碼”。特徵碼總的分來只有兩個,檔案特徵碼與記憶體特徵碼。檔案特徵碼存在於一些未執行的檔案裡,例如EXE檔案、RMVB檔案、jpg檔案甚至是txt檔案中都有可能存在檔案特徵碼,也都有可能被查殺。而記憶體特徵碼僅僅存在於記憶體中已執行的應用程式。而虛擬機器則是最近引進的概念,它可以使病毒在一個由防毒軟體構建的虛擬環境中執行,與現實的CPU、硬碟等完全隔離,從而可以更加深入的檢測檔案的安全性。 簡單的說,防毒軟體的原理就是匹配特徵碼。當掃描得到一個檔案時,防毒軟體會檢測這個檔案裡是否包含病毒庫裡所包含的特徵碼,如果有,則報毒病查殺,如果沒有,縱然這個檔案確實是一個病毒,它也會把它當作正常檔案來看待。 二、基於檔案掃描的防毒技術 基於檔案的防毒技術可以分為“第一代掃描技術”、“第二代掃描技術”與“演算法掃描”這三種方法,對於免殺愛好者來說,要對每一種方法爛熟於心,才能成為高手!但做為一個初學者來說了解一下即可。這裡我們就簡單介紹一下其中兩種種方法,詳細的技術原理如果各位得這有興趣的話可以自己研究。 1、萬用字元掃描技術 萬用字元掃描技術屬於是第一代掃描技術的一個分支,對於“萬用字元”,可以理解為具有一定意義的符號,例如DOS命令裡的*號就是任意長度的任意字元的意思,而且萬用字元在不同的領域也裡可以代表不同的意思。 現在防毒軟體中簡單的掃描器常常支援萬用字元,因為鑑於字串掃描技術的執行速度與特徵碼長度限制等問題,使得其逐漸退出歷史舞臺,取而代之的是萬用字元掃描技術,萬用字元掃描技術以同樣簡單的原理與技術卻實現了更為強大的功能。 掃描器中的萬用字元一般用於跳過某些位元組或位元組範圍,以至於現在有些掃描器還支援正則表示式! 下面我們通過一個例子來講解萬用字元掃描技術的原理。 例如我們的病毒庫中有這樣一段特徵碼: 0400 B801 020E 07BB ??02 %3 33C9 8BD1 419C 上面的特徵碼可以解釋為: 1、嘗試匹配04,如果找到則繼續,否則跳出。 2、嘗試上一匹配目標後匹配00,如果找到則繼續,否則跳出。 3、嘗試上一匹配目標後匹配B8,如果找到則繼續,否則跳出。 4、嘗試上一匹配目標後匹配01,如果找到則繼續,否則跳出。 5、嘗試上一匹配目標後匹配02,如果找到則繼續,否則跳出。 6、嘗試上一匹配目標後匹配0E,如果找到則繼續,否則跳出。 7、嘗試上一匹配目標後匹配07,如果找到則繼續,否則跳出。 8、嘗試上一匹配目標後匹配BB,如果找到則繼續,否則跳出。 9、忽略此位元組。 10、嘗試上一匹配目標後匹配02,如果找到則繼續,否則跳出。 11、在接下來的3個位置(位元組)中嘗試匹配33,如果找到則繼續,否則跳出。 12、嘗試上一匹配目標後匹配C9,如果找到則繼續,否則跳出。 13、嘗試上一匹配目標後匹配8B,如果找到則繼續,否則跳出。 14、嘗試上一匹配目標後匹配D1,如果找到則繼續,否則跳出。 15、嘗試上一匹配目標後匹配41,如果找到則繼續,否則跳出。 16、嘗試上一匹配目標後匹配9C,如果找到則繼續,否則跳出。 這種掃描技術通常支援半位元組匹配,這樣可以更精確地匹配特徵碼,一些早期的加密病毒用這種方法都比較容易檢測出來。 其實現在的一些特徵碼仍然在使用類似此種方法的特徵碼錶達技術,因此掌握這些知識會對我們以後的免殺有所幫助,同樣可以使我們在定位特徵碼時更加了解自己正在做什麼,以及做的是否正確等等,這對於我們來說非常重要。 2、智慧掃描 智慧掃描屬於第二代掃描技術的一個分支,這種方法是在一種病毒變異工具包出現之後提出的。智慧掃描法會忽略檢測檔案中象NOP這樣的無意義指令。而對於文字格式的指令碼病毒或巨集病毒,則可以替換掉多餘的例如空格、換行符或製表符等空白字元,這一切替換動作在掃描緩衝區就會執行,從而大大提高了掃描器的檢測能力。 3、近似精確識別法 近似精確識別法同樣是屬於第二代掃描技術的一個分支,但是相比起來應用的更為廣泛,這種掃描技術包含了兩種方式與若干種方法,在這裡不可能一一介紹,下面將主要介紹兩種方法的代表。 方法一:多套特徵碼 該方法採用兩個或更多個字串集來檢測每個病毒,如果掃描器檢測到其中一個特徵符合,那麼就會警告發現變種,但並不會執行下一步操作(例如清除病毒體或刪除檔案)。如果多個特徵碼全部符合,則報警發現病毒,並執行下一步操作。 方法二:效驗和 對於校驗和,也許有些朋友會想到檔案校驗和比對的方法,這個方法的思路是將每一個無毒的檔案生成一個校驗和,等待下次掃描時在進行簡單的校驗和比對即可,如果校驗和有所變化,在進行進一步的掃描,這樣有利於提升掃描器的效率,但是嚴格地說,這並不算是掃描技術。 效驗和掃描技術利用的最為到位的就是比較出名的KAV(卡巴斯基)了,它的第二代掃描器就採用了密碼效驗和技術,並且沒有使用任何搜尋字串技術。關於效驗和是一個複雜的概念,簡單的說就是通過對病毒中的某一段程式碼的計算,從而得出一個值(例如123XY4),與MD5加密有些相似,當然這樣說不完全正確。 但KAV採用的是一種由卡巴斯基發明的一種叫做密碼效驗和的特殊演算法,這種演算法通常會產生兩個值。而且病毒庫的查詢採用了特徵碼分類思想,例如掃描EXE檔案時只調用與EXE檔案有關的病毒庫,而根據EXE檔案的位置不同(例如檔案頭、入口點)又分為不同的子庫,這樣有利於提高掃描速度。 三、由此得出的一些經驗 首先我們應該明白第一個例子介紹的萬用字元“0400 B801 020E 07BB ??02 %3 33C9 8BD1 419C”代表的肯定不是一個位元組。也就是說,防毒軟體廠商定位的特徵一般都是數十位元組,所以我們定位特徵碼時就要避免定位過於精確,一般保證在10位元組以內就足夠了!因為如果特徵碼定位的過於精確,會為我們以後的修改操作帶來很大不必要的麻煩。我們可以簡單的想一下,是修改一個位元組的方法多,還是修改10位元組的方法多? 而由智慧掃描我們也可以得出一個結論,就是不要將防毒軟體想的太傻,例如屬於智慧掃描的一個分支——啟發式掃描,它會將一些異常改動計算到可能性的“權值”裡,如果一個檔案的可疑改動過多,就會導致報毒,這樣我們所做的一些工作就起到了相反的作用,是典型的畫蛇添足。所以,修改木馬檔案時也要掌握一個度的問題,不要修改的過多,但還要保證自己的木馬免殺時間夠長,這就要明白那些更改會被歸為可疑修改,而那些則不會。但是掌握這些是需要一定的PE檔案結構基礎知識的,對於PE檔案,我會在下篇文章詳細介紹。 而最後的就是卡巴斯基的密碼校驗和掃描技術了,恐怕這在業內也是第一次提出來,各位看官有福了! 對於密碼校驗和的更深層次的知識,這裡我們不再細談,我們只談他對免殺帶來什麼樣的影響。首先,特殊的掃描方法必然會導致特殊的特徵碼,所以密碼校驗和的真正特徵碼通常體積都比較大,通過指令碼木馬的一些實驗,卡巴斯基7.0對字母的大小寫不是很敏感,此外對檔案程式碼的變動也不是很敏感。也就是說,只要包含特徵碼的這行程式碼在卡巴斯基的校驗和取樣範圍之內,那麼它就會報毒,而如果你將其移出這個範圍,那麼肯定會導致檔案不能正常執行,唯一的辦法就是更改程式碼結構。 如果大家注意總結與思考,會發現一些免殺方面的模糊概念完全可以用本文介紹的知識解釋通,例如什麼“隱含特徵碼”等等。