木馬免殺基礎學習

參考書籍:《木馬攻防全攻略》 --萬立夫編著  --電腦報電子音像出版社

參考鏈接:https://www.52pojie.cn/thread-32064-1-1.html

 

推薦的免殺思路鏈接:http://www.cnhonkerarmy.com/thread-187791-1-1.html

http://www.cnhonkerarmy.com/forum.php?fromuid=964594&mod=viewthread&tid=224610

 

本篇文章只對主機木馬進行基礎的描述,腳本木馬,一句話等網馬不做描述

現在進入正題

一、殺軟原理基礎

殺軟一般由掃描器、病毒庫與虛擬機組成,並由主程序將他們結爲一體,掃描器是殺軟的核心,用於分析發現病毒。一款殺軟的殺毒效果直接取決於他的掃描器編譯技術是否先進,而且殺軟的不同功能往往對應着不同的掃描器,也就是說大多數殺毒軟件是由多個掃描器組成的

而病毒庫存儲的特徵碼形式則取決於掃描器採用哪種掃描技術,它裏面存儲着很多病毒獨一無二的特徵字符,稱之爲“特徵碼”,特徵碼總的來分只有兩個:文件特徵碼與內存特徵碼。文件特徵碼存在於一些未執行的文件裏,而內存特徵碼僅僅存在於內存中已運行的應用程序,而虛擬機則可以使病毒在一個由殺軟構建的虛擬環境中運行,與現實的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對字母的大小寫不是很敏感,此外對文件代碼的變動也不是很敏感。也就是說,只要包含特徵碼的這行代碼在卡巴斯基的校驗和取樣範圍之內,那麼它就會報毒,而如果你將其移出這個範圍,那麼肯定會導致文件不能正常運行,唯一的辦法就是更改代碼結構。
      如果大家注意總結與思考,會發現一些免殺方面的模糊概念完全可以用本文介紹的知識解釋通,例如什麼“隱含特徵碼”等等。

三、認識殼

計算機軟件裏有一段程序代碼,專門負責保護軟件不被非法修改或反編譯。他們一般都是先於程序運行,拿到控制權後完成保護軟件的任務

殼出於程序作者想對程序資源壓縮、註冊保護的目的,把殼分爲壓縮殼、加密殼兩種。顧名思義,壓縮殼只是爲了減少程序體積對資源進行壓縮,而加密殼也就是常說的猛殼,他對程序輸入表等內容進行加密保護、具有良好的保護效果

四、殼的變異操作

因爲殼的更新並不會很頻繁,各大知名的殼子特徵碼都已經被各大廠商收集到了,所以通過正常加一層殼就達到免殺的效果是不現實的,所以黑客在進行加殼免殺的時候,經常使用一些不常見的生僻殼,或者選擇一些加密程度較高的猛殼,如果找不到這些殼應該怎麼辦?黑客採用的方法就是在其他殼原有的基礎上進行修改

我們可以將一些可以替換的彙編指令進行替換:如有時push 40E14F 替換爲 jmp 40E14F,或者sub esi 25 替換成 sbb esi 25等等一系列可替換的操作進行改變這樣就有可能會改變一些特徵碼,躲避殺軟的查殺,之後運行註冊機編寫器KeyMark等工具,將修改前和修改後的文件放入裏面,製作註冊機(免殺補丁)

或者使用現成補丁:例如NsPack 3.7免殺補丁 (北斗的免殺補丁)

五、多重加殼

多重加殼的意思就是在文件加了一層殼之後再進行加殼處理。理論上整個操作過程非常簡單,但是連續進行多次加殼操作時會出現錯誤

之所以出現這樣的的情況,是因爲在加殼後沒對文件的資源進行重建,所以就會出現加殼失敗的問題,我們可以使用工具來解決這個問題,如FreeRes

FreeRes不是脫殼工具,卻能分析被壓縮的資源。正因爲它不是脫殼工具,所以不用受制於加殼工具的版本問題,並且同樣也不受制於文件是被何種加殼工具壓縮的,他能百分百分析被壓縮的資源,對於被加殼壓縮的軟件,FreeRes還能爲他重新建立起一份可編輯的資源,使其他資源編輯工具能正常的處理加殼過的軟件

六、殼中改籽技巧

主要依賴的是reloc這款工具

