當前位置:編程學習大全網 - 源碼下載 - 關於對木馬進行免殺處理

關於對木馬進行免殺處理

OD下載地:/Search.asp?Field=SoftName&ClassID=&keyword=Ollydbg&Submit=+%CB%D1%CB%F7+

peid下載地:/Search.asp?Field=SoftName&ClassID=&keyword=peid&Submit=+%CB%D1%CB%F7+

ccl下載地:/Soft/search.asp

沒聽過cli,什麽東西啊我只用過ccl

首先來簡單了解壹下殺毒軟件查殺病毒的原理,當前殺毒軟件對病毒的查殺主要有特征代碼法和行為監測法。其中前壹個比較方法古老,又分為文件查殺和內存查殺,殺毒軟件公司拿到病毒的樣本以後,定義壹段病毒特征碼到病毒庫中,然後與掃描的文件比對,如果壹致則認為是病毒,內存查殺則是載入內存後再比對,第二個比較新,它利用的原理是某些特定的病毒會有某些特定的行為,來監測病毒。

免殺常用的工具:

Ollydbg 調試器簡稱OD,動態追蹤工具 peid 查殼工具 PEditor PE文件頭編輯工具

CCL,伯樂,MYCCL 特征碼定位器 oc 地址轉換器 reloc 修改EP段地址工具 zeroadd 加區工具 Uedit32 十六進制編輯器

免殺方法

壹.文件免殺

1.加花

2.修改文件特征碼

3.加殼

4.修改加殼後的文件

二.內存免殺

修改特征碼

三.行為免殺

加花

加花是文件免殺的常用手段,加花原理就是通過添加花指令(壹些垃圾指令,類似加1減1之類廢話)讓殺毒軟件檢測不到特征碼。加花可以分為加區加花和去頭加花。壹般加花工具使用加區加花,當然也是可以手工加的,就是先用zeroadd添加壹個區段,然後在新加區段裏寫入花指令,然後跳轉到原入口;去頭加花,是先NOP(匯編裏的空操作)掉程序的入口幾行,然後找到下方0000區,寫入NOP掉的代碼和壹些花指令,再通過JMP(匯編裏的無條件跳轉)跳到原入口。

舉個例子說明壹下去頭加花:

圖1

這是PcShare服務端入口處的壹段代碼,原入口地址是00403D7D,因為是演示我就用兩句最簡單的垃圾代碼,花指令可以自己去找或者自己寫

push eax;eax寄存器壓入堆棧

pop eax;eax寄存器彈出堆棧

圖2

先將入口兩句用NOP填充,然後找到壹段0000區記下新入口地址0040443C

圖3

寫入剛剛NOP掉的入口兩句和花指令還有跳轉到原入口的指令

圖4

把修改好的代碼保存,用PEditor把入口地址修改為新入口0040443C就完成了,代碼執行時從新入口開始,先執行花指令然後跳轉到原入口執行真正程序,很簡單吧?其實花指令可以加在頭後同樣也可以加在頭後,也就是可以先執行花指令,然後再是入口,免殺效果是不壹樣的!大家可以試壹下。加區加花很相似,主要是怕程序的0000區不足,先用工具新加壹個區,在新區裏寫入花指令,其他的和去頭加花壹樣,就不演示了。

/act/jcrm/mmly/20662.shtml

細的去這個地方去看圖

加花以後壹些殺毒軟件就認不出了,但有些比較強悍的殺毒,比如司機大叔(卡巴斯基)可能還是能查出來,這時就要定位特征碼然後修改了,要修改首先必須知道特征碼在哪裏,所以需要先定位特征碼,這是個難點,特別是復合特征碼的定位。

特征碼定位

特征碼定位主要有兩種方法:第壹 直接替換法;第二 二叉數法;

