回覆列表
  • 1 # 使用者5147634925370

    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個位元組作為定位結果

    對於這種大尺寸的片段,沒必要完全定位出片段的頭端。

  • 中秋節和大豐收的關聯?
  • 酸芥菜骨做法?