主要格式爲:

reloc 程序名 入口地址 文件偏移 區段入口 區段偏移 參數

這種方式可以配合多種免殺技術來欺騙殺軟

七、花指令

概念:所謂花指令,其實就是一些程序中的無用代碼或垃圾代碼。有了這些代碼程序照樣正常運行,沒有這些代碼也不會影響程序的正常運行。對於程序來說畫質零屬於可有可無的範疇。其實花指令就是幾句彙編指令的集合,讓彙編指令進行一些代碼的跳轉或顛倒。這樣殺軟從頭至尾查找病毒代碼的時候,因爲代碼的跳轉或顛倒就很難找到病毒代碼,從而加大了殺毒軟件查殺病毒文件的難度

相關的工具有不少:如超級加花器,怒劍狂花,花花添加器等

修改舊花指令

雖然利用線程的工具來添加花指令是不錯的方法,但是很快也會被殺毒軟件識破,爲了不讓殺毒軟件查殺花指令,黑客往往是自己編寫花指令,或對已知的花指令進行變異花指令的變異有兩種常用的方式。第一是對網絡中公佈的花指令進行修改,再通過OD這樣的人彙編程序將花指令添加到程序之中。第二是通過網絡中公佈的花指令添加器,將舊的花指令代碼添加到程序之中後,再通過程序OD對添加的花指令進行修改,它有四種方法:1、替換法 2、添加法 3、排序法 4、移除法

有一種工具可以進行花指令的生成,叫做:花指令生成器

添加新花指令有兩種方法:

1、工具添加:超級加花器等等,不做解釋

2、手工添加:由於花指令是添加到程序文件的間隙之中,而有的程序文件的間隙又非常小,比如某些專班的灰鴿子木馬,如果直接加花的話,程序文件運行就會出現錯誤。所以首先需要對免殺程序添加一段00區域,可以用zeroadd這款工具,之後就是簡單的添加保存

八、分析查找木馬特徵碼

 雖然現在殺毒軟件已經加入了包括主動防禦、啓發式殺毒等方法,但是傳統的特徵碼殺毒依然在使用。因此要想使文件得到免殺,修改文件中的特徵碼也是一種常用的方法

何謂特徵碼:

所謂的特徵碼其實可以理解爲病毒的指紋,當殺毒軟件公司收集到一個新的病毒時,他們就會從這個病毒程序中截取一小段獨一無二且足以表示這是病毒的二進制程序代碼,以此當作查殺程序辨認此病毒的一句,也就是說當殺毒軟件在檢查一個軟件時如果發現裏面含有已截取到的某種病毒的特徵碼,就會把這個軟件認定爲病毒

分析文件特徵碼:

通過工具MYCCL將其進行分塊,然後殺軟分別查殺每個塊,然後單擊二次處理,這可能不是一次,之後確定大致範圍,之後把每個塊的大小調大,將其定位出來

修改文件特徵碼:

有五種方法:1、填充法 2、替換法 3、排序法 4、跳轉法 5、就近法

關鍵字分析修改:

除了特徵碼以外,很多文件自帶的關鍵字也成爲判斷的依據,尤其是很多專殺工具都是根據關鍵字進行判斷的。因此對關鍵字ide修改也非常重要,關鍵字的修改常常使用填充、替換、大小寫更換等多種方法

可以利用工具C32Asm打開服務端文件來進行關鍵字的分析搜索與修改

關鍵字分析修改可以用00數據來進行填充,但是有的地方不能,這時我們可以將關鍵字進行大小寫轉換,可能會騙過殺軟

內存特徵碼分析也可以通過MYCCL以及CCL來進行分塊查找

九、PE文件頭的分析修改

PE文件頭是PE文件的非常重要的部分,因此很多殺毒軟件都從PE文件頭裏提取特徵碼,爲此,就必須對這部分內容進行修改。

方法:(這些方法進行修改完後一定要對其進行測試,不論它是否可運行還是是否可以過殺軟)

1、文件頭變異

任何的免殺操作都是越簡單越好,因此修改PE文件頭也是這樣。好在修改PE文件頭的工具有很多,包括PE頭修改器,PE頭變異,PE僞裝器等

2、文件頭加一