直接替換法是最早開始出現的壹種特征碼定位方法,按壹定的字節數逐個替換原代碼並保存,比如木馬總***100字節,可以先把0-10個字節用0替換,保存,然後用殺毒軟件掃描,不被查殺說明特征碼已經被覆蓋掉了,如果還被查殺則替換10-20字節,再保存,掃描……直到找出特征碼。替換法的優點是容易理解,速度快(對文件特征碼而言),特征碼定位工具伯樂以及CCL的手動方式就是利用的替換法原理,文件特征碼定位經常使用的就是這種方法。但是對於內存特征碼的定位這種方法就不太實用了,每次替換以後都要載入內存再掃描,如果木馬較大,替換生成的文件會非常多,每個都要載入內存花費太多時間,除此之外它還有壹個非常大的局限性,就是只能確定只有壹處特征碼的情況(某種特定情況下的多特征碼也是適用的,下面的第3種情況將有講述),殺毒軟件還有別的定位特征碼的機制,比如有的殺毒的定義了a,b兩處特征碼(三處或者更多原理是壹樣的,為了講解方便,以下均以兩處為例),只要a,b有壹個存在便報毒,只有加大替換範圍直到兩處同時被替換才不報毒,如果兩處距離比較遠,定義出的範圍將非常粗糙,很明顯直接替換法將不再合適,這時第二種方法就有用武之地了。

二叉數法使用的原理是壹半壹半定位,CCL的自動方式就是運用的這個原理。將待檢測段壹分為二,分別替換並生成兩個文件A和B,其中A是原文件後半部分被0替換後生成的,B是前半部分被0替換的,殺毒開始查殺生成文件(如果是內存特征碼定位則先載入內存再掃描內存),有4種情況

(1)A存在,B被刪:這種情況說明A文件中特征碼已經被替換掉,因此將A的被替換部分壹分為二,起始偏移為A的偏移,再進行檢測;

(2)A被刪,B存在:這種情況說明B文件中特征碼已經被替換掉,因此將B的被替換部分壹分為二,起始偏移為B的偏移,再進行檢測;

(3)A存在,B存在:這種情況說明沒法定位A和B中有沒有特征碼,因此分別對A和B再壹分為二進行檢測;

(4)A被刪,B被刪:這種情況說明兩個區段都存在特征碼,因此分別對A和B再壹分為二進行檢測。

對A再分時會將原來的B區段填充為0,相當於去除B區段的影響,只考慮A;同理對B再分時會將原來的A區段內容填0,相當於去除A區段的影響,只考慮B。

第(1)(2)對應的是只有壹處特征碼的情況,比較容易理解;

第(3)對應的是定義了a,b兩處特征碼的情況,但是和前面提到的那種不同,殺毒軟件為避免誤判,定義了a,b兩處特征碼,要ab同時存在時才報毒,假設a,b分別存在於A,B中,a,b不同時存在,殺毒對A,B均不報警,接下來該如何判斷呢?舉個例子說明壹下

木馬原來是…a……b…,第壹次替換以後A:…a…000000,B:000000…b…,現在ab不同時存在,A,B都不被殺,則分別對A,B再次壹分為二,…a……b000,…a…000…,000……b…,…a000…b…,再次掃描就可以找到兩處特征碼的位置,如果還是不行,再繼續分……直到全部找到;其實這種類型的多特征碼直接替換也是可以定位的,甚至效果更好,按壹定位數替換,然後掃描,只要替換了壹個特征碼就不再報毒,所以不報毒的便是特征碼被覆蓋的,不管有幾處都可以定位出,而且修改時也只要修改任意壹處就可以了。

第(4)種對應的情況也是殺毒定義了多處特征碼,就是上面提到的那種情況,只要有壹處符合就認定是病毒。還是以a,b兩處特征碼為例,第壹次替換後的結果同(3),兩部分分開考慮,互不影響,相當於分解成兩個單個特征碼的情況,第二次替換後變成000000…b000,000000…000…,000…000000,…a000000000,依此類推,直到精確定位出所有特征碼,如果有N處特征碼就相當於分解成N個單特征碼來定位,現在N壹般小於等於3,這種情況定位出的所有特征碼必須全部修改了才能免殺。

