MyCCL特徵碼定位原理學習

Andrew.Hann發表於2013-07-30

這段時間學習WEB方面的技術,遇到了木馬免殺特徵碼定位的問題,這裡做一下學習筆記。

這裡對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個檔案(和殺軟殺掉本質上是一樣的)

  1. 重新開啟MyCCL,生成10個切塊,並刪掉第二個檔案0001_00011196_000110B6

 

  1. 點選”二次處理”,重新生成10個檔案,在提示是否要繼續搜尋特徵碼的對話方塊中點確認,這次刪除第九個檔案:0008_00088690_000110B6

 

  1. 刪除後,再次點選二次處理,讓MyCCL發現又有一個檔案不在了,即又找到了一個特徵碼位置。

 

結束後,右邊顯示共找到了兩處特徵碼位置。

  1. 選擇第一處位置:00011196_000110B6,右鍵,繼續複合特徵碼查詢。

 

注意這個時候的起始位置和結束位置就是第二檔案的範圍,點選生成。

 

  1. 我們來開啟第一個檔案:0000_00011196_00001B45。其他的位置我們都瞭解了,現在關鍵是第九個檔案的位置0008_00088690_000110B6是我們要重點關注的。

先定位到00088690的位置。

 

可以看到,和我們的理論猜想一樣,這塊內容被填充了00,和”二次處理時”要把之前找到的特徵碼位置填充00的思想是一樣的,為了不影響本次的範圍內切塊搜尋。要反範圍外的特徵碼位置填充00,其他位置就保持不變。

 

 

搞清楚了以上幾點後,我們就可以以此類推,不斷遞迴的縮小範圍,直到能把特徵碼的範圍縮小到20位元組一下,基本就差不多了。

國內外的殺軟一般是根據一些字元組合來判斷是否是病毒,在20位元組一下基本能幫組我們對特徵碼進行定位判斷。

 

順便介紹個線上測試病毒的網站http://www.virscan.org/。國內外流行的防毒引擎都在裡面了。殺軟的話推薦用COMODO,很好用,效能也很好,我一直在用這款。

相關文章