首先運行修改程序PEditor,然後對“入口點”這個信息+1,這裏需要特別注意的是用這個軟件修改了文件頭後,會在程序中加入一段介紹PEditor軟件漢化的相關信息,而現在很多殺毒軟件都將這段信息定位爲熱證嗎,因此我們還要用16進制編輯器將那段特徵信息填充爲00

3、文件頭加密

通過VMProtect等工具對文件進行加密,也是非常常見的一種文件免殺方法。VMProtect利用虛擬機來保護代碼,可以對文件的特徵碼內容加密,當然也可以對PE文件頭的內容進行加密操作

4、調轉文件頭

調轉文件頭就是將文件頭的位置從現在的位置跳轉到其他的位置,讓原來的位置填充爲空白,整個操作過程和修改特徵碼中的替換法非常的相似

由於文件頭進行了修改,因此文件中的入口點也可以修改,修改的方法同樣包括兩種:

一是使用原來的入口點(將原來的入口點加入nop加上跳轉,來實現程序的載入)

二是使用新的入口點

5、移動文件頭

如果上面的方法都還不能免殺,那麼就只有進行文件頭的移動操作。這種方法可以同時對多款殺軟起到免殺效果,進一步起到保護作用

步驟:

首先運行PEClean清除PE文件頭垃圾

然後可以複製整個PE頭粘貼到原PE頭的上面,重新改變下PE頭裏面的關於PE頭大小的值,然後可以將沒用的原來的PE頭nop掉

十、輸入表內容分析修改

我們知道,在大型軟件中有很多dll文件,他們被稱爲“動態鏈接庫文件”,這些問就按中含有很多的導入函數,導入函數恕不能被直接執行的。當一個EXE主程序在運行的時候。他會調用DLL文件中的導入函數,當然執行的代碼也是在DLL文件中提取的。那麼EXE主程序是如何調用DLL文件中的導入函數呢?這就要歸功於輸入表了。輸入表就相當於EXE文件與DLL文件溝通的橋樑

重建輸入表:可以用ImportREC

轉移函數名稱:先用十六進制編輯工具將函數名稱nop掉,然後在一個新地址重新寫入該函數名稱,最後通過lordpe將函數入口點改變

十一、附加數據

很多人都會遇上一種非常奇怪的現象,就是木馬文件命名已經免殺成功了,可是當安裝到遠程系統以後卻被立即殺掉。這樣的情況讓人百思不得其解

爲什麼經本地測試成功的木馬在遠程系統中就失效了呢?其實這主要是附加數據在搗鬼。那什麼是附加書記?對於木馬後門程序來說,附加書記主要都是一些配置信息,比圖木馬程序的連接地址、鏈接端口、連接密碼等。這些數據被木馬後門作者通過一定規律驚醒編碼後,在創建服務端的時候被植入到程序的特定位置。而這些堅彌猴的附加數據,又有好多有規律性的數據信息,因此殺毒軟件利用廣譜就可以輕易地將木馬識破

當我們找到這段類似特徵碼的加密後的附加數據後,可以通過大小寫轉換的方式來進行附加數據的免殺

十二、修改木馬關鍵字符串

經過前面的學習,我們知道現在很多殺毒軟件都是將程序中的某些字符串提取爲特徵碼。對於英文的字符串,黑客常常通過改變大小寫的方式來免殺。但是這種方法並不是對任何殺毒軟件都有效,此外,如果是中文字符串或者其他內容的字符串,又應當如何設置呢?

有兩種方法可以解決這個問題:

調換字符串

替代字符串:有的文件中的數據被填充就不能使用了,比如灰鴿子木馬了用IE瀏覽器進行啓動,這裏就不能將IE瀏覽器的進程信息進行替換,此時就只能進行關鍵字的替換

 

十三、木馬突破主動防禦的手段

所謂主動防禦其實是針對傳統的“特徵碼”技術而言的。說到主動防禦就必須要提到HIPS(Host Intrusion Prevent System,即“主機入侵防禦系統”)。HIPS是一種監控軟件,他能監控到用戶電腦中哪些程序在調用文件,哪些程序對註冊表進行了修改,HIPS不僅能監控到實時情況,而且還會向用戶報告請求允許通過的程序,如果用戶阻止了,那麼該程序將無法被運行或者被更改。