二叉數法是個很不錯的思路,可以解決大部分的問題,但是不是無懈可擊呢?回答是否定的!可惡的殺毒軟件還有壹個殺手鐧,就是復合特征碼,給我們定位特征碼帶來了很大的麻煩。復合特征碼的定位機制是,先定義出N個特征碼,只要裏面某些同時出現便認為是病毒。舉個簡單例子說明壹下:木馬原來是…a1…b1…c1…a2…b2…c2…(a1,a2壹樣,加標號只是為了後面描述方便),只要abc同時出現就認為是病毒,這該如何定位呢?原理不是很難,也是利用替換再查殺的方法,先從後往前用0替換,替換精度假設為每次替換量增加1000字節,開始壹直顯示是病毒,直到替換到地址13140040(為敘述方便隨便說的壹個地址)時替換的字節達到15000個,即…a1…b1…00000000,兩個c都被替換掉了,此時顯示不是病毒,由此可知,特征碼c1就在13140040後面1000字節內,減小替換字節數比如改為替換14900字節,即精度改為每次替換減小100字節,還是無毒則減為替換14800字節,不斷重復……直到精確定位出c1的位置;如果改為從前往後替換,則可以定位出a2的位置;其他特征碼的定位可以利用已經定位到的c1,a2,把其中壹個用0替換了比如c1,從後往前就可以定位出c2,直到定位出所有特征碼,其實原理並不復雜,但是要真正手動操作起來卻是非常麻煩的,我們可以利用MYCCL,它用的原理與之類似,具體操作可以看MYCCL的操作幫助。還有壹種方法更科學,原理是壹樣,但是替換的字節數不是等量增加的,而是以2的n-1次方增加的,第壹次替換1字節,第二次2字節,第三次4字節……減小時也按照這種規律,這種替換方法有點類似於二叉數法,可以更快定位出特征碼的位置,我想這也是MYCCL在復合特征碼定位方面應該改進的地方吧。

復合特征碼雖好,大家也不用害怕,認為所有殺毒都來個復合特征碼我們就要累死了,定義復合特征碼需要單個特征碼幾倍的病毒庫,不方便用戶的升級,所以除了特別流行的病毒,定義復合特征碼的也不是很多。

定位特征碼有些經驗可以告訴大家,文件特征碼的定位壹般用直接替換法,可以借用CCL的手動定位;內存特征碼定位,壹般用二叉數法,可以用CCL自動定位。對於EXE文件如果文件較小,可以兩種方法結合,先用直接替換法生成,可以用伯樂這個工具(為什麽不用CCL呢,因為伯樂生成的是EXE文件可以看出圖標的模樣),找到還能正常運行的,那些圖標都變了的說明PE頭已經損壞了,就不要試了,然後載入內存,再掃描內存,如果既能正常運行又不被殺,恭喜妳!成功了!定位出了大體範圍,再用CCL自動定位,很快就可以完成。如果文件較大,用伯樂生成的文件太多,也不方便,還是用CCL定位,對於DLL文件也只能老老實實用CCL定位了。

特征碼修改

特征碼修改可能需要壹點匯編的知識,光盤裏有常用的匯編語法介紹,修改主要有直接修改法和跳轉修改法。

直接修改法利用的是等效指令替換,比如

add eax,0c等效於sub eax,-0c

或者指令順序的改變不影響執行的效果,比如

add eax,0c;eax寄存器加上0c再賦給eax

add ebx,05;ebx寄存器加上05再賦給ebx

等效於

add ebx,05;ebx寄存器加上05再賦給ebx

add eax,0c;eax寄存器加上0c再賦給eax

還有壹種是如果特征碼是ASCII碼,可以直接修改大小寫,小寫字母換成大寫,大寫的換成小寫。

圖5

SOFTWARE\Borland可以改成sofTwAre\BOrlaND

大家可以學習壹下最基礎的匯編語法,並不難,對特征碼修改妳將會有更深的理解。

跳轉修改法比較簡單,主要原理就是把特征碼的那段NOP掉,然後把NOP掉的語句寫入空白的0000區,再通過JMP跳轉連接起來,讓殺毒找不到特征碼,從而達到免殺的目的。

舉個例子

/act/jcrm/mmly/20662.shtml

/act/jcrm/mmly/20662.shtml

/act/jcrm/mmly/20662.shtml

/act/jcrm/mmly/20662.shtml

/act/jcrm/mmly/20662.shtml

/act/jcrm/mmly/20662.shtml

  • 上一篇:阿裏巴巴程序員工資壹般多少
  • 下一篇:如何在CentOS系統中裝虛擬windows系統
  • copyright 2024編程學習大全網