1.CCL定位原理
假設一段木馬程式程式碼是這樣(0代表NULL,X代表程式程式碼,a、b、c等代表特徵碼):
001h:XXXXXXXXXXXXXXXXXXXX
002h:XXXXXXXXXXXXXXaXXXXX
003h:XXXXXXXXXXXXXXXXXXXX
004h:XXXXXXXXXXXXXXXXXXXX
005h:XXXXXXXXXXXXXXXXXXXX
當用CCL進行手動定位的時候,它生成了5個檔案
==========File1===========
001h:00000000000000000000
==========File2===========
002h:00000000000000000000
==========File3===========
003h:00000000000000000000
==========File4===========
004h:00000000000000000000
==========File5===========
005h:00000000000000000000
=========================
當你用殺軟來掃這5個檔案時只有File2沒有報毒,很明顯因為File2的特徵碼a被填0了,這樣也就暴露
了特徵碼a的位置了。CCL定位原理就是這樣,然後反覆的迴圈定位,縮小範圍。最後就可以定位出我
們想要的特徵碼了。當然這是針對單一特徵碼。
----------------------------------------------------------------------------------------------
2.MyCCL定位原理
001h:XXXXXaXXXbXXXXXXXXXX
002h:XXXXXXXXcXXXXXxXXXXX
003h:XXXXXXXXXaXXXXXXXXXX
004h:XXXXXXXXXbXXXXXXXXXX
005h:XXXXXXXXXXXXcXXXXXXX
當檔案同時包含a.b.c三種特徵碼的時候,殺軟就報毒啦。這就是所謂的複合特徵碼。當然殺軟在定義
複合特徵碼的時候可能有好幾種組合,好幾套特徵碼。當是複合特徵碼的時候,在用CCL來定位結果
是很困難的。而MyCCL在CCL的基礎上又進步了。這裡我們手動用MyCCL來生成5個檔案。
========File1=============
========File2=============
========File3=============
========File4=============
========File5=============
很明顯,很明顯從File2開始就有abc特徵碼的組合了,這樣File2到File5就被殺了。被殺以後再用MyCCL,進行二次定位,這樣我們就知道了特徵碼c的位置了。然後再把002h那行置0,再生成一次。
第二次生成5個檔案:
很明顯因為002h被我們置0了,這裡只有File5有abc特徵碼了,所以File5被殺,這樣另一處c也暴露出來了,這樣我們就把所有c特徵碼都定位出來了。解決了CCL定位複合特徵碼的困難。然而我們回過頭來想想,如果你想修改a或b特徵碼呢?又如何定位出a或b的特徵碼呢?這就是MyCCL的一個缺陷。不是定位不出來,而是很費勁。沒有特徵碼保護機制。
3.multiccl定位原理
1.假設一種比較極端的情況:
某防毒軟體針對某樣本
抽取了如下 a b c d e 的五個特徵碼片段
而其中的任何一個單獨的片段都不構成完整的特徵碼
更極端的情況是可能有兩套這樣的組合。
卻以其中任何兩處來識別。(見 圖1)
這樣,如果用原來的CCL就很難定位了,就算能定位,操作也
變得很複雜。
(圖1)
..............................aaaaaaaaa........................
...............................................................
.............bbbbbbb.........ccc...............................
...................ddddddddd...............eeeee...............
2.針對這種情況
有個思路是從一端開始蓋零(考慮到PE檔案檔案頭的重要性
multiCCL選擇了從尾端開始往前蓋)。
直到如圖2所示時,防毒軟體才不能識別
(b片段被破壞了一個位元組)
這樣b尾端就出來了。
(圖2)
..............................aaaaaaaaa.........................
................................................................
.............bbbbbb000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
------------------------------------------------------------------
下面是定b片段的頭端了
看看圖3 圖4 圖5 ,注意看b片段中間那個位元組的零的移動
(後來發現有時用一個位元組的零不行,可改用N個零)
(圖3)
.............bbbb0bbb0000000000000000000000000000000000000000000
----------------------------------
(圖4)
.............0bbbbbb00000000000000000000000000000000000000000000
----------------------------------------------------------------------
(圖5)
............0bbbbbbb00000000000000000000000000000000000000000000
--------------上圖的a 和 b 兩個片段都暴露了--------------------------
圖5 中,暴露出完整的a b 兩個片段,這下又被防毒軟體認出來了
這樣就定位出b段了。
接下來把b希用0蓋掉作為新的樣本,用防毒軟體檢測一下是否被殺,還殺就
重複前面的步驟定 c 段,如圖6
(圖6)
.............0000000.........ccc...............................
-----------------------------------------------------------------------
如果定好c段蓋掉後還是被殺就再定 d 段
如圖7
(圖7)
.............0000000.........000...............................
這樣重複,直到片段d e ……都被找出蓋掉後,防毒軟體再也不認了
(後來又發現有些防毒軟體針對零覆蓋有干擾,改用隨機串)
-----------------------------------
一個位元組一個位元組來顯然太費時間,效率很低的,一次性
生成上千個檔案也是不現實的。
所以考慮先用二分法粗定。到範圍小時再逐位元組替換。
從尾端開始數,以1.2.4.6.8……的大小往前蓋
即取2的指數階 , 2^n
一次生成20個左右的樣本檔案,用防毒軟體檢測
以例圖說明吧(見 圖8圖9)
下面這個蓋了128 bytes 的還被識別
(圖8)
000000000000000000000000000000000000000000000000000000000000000
-----------上面這個蓋了128 bytes的還被識別-------------
--------------下面這個蓋了256 bytes 的不被識別了--------------------
(圖9)
--------------------------------------------------------------------
那就說明距檔案末尾256--128之間有個特徵碼片段,
下一步就以圖8為樣本,
定位的範圍是 圖10 中經XXXX標記的區域
(圖10)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
---------------------------------
如此反覆,當範圍縮小到32位元組或更小,二分法就顯得效率低下了,
改用逐位元組替換法,一次生成最多32個檔案。
-----------
另外,
圖8 圖9 圖10 之外,還有一種情況,
就是某次用二分法生成的所有檔案
防毒軟體都不識別,那就說明特徵碼集中在最大蓋0範圍之前
即圖9中 未蓋0的區域,這時只要以圖9為樣本,
定點陣圖11中以YYYY標記的區域
(圖11)
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
後來實際測試及應用中發現這種演算法效率不高。
檔案定位時改用等分法,記憶體定位時用一半一半法,這樣效率最高。
------------
尾端定出後,再用 圖3圖4圖5 所示的方法把0還位元組前移,一次生成32個
檔案用防毒軟體檢測,如果32個全不被殺時,就取這32個位元組作為定位結果
對於這種大尺寸的片段,沒必要完全定位出片段的頭端。
1.CCL定位原理
假設一段木馬程式程式碼是這樣(0代表NULL,X代表程式程式碼,a、b、c等代表特徵碼):
001h:XXXXXXXXXXXXXXXXXXXX
002h:XXXXXXXXXXXXXXaXXXXX
003h:XXXXXXXXXXXXXXXXXXXX
004h:XXXXXXXXXXXXXXXXXXXX
005h:XXXXXXXXXXXXXXXXXXXX
當用CCL進行手動定位的時候,它生成了5個檔案
==========File1===========
001h:00000000000000000000
002h:XXXXXXXXXXXXXXaXXXXX
003h:XXXXXXXXXXXXXXXXXXXX
004h:XXXXXXXXXXXXXXXXXXXX
005h:XXXXXXXXXXXXXXXXXXXX
==========File2===========
001h:XXXXXXXXXXXXXXXXXXXX
002h:00000000000000000000
003h:XXXXXXXXXXXXXXXXXXXX
004h:XXXXXXXXXXXXXXXXXXXX
005h:XXXXXXXXXXXXXXXXXXXX
==========File3===========
001h:XXXXXXXXXXXXXXXXXXXX
002h:XXXXXXXXXXXXXXaXXXXX
003h:00000000000000000000
004h:XXXXXXXXXXXXXXXXXXXX
005h:XXXXXXXXXXXXXXXXXXXX
==========File4===========
001h:XXXXXXXXXXXXXXXXXXXX
002h:XXXXXXXXXXXXXXaXXXXX
003h:XXXXXXXXXXXXXXXXXXXX
004h:00000000000000000000
005h:XXXXXXXXXXXXXXXXXXXX
==========File5===========
001h:XXXXXXXXXXXXXXXXXXXX
002h:XXXXXXXXXXXXXXaXXXXX
003h:XXXXXXXXXXXXXXXXXXXX
004h:XXXXXXXXXXXXXXXXXXXX
005h:00000000000000000000
=========================
當你用殺軟來掃這5個檔案時只有File2沒有報毒,很明顯因為File2的特徵碼a被填0了,這樣也就暴露
了特徵碼a的位置了。CCL定位原理就是這樣,然後反覆的迴圈定位,縮小範圍。最後就可以定位出我
們想要的特徵碼了。當然這是針對單一特徵碼。
----------------------------------------------------------------------------------------------
2.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特徵碼都定位出來了。解決了CCL定位複合特徵碼的困難。然而我們回過頭來想想,如果你想修改a或b特徵碼呢?又如何定位出a或b的特徵碼呢?這就是MyCCL的一個缺陷。不是定位不出來,而是很費勁。沒有特徵碼保護機制。
----------------------------------------------------------------------------------------------
3.multiccl定位原理
1.假設一種比較極端的情況:
某防毒軟體針對某樣本
抽取了如下 a b c d e 的五個特徵碼片段
而其中的任何一個單獨的片段都不構成完整的特徵碼
更極端的情況是可能有兩套這樣的組合。
卻以其中任何兩處來識別。(見 圖1)
這樣,如果用原來的CCL就很難定位了,就算能定位,操作也
變得很複雜。
(圖1)
..............................aaaaaaaaa........................
...............................................................
.............bbbbbbb.........ccc...............................
...............................................................
...................ddddddddd...............eeeee...............
2.針對這種情況
有個思路是從一端開始蓋零(考慮到PE檔案檔案頭的重要性
multiCCL選擇了從尾端開始往前蓋)。
直到如圖2所示時,防毒軟體才不能識別
(b片段被破壞了一個位元組)
這樣b尾端就出來了。
(圖2)
..............................aaaaaaaaa.........................
................................................................
.............bbbbbb000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
------------------------------------------------------------------
下面是定b片段的頭端了
看看圖3 圖4 圖5 ,注意看b片段中間那個位元組的零的移動
(後來發現有時用一個位元組的零不行,可改用N個零)
(圖3)
..............................aaaaaaaaa.........................
................................................................
.............bbbb0bbb0000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
----------------------------------
(圖4)
..............................aaaaaaaaa.........................
................................................................
.............0bbbbbb00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
----------------------------------------------------------------------
(圖5)
..............................aaaaaaaaa.........................
................................................................
............0bbbbbbb00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
--------------上圖的a 和 b 兩個片段都暴露了--------------------------
圖5 中,暴露出完整的a b 兩個片段,這下又被防毒軟體認出來了
這樣就定位出b段了。
接下來把b希用0蓋掉作為新的樣本,用防毒軟體檢測一下是否被殺,還殺就
重複前面的步驟定 c 段,如圖6
(圖6)
..............................aaaaaaaaa........................
...............................................................
.............0000000.........ccc...............................
...............................................................
...................ddddddddd...............eeeee...............
-----------------------------------------------------------------------
如果定好c段蓋掉後還是被殺就再定 d 段
如圖7
(圖7)
..............................aaaaaaaaa........................
...............................................................
.............0000000.........000...............................
...............................................................
...................ddddddddd...............eeeee...............
-----------------------------------------------------------------------
這樣重複,直到片段d e ……都被找出蓋掉後,防毒軟體再也不認了
(後來又發現有些防毒軟體針對零覆蓋有干擾,改用隨機串)
-----------------------------------
一個位元組一個位元組來顯然太費時間,效率很低的,一次性
生成上千個檔案也是不現實的。
所以考慮先用二分法粗定。到範圍小時再逐位元組替換。
-----------------------------------
從尾端開始數,以1.2.4.6.8……的大小往前蓋
即取2的指數階 , 2^n
一次生成20個左右的樣本檔案,用防毒軟體檢測
以例圖說明吧(見 圖8圖9)
下面這個蓋了128 bytes 的還被識別
(圖8)
..............................aaaaaaaaa........................
...............................................................
.............bbbbbbb.........ccc...............................
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
-----------上面這個蓋了128 bytes的還被識別-------------
--------------下面這個蓋了256 bytes 的不被識別了--------------------
(圖9)
..............................aaaaaaaaa........................
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
--------------------------------------------------------------------
那就說明距檔案末尾256--128之間有個特徵碼片段,
下一步就以圖8為樣本,
定位的範圍是 圖10 中經XXXX標記的區域
(圖10)
..............................aaaaaaaaa........................
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
---------------------------------
如此反覆,當範圍縮小到32位元組或更小,二分法就顯得效率低下了,
改用逐位元組替換法,一次生成最多32個檔案。
-----------
另外,
圖8 圖9 圖10 之外,還有一種情況,
就是某次用二分法生成的所有檔案
防毒軟體都不識別,那就說明特徵碼集中在最大蓋0範圍之前
即圖9中 未蓋0的區域,這時只要以圖9為樣本,
定點陣圖11中以YYYY標記的區域
(圖11)
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
-----------------------------------
後來實際測試及應用中發現這種演算法效率不高。
檔案定位時改用等分法,記憶體定位時用一半一半法,這樣效率最高。
------------
尾端定出後,再用 圖3圖4圖5 所示的方法把0還位元組前移,一次生成32個
檔案用防毒軟體檢測,如果32個全不被殺時,就取這32個位元組作為定位結果
對於這種大尺寸的片段,沒必要完全定位出片段的頭端。