自從病毒與殺毒軟件的誕生以來,他們之間的戰(zhàn)爭就從來沒有停止過……多套特征碼、自動脫殼、內(nèi)存殺毒、主動防御等等的出現(xiàn)為網(wǎng)絡(luò)安全做出了一次次的貢獻(xiàn),當(dāng)然黑客們也毫不遜色,也出現(xiàn)了修改特征碼、加雙層變態(tài)殼、去文件頭等新的免殺技術(shù)。 古人云“知己知彼,方能百戰(zhàn)不殆!” 今天,我們就以一個病毒防御工作者的角度來做我們的免殺工作。想不被殺,就要先知道是怎么殺的,還不太懂的朋友趕緊偷偷借機(jī)惡補(bǔ)吧。 1.殺毒原理 通常,一個病毒防御工作者拿到一個截獲或上報上來的病毒時,先是分析這個病毒文件執(zhí)行后的動作,所謂“動作”,就是指病毒文件執(zhí)行后會做哪些操作。例如會生成什么新文件、怎樣更改注冊表、怎樣注冊服務(wù)、打開什么端口等等。 搞明白這些后,下一步一般會研究這個病毒的文件結(jié)構(gòu),然后找出與眾不同的地方,將其定義為特征碼。而這個特征碼定義的高明與否,就要看他定義的位置是否刁鉆,例如他如果定義的是病毒文件更改注冊表鍵值那部分代碼的話,這顯然不會太難!因?yàn)橹灰《疚募逆I值,99%的情況下這個文件里一定存在被更改鍵值的字符串,所以找到這段字符串的位置就可以定義特征碼了。但是針對這種特征碼做免殺是非常容易的,只需找到相應(yīng)的位置,并更改字母的大小寫即可。而如果從文件頭找出一段特征碼就是非常不容易的事情了……除此之外,所定義的特征碼還有一個分支,即內(nèi)存特征碼。所謂內(nèi)存特征碼就是指木馬文件運(yùn)行后釋放到內(nèi)存時所存在的特征,它的原理大體與上面介紹的文件特征碼一樣。 當(dāng)特征碼定義出來之后,就會被提交到另外的一個部門,然后進(jìn)入病毒定義庫,當(dāng)用戶更新后,以后殺毒軟件在碰到符合要求的文件時就會將其毫不憂郁的殺掉!也就是說,殺毒軟件只認(rèn)特征碼,不認(rèn)文件。 由此可見,病毒防御工作者尋找特征碼的方式也不過如此,但這只是定義病毒文件特征碼的工作,別的例如修復(fù)被感染文件等技術(shù)步驟和本文無關(guān),在這也就不介紹了,有興趣的朋友可以自己研究一下。 2.免殺分類 免殺的方法有很多,無奈沒見哪為朋友綜合系統(tǒng)的介紹,也苦了小菜們求學(xué)無門,只好掏銀子找“師傅”,所以我就自告奮勇站出來一次,不足之處還請各位高手多多包涵…… 我個人總結(jié)的免殺方法總共分兩類,即主動免殺與被動免殺。 一、主動免殺 1. 修改字符特征:主動查找可能的特征碼,包括木馬文件修改注冊表、生成新文件的名稱與路徑、注入的進(jìn)程名等動作,也包括運(yùn)行過程中可能出現(xiàn)或一定會出現(xiàn)的字符等文件特征。然后找出這些字符,并將其修改。 2. 修改輸入表:查找此文件的輸入表函數(shù)名(API Name),并將其移位。 3. 打亂文件結(jié)構(gòu):利用跳轉(zhuǎn)(JMP),打亂文件原有結(jié)構(gòu)。 4. 修改入口點(diǎn):將文件的入口點(diǎn)加1。 5. 修改PE段:將PE段移動到空白位置 二、被動免殺 1. 修改特征碼:用一些工具找出特征碼并針對特征碼做免殺處理。 2. 用Vmprotect:使用Vmprotect加密區(qū)段。 3. 文件加殼:可以用一些比較生僻的殼對木馬文件進(jìn)行保護(hù)。 有的朋友看到這里有可能蒙了,PE、Vmprotect、入口點(diǎn)……這些都是什么意思???不要著急,下面我會一一介紹的,只要你看完這篇文章,就一定會成為免殺高手!怎么樣?Go! 3.實(shí)戰(zhàn)演習(xí) 1.)修改字符特征 好,下面我們依然以一個病毒防御工作者的角度來考慮我們每一步應(yīng)該做什么,然后在利用逆向思維分而治之。 現(xiàn)在假如我們拿到一個木馬樣本灰鴿子,首先當(dāng)然要分析它究竟有什么功能,怎樣運(yùn)行以及怎樣保護(hù)自己等。其實(shí)這一步要求的專業(yè)知識是很多的,但考慮到我們的讀者,我們暫且用一個比較簡單易行的方法——運(yùn)行木馬AND查看此程序的幫助文檔。 我們打開RegSnap,新建一個快照,打開RegSnap后,點(diǎn)擊[新建快照]按鈕(如圖1)。 在彈出的對話框中選擇[生成所有項(xiàng)目的快照](如圖2)。 然后保存快照,現(xiàn)在已經(jīng)將RegSnap配置好了,下面運(yùn)行我們的木馬程序(提醒:做免殺時,一定要記住養(yǎng)好隨時備分的好習(xí)慣,以防止修改錯誤或是實(shí)驗(yàn)運(yùn)行時破壞、刪除木馬)。 木馬運(yùn)行完畢后,我們在按照上面的方法重新做一個快照并保存,然后按快捷鍵F5,在彈出的“比較快照”對話框中選擇剛才保存的快照,在“第一個快照”中選擇我們剛才第一次保存的快照,而“第二個快照”選擇我們后保存的快照存檔,很快結(jié)果就出來了(如圖3)。 有的朋友對于使用RegSnap收集到的信息感到無力分析,抱怨收集到的東西太多,在這里我簡單的介紹一下,首先應(yīng)注意的是生成做對比的兩個快照之間的時間要盡可能短,另外要排除帶有OpenSaveMRU的注冊表鍵值,還要排除有關(guān)*.rsnp文件的創(chuàng)建讀寫等操作記錄。下面我們就將有用的信息提取出來,逐一分析。 文件列表于 C:\WINDOWS\*.* 新增文件 木馬.exe 注冊表報告 新增主鍵 HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache\C:\Documents and Settings\A1Pass-admin\桌面\huigezi\復(fù)件 Server02.exe 鍵值: 字符串: "復(fù)件 Server02" HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\LEGACY_*6728*9A6C*670D*52A1\0000\Class 鍵值: 字符串: "LegacyDriver" HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\LEGACY_*6728*9A6C*670D*52A1\0000\ClassGUID 鍵值: 字符串: "{8ECC055D-047F-11D1-A537-0000F8753ED1}" HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\LEGACY_*6728*9A6C*670D*52A1\0000\Control\ActiveService 鍵值: 字符串: "木馬服務(wù)" HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\木馬服務(wù)\Description 鍵值: 字符串: "灰鴿子服務(wù)端程序。遠(yuǎn)程監(jiān)控管理." …… 這里我只摘錄了部分關(guān)鍵性的木馬動作記錄,全部記錄請見光盤。通過文件列表我們可以知道木馬在WINDOW目錄下生成了一個新文件,而通過注冊表的監(jiān)控信息我們也知道了木馬是怎樣將自己注冊為系統(tǒng)服務(wù)并自動運(yùn)行的。 那么我們回到瑞星的研究分析室,看看那些大哥大姐們會怎么辦…… 瑞星大哥:“最近這灰鴿子太猖狂啦!我們是不是應(yīng)該多定義幾套特征碼?” 瑞星大姐:“恩,不錯!先在注冊表那定義一套特征碼在說吧。” A1Pass:“STOP!!”(只見畫面突然定格,A1Pass將播放器最小化。) 通過上面的對話,我們可以知道他們要將注冊表的某個字符定義為特征碼,從上面RegSnap分析出來的記錄來看,他們的選擇真的是太多了!那么他們究竟會用到哪些呢?其實(shí),就做為一個黑客來講,只要不影響服務(wù)端正常運(yùn)行,就應(yīng)該盡量多的改掉木馬的所有字符,當(dāng)然全部改變是不可能的,除非你自己編寫木馬。 有的朋友要問了,除了注冊表別的就不可以改了嗎?答案當(dāng)然是否定的,譬如生成新文件的名稱與路徑、注入的進(jìn)程名等動作,這些我們可以利用WINDOWS對字母大小寫不敏感的這一特點(diǎn)直接替換字母的大小寫,而對于運(yùn)行過程中可能出現(xiàn)或一定會出現(xiàn)的字符等我們可以直接將其替換成別的內(nèi)容。 下面我為大家演示一下怎樣更改注入進(jìn)程的名稱。 首先配置服務(wù)端,通過圖4我們可以看出來灰鴿子的啟動運(yùn)行是需要“IEXPLORE.EXE”這個進(jìn)程的,根據(jù)注冊表的推理,我們可以認(rèn)為其未加殼的服務(wù)端是應(yīng)該存在“IEXPLORE.EXE”這一字符串的。既然如此,我們就先請出我們的第一把武器“WinHex”! WinHex是一款極為出名16進(jìn)制編輯器。得到 ZDNetSoftwareLibrary 五星級最高評價,擁有強(qiáng)大的系統(tǒng)效用。在這里,我們只用它來編輯文件,其余不做過多討論。首先我們用WinHex打開我們的木馬文件“Server.exe”,打開后如圖5所示。 然后我們按[Ctrl]+[F]快捷鍵調(diào)出查找文本對話框,輸入IEXPLORE.EXE后點(diǎn)擊“是”(如圖6)。 結(jié)果如圖7所示。下面我們就對其進(jìn)行大小寫轉(zhuǎn)換,用鼠標(biāo)點(diǎn)擊要更改的字母(例如I),然后在按鍵盤上的i,即可完成更改,就象使用WINDOWS的記事本一樣。更改完畢后,按[Ctrl]+[S]快捷鍵保存即可。 就這么簡單?對!就這么簡單!其他的例如注冊表、生成新文件的名稱與路徑等等都可以利用此方法更改。 但是不幸的是,經(jīng)過這樣改后,還不足以對付例如金山、江民等品牌殺毒軟件,要想對付這些殺毒軟件的查殺,我們還需要對我們的木馬進(jìn)行進(jìn)一步處理。 下面,我們開始學(xué)習(xí)輸入表函數(shù)(APIName)免殺! 2.)修改輸入表 不知有的朋友是否知道,PE文件的正常運(yùn)行是離不開其內(nèi)部輸入表函數(shù)的,而不同的程序,其內(nèi)部輸入表函數(shù)的名稱與在文件中的位置是不一樣的,所以輸入表函數(shù)也成了病毒防御工作者制作特征碼緊盯的地方之一。在我查出來的關(guān)于灰鴿子的特征碼來看,“瑞星大哥”已經(jīng)將其的一處輸入表函數(shù)作為特征碼了。所以掌握輸入表函數(shù)免殺技巧對于新入門的朋友來說勢在必行! [PE文件小知識:PE文件是WINDOWS系統(tǒng)中特有的一種文件結(jié)構(gòu),它包括PE文件頭、輸入表與相關(guān)資源文件等等] 經(jīng)過我的測試,直接單獨(dú)修改文件內(nèi)部的輸入表函數(shù)會導(dǎo)致程序運(yùn)行不正常甚至崩潰!那就沒有辦法了嗎?我可沒那么容易認(rèn)輸!經(jīng)過一翻苦戰(zhàn),終于讓我在LordPE中找到了解決辦法,同時FoBnN的文章也給了我非常大的啟發(fā)…… 我們先打開LordPE,點(diǎn)擊[PE編輯器]按鈕,在彈出的對話框中選中木馬文件,打開后點(diǎn)擊[目錄](如圖8)。 在點(diǎn)擊導(dǎo)入表后面的[…](如圖9)。 在彈出的對話框中我們選擇wininet.dll下的InternetOpenUrlA(如圖10),有的朋友要問了,為什么非選擇InternetOpenUrlA這個輸入表函數(shù)呢?呵呵!那是因?yàn)檫@個輸入表里有特征碼哦,關(guān)于怎樣確定特征碼,我在后面會介紹,大家先別著急。 好的,關(guān)于LordPE就先停在這,下面我們就用WinHex來查找InternetOpenUrlA這個輸入表函數(shù)的所在位置,并將其用0填充(操作方法:單擊WinHex右面的16進(jìn)制信息,輸入0即可)(如圖11、12)。 然后將其寫到空白區(qū)域(既顯示000000的區(qū)域),一定要從頭開始寫入,這樣在以后計(jì)算地址時不容易出錯,除此之外也要注意輸入表函數(shù)的大小寫不要搞錯(如圖13)。 保存后我們在回到LordPE那里,在需要更改的InternetOpenUrlA輸入表函數(shù)上單擊右鍵,在彈出的菜單里選擇“編輯”,將Thunk里的信息改成000B9D5E(如圖14)即可。 有的朋友要問了,剛才我們不是把那個輸入表函數(shù)放到000B9D60那里了嗎?到這怎么變成000B9D5E了?其實(shí)原理很簡單,因?yàn)槊總€輸入表函數(shù)前面都是有一個空格的,我們雖不用真正把那個空格加進(jìn)去,但填寫它的地址時一定要空出來,否則就會出錯!而將000B9D60減去一個空格所占的位置,其地址正好為000B9D5E,還不十分明白的朋友在仔細(xì)看看圖13,下面我們在回到LordPE,看看我們改過的輸入表函數(shù)變成什么樣了(如圖15)? 呵呵!那我們該怎么辦呢?其實(shí)簡單的很,只要在重新改一下輸入表函數(shù)的名稱就可以了(如圖16)。 有的時候因?yàn)槲覀兯顚懙牡刂窞楸容^靠后的,例如我們現(xiàn)在改的這個000B9D5E,后面僅能容納兩個字節(jié),所以更改輸入表函數(shù)時只能鍵入兩個字,對于這種情況我們可以先把Thunk里的信息改成如000B9D60這樣的起始地址,改輸入表函數(shù)名更改完畢后在將000B9D60改回原來的值(既000B9D5E),保存后即可成功,我們試一下看看(如圖17)。 經(jīng)測驗(yàn)鴿子的各項(xiàng)功能均正常!在用瑞星查一下試試(如圖18),結(jié)果當(dāng)然不言而喻…… 3.)修改特征碼 雖然到這我們免殺已經(jīng)成功,但是為了學(xué)到更多的技術(shù),為了讓我們免殺的鴿子存活的更久,下面我在為大家介紹一下特征碼的查找與修改技巧。 特征碼是殺毒軟件的心臟,但同樣也是我們的心臟!就看誰先找到對方地心臟,并能發(fā)出致命一擊,誰就是勝利者! 一提到查找特征碼,就不得不說說MyCCL與CCL,這兩個軟件的名字相信留心過免殺技術(shù)的朋友不會陌生,但由于軟件操作的傻瓜化,很多時候?qū)τ贑CL的介紹只是一帶而過,這可苦了入門的朋友! 這一小節(jié)我就先介紹一下MyCCL的用法…… 我們先來認(rèn)識一下MyCCL(如圖19),根據(jù)這張圖我們下面就來大體介紹一下MyCCL的應(yīng)用方法。首先點(diǎn)擊第1處選擇文件,然后在第2處輸入分塊個數(shù),分塊個數(shù)越多,定位越精確,然而生成的速度同時也就越慢,生成的文件總體積也就越大,就象灰鴿子這么大的服務(wù)端,如果分塊數(shù)為300的話,那么它生成文件的總體積將超過230M!所以在這里不建議填寫太大的數(shù)字,一般象灰鴿子這樣的服務(wù)端分塊數(shù)填400個就足夠了。生成完畢后會彈出個對話框提醒你去相應(yīng)目錄殺毒,圖中所示為“E:\文章\極度免殺\鴿子\OUTPUT”文件夾,我們到那個文件夾下開始?xì)⒍荆榈讲《揪妥寶⒍拒浖⑵鋸氐讋h除,注意,這一點(diǎn)很重要!處理完畢后點(diǎn)擊第3處的二次處理,在點(diǎn)擊[生成]上面的[特征區(qū)間]按鈕即可出現(xiàn)右面的對話框。 下面我們在“區(qū)間設(shè)定”里右鍵單擊特征碼區(qū)間,在彈出的菜單中選擇“復(fù)合精確定位此處特征”(如圖20),然后重復(fù)上面的操作,直到你認(rèn)為[單位長度]已經(jīng)小到很方便更改的時候,特征碼的定位就算結(jié)束了。 好了,一口氣說了這么多,不知道剛?cè)腴T的朋友是否懂得一些MyCCL的用法了沒有…… 但是上面我們定位的是文件特征碼,還有內(nèi)存特征碼沒有定義,這里我們要用到CCL的內(nèi)存特征碼定位功能,打開CCL后,我們依次選擇[文件]→[特征碼驗(yàn)測]→[內(nèi)存特征碼](如圖21)。 在彈出的對話框中選擇我們要進(jìn)行免殺操作的木馬,然后會進(jìn)入“定位范圍選擇窗口”(如圖22)。 由圖中可知,第一個CODE段的偏移量為00000400,也就是說我們可以用00000400做為起始位置,那么我么就在用戶輸入?yún)^(qū)的“起始位置”處填寫00000400,下面的那個驗(yàn)測大小怎么填寫呢?看到圖22中畫線的那個“當(dāng)前文件大小”了嗎?我們可以用WINDOWS系統(tǒng)自帶的計(jì)算器進(jìn)行計(jì)算,把計(jì)算器的“查看”菜單設(shè)置為科學(xué)型、十六進(jìn)制、四字(如圖23)。 然后用當(dāng)前文件大小的值減去起始值00000400,得到的結(jié)果為000B9A00,那么我們就在“驗(yàn)測大小”后填上000B9A00,然后點(diǎn)擊“填加區(qū)段”按鈕(如圖24)。 最后點(diǎn)擊確定,在新彈出的對話框中點(diǎn)擊運(yùn)行,不過需要注意的是,在進(jìn)行此步操作時一定要打開殺毒軟件的所有功能。下面你要做的就是等待…… 然而光找特征碼是不夠的,我們還得學(xué)會怎樣更改,而關(guān)于特征碼地更改是非常有學(xué)問的!這里為了方便廣大讀者能學(xué)以致用,在此我只介紹部分理論知識,著重介紹實(shí)踐操作,但是我想請大家注意,免殺的方法象你做完免殺的木馬一樣,都有生存時間,而過了這個時間,這種免殺方法就變的不在實(shí)用,或者免殺效果大打折扣!所以要想真正成為免殺高手,還的打牢基本功,不斷創(chuàng)造出新的免殺方法,因?yàn)槲覀兪窃谂c殺毒軟件廠商的專業(yè)技術(shù)人員“斗法”啊! 關(guān)于需要注意的問題就先講的這,下面我?guī)Т蠹蚁葋砹私庖幌履壳案奶卣鞔a的辦法。 1. 大小寫替換(只適用于文件免殺) 適 用 于:出現(xiàn)可識別的英文字母或詞組,并且確定其不是相關(guān)函數(shù)(如輸入表函數(shù))。 操作方法:如咱們“實(shí)戰(zhàn)演習(xí)”的第一節(jié)講的一樣,只須將大小寫替換一下就可以了,例如特征碼中出現(xiàn)了A,你只要將其替換為a即可。 原 理:利用WINDOWS系統(tǒng)對大小寫不敏感,而殺毒軟件卻對大小寫非常敏感這一特性達(dá)到免殺目的。 2. 用00填充 適 用 于:幾乎任何情況,但成功率不是非常高。 操作方法:例如我們找到了一處特征碼0009EE7F_00000005,那么根據(jù)這段特征碼信息我們可以知道它的位置在0009EE7F,大小為5個字節(jié),也就是0009EE7F-0009EE83這一段內(nèi)容(如圖25)。 一直跟著文章實(shí)踐操作的朋友肯定有疑問,你是怎么找到那個地址的呢?而我怎么找不到呢?那是因?yàn)閃inHex的默認(rèn)偏移量為decimal模式,我們單擊Offset欄將其改為16進(jìn)制模式即可(如圖26)。 然后我們有選擇的一處處地用00填充(如圖27)。 記住要多試幾次,80%的情況下你都能找到一處既能免殺又不影響程序正常運(yùn)行的區(qū)域。對于定義出的內(nèi)存特征碼,只要將其內(nèi)存地址用一個叫做《便宜量轉(zhuǎn)換器》的小程序轉(zhuǎn)換成16進(jìn)制偏移量,然后在進(jìn)行相應(yīng)操作即可。 原 理:由于PE文件的特殊格式以及程序編譯語言等問題,使得生成目標(biāo)代碼的效率并不高,難免出現(xiàn)一些“垃圾信息”,而這些信息存在與否對與程序是否能正常運(yùn)行并不起決定性的作用,而當(dāng)木馬的這部分“垃圾信息”被定義為特征碼時,我們完全可以將其刪除,而刪除的方法就是用無任何意義的00將其替換。 3. 跳到空白區(qū)域 適 用 于:幾乎任何情況,成功率比較高。 操作方法:還是以特征碼0009EE7F_00000005為例子,假如我們使用00填充的方法失敗了那么不要多想,接下來馬上試試OllyDbg,關(guān)于OllyDbg我就不多介紹了,它是非常棒而且非常專業(yè)的一個動態(tài)反匯編/調(diào)試工具,這里我們只用它來幫助我們進(jìn)行免殺作業(yè),首先應(yīng)該做的就是將我們的16進(jìn)制偏移量0009EE7F轉(zhuǎn)換為內(nèi)存地址,因?yàn)镺llyDbg的工作原理是先將程序釋放到內(nèi)存空間里,然后才能進(jìn)行相關(guān)作業(yè)…這里要用到的是一個叫做《便宜量轉(zhuǎn)換器》的小程序,我們用其轉(zhuǎn)換完畢后得到的內(nèi)存地址為0049FA7F(如圖28)。 下面我們用OllyDbg打開我們的木馬服務(wù)端,首先找到一處空白區(qū),并域記下這的地址004A24A5,然后找到我們剛轉(zhuǎn)換過來的地址0049FA7F,先將以0049FA7F開始以下的這三行數(shù)據(jù)選定,然后單擊右鍵選則[復(fù)制]→[到接剪貼板](如圖29)。 將其復(fù)制到本文文檔里備用,然后在將這三行代碼一一NOP掉(如圖30)。 最后右鍵點(diǎn)擊0049FA7F,在彈出的對話框中選擇匯編,并寫入“jmp 004A24A5”這條匯編指令(如圖31)。 記住,在點(diǎn)擊[匯編]按鈕之前一定先把“使用 NOP 填充”前面的勾去掉。然后我們記下匯編后0049FA7F的下面那個地址0049FA84(仔細(xì)觀察圖31)。好,下面我們回到004A24A5這處剛才找到的空白地址(如圖32)。 然后用剛才匯編的方法把在本文文檔里備用的信息一句句地匯編進(jìn)去,然后在將最后一句代碼的下一行004A24AA處加入“jmp 0049FA84”這行代碼(如圖33)。 然后單擊右鍵→[復(fù)制到可執(zhí)行文件]→[所有修改](如圖34)。 在彈出的對話框中選擇“全部復(fù)制”然后保存即可。而對于內(nèi)存免殺就省去了內(nèi)存地址轉(zhuǎn)換這一步了。 原 理:大家先看圖35,由圖中可知,正象此方法的名字“跳到空白區(qū)域”一樣,這種方法的原理就是將原本含有特征碼的信息轉(zhuǎn)移到空白區(qū)域,并把原先位置的信息全部NOP掉,并在那里加一個跳轉(zhuǎn)指令,讓其跳到004A24A5處,也就是我們找到的空白區(qū)域,并把原來在0049FA84的信息移到這里,加完信息后在加一條指令讓其在跳回去,以使程序連貫起來。 4. 上下互換 適 用 于:幾乎任何情況,成功率比較高。 操作方法:先用OllyDbg載入木馬程序,假定其特征碼為0009EE7F_00000005,我們還是先用《偏移量轉(zhuǎn)換器》將其轉(zhuǎn)換為內(nèi)存地址,上面我們已經(jīng)知道0009EE7F對應(yīng)的內(nèi)存地址為0049FA7F,然后在OllyDbg中找到相應(yīng)位置,利用上面“跳到空白區(qū)域”里介紹的修改方法將0049FA7F上下兩句代碼調(diào)換位置即可。而對于內(nèi)存免殺就省去了內(nèi)存地址轉(zhuǎn)換這一步了。 原 理:殺毒軟件的特征碼定位是嚴(yán)格按照相關(guān)偏移量于內(nèi)存地址進(jìn)行的,而其實(shí)我們的應(yīng)用程序中的機(jī)器碼執(zhí)行順序的先后在一般情況下是沒有死規(guī)定的,所以我們只需將其上下互換,殺毒軟件自然就不認(rèn)識了。 5.ADD與SUB 互換 適 用 于:在內(nèi)存特征碼中出現(xiàn)ADD或 SUB指令的,成功率比較高。 操作方法:用OllyDbg載入木馬程序,假定其特征碼所對應(yīng)的地址中有ADD或SUB指令,例如00018A88:XXXXX 00000088 ADD ECX 10000000 我們可以將ADD ECX 10000000這段機(jī)器碼改為SUB ECX F0000000, 更改完畢后保存為EXE文件即可。 原 理:我們都知道1+1=2,我們也知道1-(-1)=2,上面就是利用了這個原理,其中ADD指令的就是加意思,而SUB則是減的意思。雖然被我們互換了一下,但是最終結(jié)果還是一樣的,可是換完之后殺毒軟件就不認(rèn)識了。 到這里,關(guān)于特征碼的查找與修改就講完了,但是除此之外呢?答案是還有許多!!下面我們就一起看看其他免殺方法。 4.)其他免殺方法 改文件頭: 這里所說的改文件頭包括加頭去頭,文件加花。關(guān)于加頭去頭,我們還是用OllyDbg。用OllyDbg載入后,OllyDbg會自動停在入口點(diǎn)(如圖36)。 我們將頭三行機(jī)器碼復(fù)制保存起來,然后找到空白區(qū)域,用匯編的方法一一將其寫入(如圖37)。 然后在后面寫入一條JMP指令,讓其跳到初始入口點(diǎn)的第四行,相信一直仔細(xì)看本文的朋友一定明白其原理,如果忘了的話可以看上面修改特征碼的第三種方法,原理與這差不多,修改完畢后如下所示: 004A2A73 0000 add byte ptr ds:[eax],al 004A2A75 0000 add byte ptr ds:[eax],al 004A2A77 55 push ebp 004A2A78 8BEC mov ebp,esp 004A2A7A B9 04000000 mov ecx,4 004A2A7F ^ E9 CCF3FFFF jmp Server.004A1E50 004A2A84 0000 add byte ptr ds:[eax],al 004A2A86 0000 add byte ptr ds:[eax],al 004A2A88 0000 add byte ptr ds:[eax],al 上面的add byte ptr ds:[eax],al就是所謂的空白區(qū)域,我們看到改完后的頭文件位于004A2A77,所以我們還要用PEditor改一下入口點(diǎn),打開PEditor后載入文件,將入口點(diǎn)處的地址改為我們的新文件頭地址004A2A77(如圖38),保存后即可。 入口點(diǎn)加1: 打開PEditor后載入文件,將原來的入口點(diǎn)+1即可,例如我們的入口點(diǎn)為004A2A77,加1后應(yīng)該是004A2A78(如圖39),然后點(diǎn)擊“應(yīng)用更改”即可完成更改。 用這種簡便的免殺方法即可以輕松的對付大部分殺毒軟件。 用Vmportect加密: Vmportect是新一代的軟件保護(hù)程序,利用虛擬機(jī)保護(hù)代碼,可以對指定的部分區(qū)段進(jìn)行加密,能讓被保護(hù)的程序復(fù)雜化,最開始他被用于PcShare里的SYS文件免殺,效果值得稱道!其實(shí)對于普通文件他照樣發(fā)揮的比較出色!下面我們就用他來加密我們的那個存在特征碼以0049FA7F開始的區(qū)段。打開Vmportect后載入程序,在“轉(zhuǎn)儲”選項(xiàng)卡下的任意地方單擊由鍵,在彈出的菜單中選擇“前往地址”(如圖40)。 然后在彈出的對話框中填入0049FA7F,點(diǎn)擊“是”按鈕即可跳到相應(yīng)位置,然后點(diǎn)擊“添加地址”按鈕(如圖41)。 并選則是即可,最后點(diǎn)擊“編輯”按鈕即可對以0049FA7F開頭的區(qū)段進(jìn)行加密(如圖42)。 移動PE段的位置: 關(guān)于這種方法,可是絕學(xué)!今天借此機(jī)會貢獻(xiàn)給各位朋友,希望此方法能在你免殺時助你一臂之力!那么修改PE段究竟能起到什么作用呢?首先當(dāng)然可以達(dá)到長期免殺的目的,其次可以保護(hù)我們的免殺文件,其他人無法學(xué)走我們的免殺方法(A1Pass:要想真正達(dá)到這個目的,除此之外你還不能讓別人看到這篇文章,所以這期的X檔案趕緊全包了吧!呵呵?。?。為什么呢?因?yàn)橐恍┓磪R編工具無法載入經(jīng)過修改PE文件頭的程序。 我們先來看看PE段,怎么看?先用WinHex載入我們的木馬(如圖43)。 看到圖中PE那兩個字了嗎?這兩個字的P所在位置就是PE段的入口點(diǎn),我這里是00000100。我們在仔細(xì)看看圖43,看看PE下一行的第一個16進(jìn)制是不是E0?好,下面我們用WINDOWS系統(tǒng)自帶的計(jì)算器計(jì)算一下,得到16進(jìn)制的E0就是十進(jìn)制的224。這是什么意思呢?它代表的就是PE段的大小,在WinHex中一行能顯示16個字符,224個字符正好是14行,我們將這14行內(nèi)容復(fù)制保存起來,并記住PE段的末尾地址,我這里是000001EF,最后將這個PE段用0填充(如圖44)。 最后將我們事先保存的PE段上移,但注意不要超過“This program must be run under Win32”這段內(nèi)容。由于PE段的上移,其體積必然也就隨之增大,而從我們現(xiàn)在PE段所處的00000080到000001EF,總共是368個字節(jié),換成16進(jìn)制為170,全部更改完畢后如圖45所示。 針對瑞星: 先用OllyDbg載入文件,只要將其第一條機(jī)器碼push ebp改為pop ebp即可躲過瑞星的內(nèi)存殺毒。 加殼壓縮: 加殼是菜鳥的專利,雖然操作簡便,但是免殺效果與“報質(zhì)期”都不盡人意,但是做完免殺后在加個壓縮殼還是很有必要的。 加殼免殺的第一步就是要找到好殼,大家沒事可以到看雪論壇逛逛,他那里經(jīng)常有好殼出現(xiàn)。但關(guān)于加殼的一些操作步驟我在這里就不費(fèi)筆墨了,大家下去自己一看就會,其實(shí)就是個使用軟件的過程。 好了,到這里,我們對木馬的免殺就做完了,總共用了七大類共計(jì)14種方法!恐怕一時理解起來比較困難。下面我就在用“蘇式教育”的方法為各位讀者規(guī)劃一下本文所講的知識,方便各位讀者以后應(yīng)用與查找。 免殺的操作順序: 1. 主動查找可能存在的特征碼 2. 用CCL等查找特征碼,并將其更改 3. 盡可能多的更改輸入表函數(shù) 4. 更改文件頭 5. Vmportect區(qū)段加密 6. 移動PE段的位置 7. 加殼壓縮 免殺分析: 一、主動查找可能的特征碼 操作時注意:有關(guān)注冊表、文件路徑的信息最好只用大小寫替換的方法,不要改成其他內(nèi)容,那樣容易出錯。 優(yōu) 點(diǎn):可以防范未來將要出現(xiàn)的特征碼,并且同時可以體驗(yàn)DIY的樂趣,順便打造自己的“專用木馬”。 不 足:無法進(jìn)行有效的免殺,效果不明顯。 成 功 率:幾乎100%,只要不改錯地方,一般更改后的程序完全可以正常運(yùn)行。 二、盡量多的更改輸入表函數(shù) 操作時注意:將輸入表函數(shù)移動到新位置時,函數(shù)名的第一個字母最好在本行開頭,另外注意地址的填寫規(guī)律,不要弄錯。 優(yōu) 點(diǎn):可以防范未來將要出現(xiàn)的特征碼,給特征碼的定位帶來干擾。 不 足:無法進(jìn)行有效的免殺,效果不明顯。 成 功 率:只要操作上沒問題,基本能保證90%以上! 三、用例如CCL等工具查找特征碼并將特征碼更改 操作時注意:此步驟最需要的就是耐心與細(xì)心!不能丟三落四,要及時做好備份,以防不測。 優(yōu) 點(diǎn):針對性非常強(qiáng),免殺中最有效的方法之一。 不 足:只能針對一個殺毒軟件進(jìn)行免殺,無法針對多個殺毒軟件進(jìn)行作業(yè),免殺文件的存活期短。另外,此方法也非常耗費(fèi)時間。 成 功 率:理論上100%,主要看你的經(jīng)驗(yàn)與編程、匯編的底子。不過其實(shí)只要有足夠的經(jīng)驗(yàn)與方法,成功率就異??捎^了! 四、移動PE短位置 操作時注意:16近制的轉(zhuǎn)換一定要細(xì)心,并且時刻不要忘了開頭與結(jié)尾的位置。 優(yōu) 點(diǎn):可延長免殺期,時對付特征碼在PE文件頭部的必殺技!同時可以保護(hù)我們的免殺文件,其他人無法學(xué)走我們的免殺方法。 不 足:除加殼外,就無法在對木馬文件做進(jìn)一步加工了。 成 功 率:大約75%左右,不確定的因素太多…… 五、更改文件頭 操作時注意:刪除部分信息時文件結(jié)構(gòu)的變化。 優(yōu) 點(diǎn):比較節(jié)省時間,免殺效果也很明顯,是免殺中的有效方法之一。 不 足:免殺時間不長。 成 功 率:大約80%左右 |