病毒特征码定位原理和首次使用MyCCL
一 什么是病毒特征碼
?
特征碼就是從病毒體內不同位置提取的一系列字節,殺毒軟件就是通過這些字節及位置信息來檢驗某個文件是否病毒。每個殺毒軟件公司都有自己的特征碼提取方法和提取工具,這也是特別需要技術的地方,弄不好就造成誤判,將好文件當成病毒給殺了。殺毒軟件公司在提取特征碼后,一般都需要經過較嚴格的測試和比對,當然也有時間緊迫,來不及充分測試就匆匆升級病毒庫(也就是特征碼庫)的情況,前不久的Norton誤刪windows系統文件就是這樣造成的。
特征碼比對是當前主流殺毒技術的尷尬,但它確實是針對已知病毒最有效,并經過證明穩定可行的方法。缺點是對未知病毒沒有防范能力,殺毒總是跟在病毒后面跑。所以,各殺毒公司也有一些自己的查殺未知病毒的技術。目前,也有一些基于行為特征的主動防御的商業軟件(被稱為HIPS)推出,比如System Safety Monitor等。
?
二 MyCCL簡介
常用的定位木馬病毒特征碼的工具有三款,CCL,MultiCCL,MYCCL。CCL程序出現后,使得特征碼修改已經成為了對付殺毒軟件的常用手法,但是殺毒軟件開始使用多重復合特征碼來對付特征碼修改就是說只有你同時改掉程序所有的守護特征碼此程序才不被殺。CCL這樣的定位工具無法直接定位出特征碼,要定位復合特征碼必須手工劃分,而MYCCL是CCL的改進版,可以進行多重特征碼的定位,針對金山等殺軟的反向定位等功能,并實現自動化代碼定位和顯示。
MyCCL定位原理
假設一段木馬程序代碼是這樣(0代表NULL,X代表程序代碼,a、b、c等代表特征碼):
001h:XXXXXaXXXbXXXXXXXXXX
002h:XXXXXXXXcXXXXXxXXXXX
003h:XXXXXXXXXaXXXXXXXXXX
004h:XXXXXXXXXbXXXXXXXXXX
005h:XXXXXXXXXXXXcXXXXXXX
當文件同時包含a.b.c三種特征碼的時候,殺軟就報毒。這就是所謂的復合特征碼。當然殺軟在定義復合特征碼的時候可能有好幾種組合,好幾套特征碼。當是復合特征碼的時候,在用CCL來定位結果是很困難的。而MyCCL在CCL的基礎上又進步了。這里手動用MyCCL來生成5個文件。
========File1=============
001h:XXXXXaXXXbXXXXXXXXXX
002h:00000000000000000000
003h:00000000000000000000
004h:00000000000000000000
005h:00000000000000000000
========File2=============
001h:XXXXXaXXXbXXXXXXXXXX
002h:XXXXXXXXcXXXXXxXXXXX
003h:00000000000000000000
004h:00000000000000000000
005h:00000000000000000000
========File3=============
001h:XXXXXaXXXbXXXXXXXXXX
002h:XXXXXXXXcXXXXXxXXXXX
003h:XXXXXXXXXaXXXXXXXXXX
004h:00000000000000000000
005h:00000000000000000000
========File4=============
001h:XXXXXaXXXbXXXXXXXXXX
002h:XXXXXXXXcXXXXXxXXXXX
003h:XXXXXXXXXaXXXXXXXXXX
004h:XXXXXXXXXbXXXXXXXXXX
005h:00000000000000000000
========File5=============
001h:XXXXXaXXXbXXXXXXXXXX
002h:XXXXXXXXcXXXXXxXXXXX
003h:XXXXXXXXXaXXXXXXXXXX
004h:XXXXXXXXXbXXXXXXXXXX
005h:XXXXXXXXXXXXcXXXXXXX
=========================
從File2開始就有了abc特征碼的組合,File2到File5就被殺了。被殺以后再用MyCCL,進行二次定位,這樣我們就知道了特征碼c的位置了。然后再把002h那行置0,再生成一次。
第二次生成5個文件:
========File1=============
001h:XXXXXaXXXbXXXXXXXXXX
002h:00000000000000000000
003h:00000000000000000000
004h:00000000000000000000
005h:00000000000000000000
========File2=============
001h:XXXXXaXXXbXXXXXXXXXX
002h:00000000000000000000
003h:00000000000000000000
004h:00000000000000000000
005h:00000000000000000000
========File3=============
001h:XXXXXaXXXbXXXXXXXXXX
002h:00000000000000000000
003h:XXXXXXXXXaXXXXXXXXXX
004h:00000000000000000000
005h:00000000000000000000
========File4=============
001h:XXXXXaXXXbXXXXXXXXXX
002h:00000000000000000000
003h:XXXXXXXXXaXXXXXXXXXX
004h:XXXXXXXXXbXXXXXXXXXX
005h:00000000000000000000
========File5=============
001h:XXXXXaXXXbXXXXXXXXXX
002h:00000000000000000000
003h:XXXXXXXXXaXXXXXXXXXX
004h:XXXXXXXXXbXXXXXXXXXX
005h:XXXXXXXXXXXXcXXXXXXX
=========================
因為002h被我們置0了,這里只有File5有abc特征碼了,所以File5被殺,這時另一處c也暴露出來了,這樣我們就把所有c特征碼都定位出來了。MYCCL解決了CCL定位復合特征碼的困難。
?
三 首次使用MyCCL
首先打開一個文件;目前沒有病毒樣本;隨便打開個QQ附帶的DLL看看; 點擊生成,出現下面提示;害怕清空了有用的文件;把該dll拷貝到另一個目錄,再操作; 看了一下,原來是在打開文件的目錄下,新建一個OUTPUT目錄,切塊后的文件放在OUTPUT中;不會對原來的文件造成影響; 隨便輸個分10塊,點擊生成以后,結果如下; 未分塊的文件是107K;分了10塊以后,看一下,每一塊還是107K;首次使用還真是茫然; 修改單位長度為1093,分塊數量自動變為100; 輸入5093的單位長度,分塊數量自動變為21; 點擊 生成 以后,會彈出如下提示;?
分成21塊的情況;
?
點擊二次處理按鈕,給出的特征碼定位結果如下;
?
為什么分為10塊或更多,每塊的大小都同原始大小呢;用Winhex打開看下,對很多地方是用0填充的;
其工作原理,目前尚未完全搞懂;下次再搞;
?
四 特征碼逐塊填充定位原理
http://book.51cto.com/art/201309/411648.htm
《黑客免殺攻防》第3章免殺與特征碼,
我們將從簡單的腳本木馬免殺開始介紹,引導大家逐步認識特征碼、特征碼免殺,進而了解如何修改特征碼。本節為大家介紹特征碼逐塊填充定位原理。
3.2.1 特征碼逐塊填充定位原理
逐塊填充定位的方法在國內首先出現在CCL上,CCL是國內首款演示研究性的特征碼定位工具,也是一款原理簡單的單一特征碼定位器。
鑒于我們現在還沒講到特征碼定位器的使用技巧,所以這里只講原理,不涉及操作,具體操作會在后面介紹。待了解了特征碼定位器的使用技巧后,如果再回頭來反復咀嚼這一節所講的內容,相信對免殺的理解也會更進一步。
為了更加直觀地介紹各個特征碼定位器的原理,我制作了一個極其簡單的例子程序,如圖3-5所示。當然這個程序是不能運行的,只是為了演示所用。這個程序中的“1111……”代表的是有數據的地方,其中的“AA”就是我們假定的特征碼。
當我們用CCL定位特征碼時,它會從區段頭部開始填充“00”數據,因為“00”往往都表示“此處為空”,所以如果將某一段數據替換為“00”,也就相當于刪除了這段數據。為了讓演示效果更加明顯,這里將整個文件作為一個區段來定位。現在來看看CCL生成的第一個無后綴文件OUT_00000000_00000010,如圖3-6所示。不難發現,第一行已經被無意義的“00”給填充了,我們假設的特征碼“AA”現在已經不存在了,很顯然這個文件是不會被反病毒軟件查殺的。
下面再看看生成的第二個文件OUT_00000010_00000010,如圖3-7所示。
我們發現由于填充的部位變成了第2行,所以特征碼“AA”這時又暴露出來,因此這個文件肯定會被反病毒軟件查殺。再來看第三個文件OUT_00000020_00000010,如圖3-8所示。
很顯然,這次是文件的第3行被“00”填充了,這個文件依然包含特征碼。到了現在,我們可以猜得出來,第四個文件肯定是第4行被填充了,而且由于沒有覆蓋住特征碼“AA”,因此它同樣會被殺,如圖3-9所示。
?
在這次操作中CCL總共生成了4個文件,其中3個被殺,經過簡單的推理可以確定,是第一個文件覆蓋掉了特征碼,又因為第一個文件中的第一行數據被“00”填充了,進而可以很自然地推斷出—特征碼就在第一行。
但是這個特征碼的范圍是不是有些大呢?其實在真正操作的時候,如果我們想得到比較小的特征碼范圍,可以將CCL一次填充“00”的字節數減少,例如由默認的16字節減少到4字節。為了便于大家的理解,我做了一張比較形象的CCL特征碼定位示意圖,如圖3-10所示。通過這張圖可以更加透徹地理解CCL特征碼定位原理了。
五?MyCCL特征碼定位原理學習
http://blog.csdn.net/dyllove98/article/details/9631211
?
這里對MyCCL的分塊原理做一下探究
對指定文件生成10個切塊
對指定的木馬進行切塊后,文件列表是這樣的。
注意這里是從E0作為切塊的偏移量。也就是說從E0的位置開始逐個切塊,E0之前的內容是保留的。這樣做的目的是保留一些PE必須的頭文件信息。
我們來通過親身的探究來解析一下MyCCL的切塊區間定位法到底什么意思,之后再從理論角度入手解釋這個原理。
我們打開第一個文件
0000_000000E0_000110B6,用winhex查看。
我們發現E0之前的內容是完整保存的。也就是我們指定的起始位置之前的內容不參與切塊,因為病毒特征碼也不可能在這塊區域內。
從文件名我們知道,第一個文件的切塊范圍為000000E0_000110B6。那我們定位到000110B6看看那里的情況。
因為000000E0 + 000110B6 = 00011198,第一個文件(第一個切塊的范圍是): 000000E0_00011198。然后后面的數據全部被填充為00。(文件名的第三段代表偏移量)
在繼續打開順序的第二個文件:0001_00011196_000110B6。首先從文件名中可以知道,這個文件的開始正好就是第一個文件的結束。然后我們用winhex打開。定位到00011196這個位置看看。
這次從00011196這個位置開始,一直到0002224C的位置, 原始數據都一直被保留,到0002224C之后的數據又被填充為00了。而0002224C的位置正好就是第三個文件的開始位置。
看到這里我們應該明白了,MyCCL所做的事情就是在不斷的恢復出原始數據的過程,只不過這個這個動作是分成好幾步(塊)慢慢來進行的。
如果特征碼不在之前的某幾塊的范圍內的話,那殺軟在查殺的時候也不會殺除這些文件,因此前幾塊那些不包含特征碼的塊文件就會在查殺的時候被保留下來。
我感覺要更清晰的理解原理的話最好是用手工一個文件一個文件順序的方法進行查毒,直到某一個塊文件查處有病毒。則說明這個塊文件多露出的那一塊原始數據包含了病毒特征碼。
那我們的第一個分塊的目的就達到了,我們找到了特征碼的大致范圍,就在剛才多露出的這個塊原始數據塊中,則這個被查處有病毒的塊對應的起始地址和終止地址就我們第一切塊的結果。
我們定位特征碼的位置,既不能說是看被查出有毒的,也不能說是沒被查出有毒的。準確說是第一個被查出有毒的。第一此被查出有毒的那個區段就是特征碼的一個范圍。
這里假設我們在查殺第二文件的時候查出有病毒,那后面的文件也不用查了,肯定也有病毒,因為它們同樣包含了第二個區段。一般我們用手工的查殺方法,查出第二個文件有毒然后清除這個文件。
0001_00011196_000110B6這個文件被刪除了
?
然后,我們點擊”二次處理”時MyCCL就能發現第二個文件不見了,就能定位出一個特征區間。看清楚,是MyCCL發現了第二個文件不見了。它就知道了這個特征碼是在第二個區段內。
現在明白了為什么有的人殺到一個病毒就停止查殺了吧?因為按順序擺放,找到某處特征碼時,后面的暫時沒必要管。為什么說是暫時呢?接下來繼續解釋。
因為現在的殺毒軟件一般是復合定位,也就是說多特征碼定位,而且發現任何一處特征碼就能確定出病毒來,所以MyCCL在確定出一處特征碼(這里是第二個文件塊)時,會提醒用戶要不要繼續分析。此時當然選"是"了,這個時候又會生成十個切片。
這次又生成的10(你自己設定的切塊數量)個切片就有意思了。
可以看到依然是和第一次的10個塊文件一樣的分區范圍,但是,內容給也是一樣的嗎 ?我們繼續用winhex查看內容,之后再慢慢解釋原理。
我們打開第一個文件0000_000000E0_000110B6,然后直接定位到00011198
第一個文件依然是一樣的。我們繼續打開第二個文件:0001_00011196_000110B6
用winhex打開0001_00011196_000110B6。
好,這次發現不同了,在第一次的生成切塊過程中,我們知道,MyCCL是逐步露出原始數據的,那道理第二個文件中應該從00011196位置開始把原始數據露出來了呀?難道是MyCCL程序出錯了嗎?
當然不是的。
因為這是二次分塊定位,第二個文件塊我們已經確認是有病毒的了,不需要再用殺軟來確認了,所以MyCCL直接填充00,而是從第三個文件開始逐步露出原始數據。不急,我們先實驗一下驗證一下這個觀點。
打開第三個文件:0002_0002224C_000110B6,定位到0002224C的位置。
可以看到,確實和我們說的一樣,從第三個文件開始逐步露出原始數據。我們再定位到文件塊3的結束位置:00033302,也是第四個文件的開始位置。
由此可以得知,后面的處理過程和之前的第一次分塊是一樣的原理了。差別就在二次分塊時默認將第一次中找到的那塊直接填充00了,就不再露出來了。
結果就是二次定位后也同樣會生成10個塊文件。
我們依然可以從頭順序開始逐個用殺軟進行查殺(不過我感覺可以直接從剛才找到的第一個帶特征碼的文件塊后面開始繼續試探查殺)。直到再次發現那個首次發現病毒的文件塊,則我們要找的第二個病毒特征碼就在那個文件塊中。
以此類推,還可以繼續點擊”二次處理”尋找第三個,第四個特征碼,只要文件塊還沒遍歷完。但是要注意的是,每次點擊”二次處理”生成文件,才能用殺軟繼續順序查一次,即每次只能找到一個特征碼位置,然后要再次點擊”二次處理”。 如果在二次分塊的查殺驗證中直到最后一個文件塊都沒有再出現病毒警報的話,則說明這個病毒程序就只有一個病的特征碼。即之前找到的那個,整個過程需要殺軟的配合。
至此,我們就算完成了第一輪的切片范圍搜索,但是這個時候定位的范圍太大了,我們需要繼續進行精確定位,縮小范圍。
點擊特征區間,會出現我們之前找到的特征碼范圍。
可以看出: 00011196_000110B6就是文件名本身,意思是這個范圍就是整個分塊本身,非常大,接下來我們要重復上面的過程繼續一次定位及二次定位。
右鍵點擊重新復合定位。
接下來的步驟就有點像是算法中的遞歸,這次的范圍縮小了,我們以:
?
0001_00011196_000110B6
這個范圍作為原始文件的大小,注意看開始位置和結束位置。
這次的搜索范圍被集中到:00011196_000110B6。或者也可以理解為0001_00011196_000110B6這個文件現在相當于原始文件了,我們從這個范圍中繼續搜索特征碼。
我們繼續通過實踐驗證我們的觀點。重新修改分塊數目為10,點擊生成。
注意到,這次生成的文件列表中。第一個文件就是0000_00011196_00001B45,即直接從00011196這個位置開始了。
打開第一個文件:0000_00011196_00001B45。
我們先觀察一下E0的位置
可以看到,還是之前說的原理,起始地址之前的數據是被保留的。只是從我們指定的起始位置開始分塊。
現在我們直接定位到00012CDB位置,也就是第二個文件的開始位置。
可以看到,這次分塊的行為模式和之前的原理上是一樣的。
現在,為了加深映像,讓我們再打開倒數第二個文件:0008_0001EBBE_00001B45。
并定位到00020703的位置,也即最后一個文件結束的位置。
再打開最后一個文件:0009_00020703_00001B4A,定位到2224C,也即一開始指定的結束位置。
可以看到在結束位置2224C之后的內容也依然存在。也就說MyCCL對于我們指定的范圍外的數據不做任何處理,只會對我們指定的范圍內的數據進行切塊。
我研究到這里的時候,就有一個疑問了,那這樣要是木馬病毒有復合特征怎么辦呢?即在第一次的切塊搜索中搜索出了2處以上的特征碼位置,我們選擇其中一處縮小范圍,進行進一步的搜索,然后MyCCL只在我們指定的范圍內進行切塊,那這個范圍外的那一處特征碼就將一直存在了,那我們第二輪切塊中每一個文件不就都會查出有病毒了嗎?
帶著這個疑問,我們重新做一次實驗,在第一輪切塊搜索的的時候模擬出有兩處特征碼,即手工刪掉2個文件(和殺軟殺掉本質上是一樣的)
重新打開MyCCL,生成10個切塊,并刪掉第二個文件0001_00011196_000110B6
點擊”二次處理”,重新生成10個文件,在提示是否要繼續搜索特征碼的對話框中點確認,這次刪除第九個文件:0008_00088690_000110B6
刪除后,再次點擊二次處理,讓MyCCL發現又有一個文件不在了,即又找到了一個特征碼位置。
結束后,右邊顯示共找到了兩處特征碼位置。
選擇第一處位置:00011196_000110B6,右鍵,繼續復合特征碼查找。
注意這個時候的起始位置和結束位置就是第二文件的范圍,點擊生成。
我們來打開第一個文件:0000_00011196_00001B45。其他的位置我們都了解了,現在關鍵是第九個文件的位置0008_00088690_000110B6是我們要重點關注的。
先定位到00088690的位置。
可以看到,和我們的理論猜想一樣,這塊內容被填充了00,和”二次處理時”要把之前找到的特征碼位置填充00的思想是一樣的,為了不影響本次的范圍內切塊搜索。要反范圍外的特征碼位置填充00,其他位置就保持不變。
搞清楚了以上幾點后,我們就可以以此類推,不斷遞歸的縮小范圍,直到能把特征碼的范圍縮小到20字節一下,基本就差不多了。
國內外的殺軟一般是根據一些字符組合來判斷是否是病毒,在20字節一下基本能幫組我們對特征碼進行定位判斷。
順便介紹個在線測試病毒的網站http://www.virscan.org/。國內外流行的殺毒引擎都在里面了。殺軟的話推薦用COMODO,很好用,性能也很好,我一直在用這款。
總結
以上是生活随笔為你收集整理的病毒特征码定位原理和首次使用MyCCL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle第一次使用语句创建作业失败记
- 下一篇: 图解MySql命令行创建存储过程