HIPS並不能稱爲防火牆最多隻能叫做系統防火牆,他不能阻止網絡黑客的攻擊行爲,它有別於傳統意義上的網絡防火牆NIPS。二者雖然都是防火牆,但是在功能上還是有很大區別的,傳統的網絡防火牆只有在用戶使用網絡時能夠用上,通過特定的網絡協議來限定用戶訪問某一IP地址,或者也可以限制互聯網用戶訪問個人用戶和服務器終端,在不聯網的情況下是沒有什麼用處的。而系統防火牆是限制諸如a進程調用b進程,或者進制更改或者添加註冊表文件

主動防禦做法:

1、創立動態反毒系統

對病毒行爲規律分析、歸納、總結、並結合反病毒專家判定病毒的經驗,提煉成病毒識別規則知識庫。模擬專家發現新病毒的機理,通過對各種程序動作的自動監視,自動分析程序動作之間的邏輯關係,綜合應用病毒識別規則知識,實現自動判定新病毒,達到主動防禦的目的。

2、自動準確判定病毒

HIPS就像分佈自強操作系統的衆多探針,動態監視着程序調用接口(API)的動作,它能自動分析程序動作之間的邏輯關係,並判定程序行爲的合法性,從而是新自動診斷新病毒。HIPS有效克服了當前安全技術僅憑單一動作,就頻繁詢問是否修改註冊表或網絡的弊病,讓用戶不再爲難以自行判斷,誤判等操作而煩惱

3、程序行爲監控並舉

在全面監視程序運行的同時,HIPS會自主分析程序行爲,當發現新病毒後,它會自動阻止病毒行爲並終止病毒程序運行,自動清除病毒,並自動修復註冊表

4、自動實現多重防護

HIPS有效克服特徵值掃描技術滯後於病毒出現的缺陷,發現新病毒後它會自動提取病毒特徵值,並自動給恆心本地未知特徵庫,實現“捕獲、分析、升級”一體化,有利於對此後同一個病毒快速檢測,使用戶系統得到安全高效的多重防護

 

突破方法:

1、想辦法結束殺軟進程(可行性很低)

2、附加到正常應用程序身上來假裝自己是個正常程序

3、捆綁程序

十四、反調試躲過殺毒軟件

初學者編寫的程序往往不太穩定。但是熟悉了windows SEH原理後,在編寫相應的軟件,就不會在彈出警告框了。此外,SEH還被廣泛應用於反跟蹤那個以及加解密中,因此黑客利用它來進行免殺就是順理成章的事情了

SEH,全稱爲Structured Exception Handling,即結構化異常處理,是windows操作系統提供給程序設計者處理程序錯誤和異常的一種服務

本質上只不過是對Windows內在提供的結構化異常處理的包裝,不用這些高級語言編譯器所提供的包裝照樣可以利用系統提供的強大SEH處理功能。在編譯器的SEH層減少直接使用純操作系統的SEH所帶來的危害的同時,也將純操作系統的SEH從人們的面前隱藏了起來。但是程序遇到SEH異常時,異常會交給系統處理,所以利用SEH異常可以一定程度的防止程序被調試

SEH加花操作:

通過利用一段SEH代碼可以防止程序進行追蹤,並跳到相應的地址繼續執行。當殺毒軟件在分析程序文件的時候,程序中的SEH代碼就會阻止殺毒軟件的分析,這樣的程序也就躲過了殺毒軟件分析判斷,我們可以通過SEH代碼來進行加花操作,其實整個的加密過程還是非常簡單的,只不過使用SEH異常代碼替換掉以前的花指令代碼而已

十五、SYS文件的免殺技巧

隨着全新版殺毒軟件的推出,主動防禦一時成爲火熱的賣點。於是木馬程序的免殺已經由傳統的文件表面和內存免殺,上升到突破殺毒軟件的主動防禦。隨着很多自帶突破主動防禦功能木馬的推出,主動防禦好像已經不是什麼問題了,可是新的問題又擺在了黑客的面前,那就是在突破主動防禦時起到關鍵作用的SYS文件,他又是怎樣免殺的呢?

以我的看法,之前的技術結合在一起可以很大部分解決這個問題:
1、修改特徵碼

2、調整特徵碼

3、修改文件頭

4、加殼處理

 

 

--本文章只做學習交流使用,純粹交流技術

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章