天天看點

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

《惡意代碼分析實戰》實驗——Labs-09

記錄《惡意代碼分析實戰》中的實驗,提供相關連結:

  • 電子書的下載下傳
  • i春秋由相關實驗的視訊教程

标題

  • 《惡意代碼分析實戰》實驗——Labs-09
    • Labs-09-01實驗
      • 靜态分析:
        • IDA分析
      • 問題
    • Labs-09-02實驗
      • 靜态分析:
    • Labs-09-03實驗
      • 問題

Labs-09-01實驗

靜态分析:

1. 查殼,無殼

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

2. 檢視導入表:

KERNEL32.dll, (讀取、複制、建立和修改檔案,擷取檔案名和删除檔案,建立程序,對比字元串,擷取系統版本資訊)

ADVAPI32.dll, (建立和删除服務,建立、修改和删除系統資料庫,)

SHELL32.dll, (遠端執行系統指令)

WS2_32.dll,(進行網絡連接配接和資料傳輸)

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

3. Strings 分析: 出現可能會連接配接的網址,一個系統路徑可能用于存放其他惡意檔案,-cc, -re 和 -in 像是指令行的參數。

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

IDA分析

1)打開IDA分析,觀察整體的流程圖,發現會根據程式的參數進行跳轉,發現當僅僅隻有預設參數(即輕按兩下程式)時程式的邏輯會非常簡單,不會有特别的代碼執行;另一個多參數的分支則邏輯更加就複雜,挨個分析:

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

2)左邊的邏輯分支會進行指定系統資料庫的擷取和分析,如果該鍵值不存在則直接會調用一個函數進行自我删除,如果存在的話,則會調用sub_402360 函數,然後結束。

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

3)跟進sub_402360 函數進行分析,發現存在一個死循環,其中僅調用了兩個函數sub_401280和sub_402020函數

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

4) 先分析sub_401280,發現該函數會擷取指定系統資料庫下的鍵值對,并且放入指定的緩存中

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

5)再分析sub_402020函數,發現該函數是一個後門執行的函數,其中包括 “sleep”, “upload”, “download”, “cmd” 等指令;其中擷取的指令是通過函數sub_401E60獲得的。

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

6)再跟入函數sub_401E60進行分析,發現其中的sub_401AF0函數非常可疑,傳給它的參數帶有hots和name等關鍵詞,猜測該函數可能涉及網絡資料發送。

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

7)跟入該函數,發現該函數為一個網絡資料發送和接受函數;其中網絡資料包的相關參數來着前面函數sub_401470 和 sub_401D80從指定系統資料庫的鍵值中擷取。

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

8)右邊分支發現一個函數sub_402510調用,此函數的調用直接影響下面的邏輯跳轉,跟進去分析,發現該函數是一個程式執行密碼的檢測函數,通過參數輸入的字元串,挨個比較,進而決定下一步的跳轉邏輯:

i)先檢查密碼的長度是否為4,再依次檢查第一位是否為‘a‘,第二位是否是’b‘,第三位是否是’c‘,第四位是否是’d‘ .

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

9)再根據邏輯往下分析,發現程式将根據指令行輸入的另一個參數進行不同的代碼執行,分别有幾種模式 ‘-in‘, ‘-re’, ‘-c’, ‘-cc’

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

10)分析 “-in” 的子產品,該子產品又會進行參數個數的判斷,但是在參數個數為3和為4的兩個分支中都會調用同一個函數,經過分析,我們可以确定該函數為惡意程式的安裝代碼部分,重命名為Func_install,

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

- 選中該函數,然後F5進行僞代碼分析,發現改代碼會進行服務的建立和程式的自我複制到系統目錄檔案下。

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

- 但是在該段代碼的一個分支調用了一個函數sub_4015B0,跟進該函數後發現該函數修改該新複制的檔案的時間戳與系統檔案一樣。

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

- 同時該段代碼還會跳轉到下一個子產品調用sub_401070函數,同時出現了可疑的字元串“60”,“80” 和 “http://www.practicalmalwareanalyss.com” 被作為參數傳入到該函數。

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

- 跟入該函數進行分析,發現該函數會建立一個系統資料庫項 “HKLM\SOFTWARE\Microsoft \XPS” 的 “configuration”鍵,并且修改相應的鍵值為輸入的參數即上面的字元串。

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

11)分析 ‘-re‘ 子產品,與 ’-in‘ 子產品一樣,該子產品同樣會判斷參數的個數,三個參數和四個參數會跳轉到不同的邏輯,但最終也會調用同一個函數sub_402900,右邊函數在調用sub_402900之前還調用了sub_4025B0函數,該函數非常簡單,用于擷取目前程式的執行的絕對路徑進而得到函數sub_402900的輸入參數;而在左邊的部分,該參數是由指令行輸入提供的,也就是說兩個分支會根據指令行輸入參數的個數來擷取調用函數sub_402900的參數。

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

- 跟進函數sub_402900 進行分析:發現該函數會根據傳入的服務名删除程式建立的服務,同時根據指定路徑進行程式的自我删除。

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

12)分析 “-c” 子產品,該子產品有兩個邏輯分支,一個指向 “-cc” 子產品,此處分析另一個子產品,該子產品需要7個參數,同時該函數還調用了sub_401070 函數來修改指定的鍵值。

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

13)再分析 “-cc” 子產品,除了一些自我删除的函數調用邏輯子產品外,另一個邏輯分支調用了函數sub_401280和sub_402E7E,

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
  • 其中sub_401280 已經在第4)處分析過,該函數會擷取指定注冊項下的鍵值對,并且放入指定的緩存區中。
  • 另一個函數sub_402E7E 被IDA劃分為系統函數之列,同時該函數的輸入參數為一個字元串和四個變量,這個與printf函數的格式非常相似,該函數為字元串列印函數。
    《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

    14) 到此,該惡意程式的分析基本就結束了,對于惡意程式的分析,切記不能調入某一個細節中。

    15)接下來進行總結:

    • 該惡意程式需要指令行 ‘-in’ 進行安裝,同時安裝需要密碼 ‘abcd’
    • 該惡意程式還能能執行多種指令 ‘-in’ 進行安裝,‘-re’ 進行惡意程式的徹底清楚,‘-cc’ 進行系統資料庫列印,‘-c’ 進行系統資料庫配置
    • 此惡意程式在成功安裝後自我複制到指定系統目錄下,并且建立服務進行自啟動。
    • 另外,該程式還會建立後門與C&C通信,執行任意指令。

問題

  1. 如何讓代碼安裝自身?

    回答:利用指令行輸入參數 ‘-in’ 和密碼 ‘abcd’

  2. 這個惡意代碼的指令行選項是什麼?它要求的密碼是什麼?

    回答: 該惡意程式還能能執行多種指令 ‘-in’ 進行安裝,‘-re’ 進行惡意程式的徹底清楚,‘-cc’ 進行系統資料庫列印,‘-c’ 進行惡意代碼更新配置;要求的密碼是 ‘abcd’

  3. 如何利用OllyDbg永久修補這個惡意代碼,使其不需要指定的指令行密碼?

    回答: 直接修改檢驗部分,跳過檢驗步驟即可

  4. 這個惡意代碼基于系統的特征是什麼?

    回答:會建立一個指定系統資料庫項 “HKLM\SOFTWARE\Microsoft \XPS” 的 “configuration”鍵”;同時會建立一個服務,該服務的名稱由安轉時傳入的參數決定;另外,該程式還會自我指派到Windows系統目錄下。

  5. 這個惡意代碼通過網絡指令執行了哪些不同的操作?

    回答:通過網絡指令可以執行 “sleep”, “upload”, “download”, “cmd” 和 “nothing”;

  6. 這個惡意代碼是否有網絡特征?

    回答:會向指定的站點發出http (HTTP/1.0 GET) 請求,預設的站點是“http://www.practicaolmalwareanalysis.com”

Labs-09-02實驗

靜态分析:

Labs-09-03實驗

靜态分析:

1. 查殼,無殼

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

2. 檢視導入表:

  • KERNEL32.dll, (讀取、複制、建立和修改檔案,擷取檔案名和
  • 删除檔案,建立程序,對比字元串,擷取系統版本資訊)
  • ADVAPI32.dll, (建立和删除服務,建立、修改和删除系統資料庫,)
  • SHELL32.dll, (遠端執行系統指令)
  • WS2_32.dll,(進行網絡連接配接和資料傳輸)
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

3. Strings 分析: 出現可能會連接配接的網址,一個系統路徑可能用于存放其他惡意檔案,-cc, -re 和 -in 像是指令行的參數。

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

4. IDA分析

  1. 打開IDA分析,觀察整體的流程圖,發現會根據程式的參數進行跳轉,發現當僅僅隻有預設參數(即輕按兩下程式)時程式的邏輯會非常簡單,不會有特别的代碼執行;另一個多參數的分支則邏輯更加就複雜,挨個分析:
    《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
  2. 左邊的邏輯分支會進行指定系統資料庫的擷取和分析,如果該鍵值不存在則直接會調用一個函數進行自我删除,如果存在的話,則會調用sub_402360 函數,然後結束。
    《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
    《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
  3. 跟進sub_402360 函數進行分析,發現存在一個死循環,其中僅調用了兩個函數sub_401280和sub_402020函數
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

4) 先分析sub_401280,發現該函數會擷取指定系統資料庫下的鍵值對,并且放入指定的緩存中

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

5) 再分析sub_402020函數,發現該函數是一個後門執行的函數,其中包括 “sleep”, “upload”, “download”, “cmd” 等指令;其中擷取的指令是通過函數sub_401E60獲得的。

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

6) 再跟入函數sub_401E60進行分析,發現其中的sub_401AF0函數非常可疑,傳給它的參數帶有hots和name等關鍵詞,猜測該函數可能涉及網絡資料發送。

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

7) 跟入該函數,發現該函數為一個網絡資料發送和接受函數;其中網絡資料包的相關參數來着前面函數sub_401470 和 sub_401D80從指定系統資料庫的鍵值中擷取。

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

8) 右邊分支發現一個函數sub_402510調用,此函數的調用直接影響下面的邏輯跳轉,跟進去分析,發現該函數是一個程式執行密碼的檢測函數,通過參數輸入的字元串,挨個比較,進而決定下一步的跳轉邏輯:

  • 先檢查密碼的長度是否為4,再依次檢查第一位是否為‘a‘,第二位是否是’b‘,第三位是否是’c‘,第四位是否是’d‘ .
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

9) 再根據邏輯往下分析,發現程式将根據指令行輸入的另一個參數進行不同的代碼執行,分别有幾種模式 ‘-in‘, ‘-re’, ‘-c’, ‘-cc’

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

10) 分析 “-in” 的子產品,該子產品又會進行參數個數的判斷,但是在參數個數為3和為4的兩個分支中都會調用同一個函數,經過分析,我們可以确定該函數為惡意程式的安裝代碼部分,重命名為Func_install,

《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
  • 選中該函數,然後F5進行僞代碼分析,發現改代碼會進行服務的建立和程式的自我複制到系統目錄檔案下。
    《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
    《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
    《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
    《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
  • 但是在該段代碼的一個分支調用了一個函數sub_4015B0,跟進該函數後發現該函數修改該新複制的檔案的時間戳與系統檔案一樣。
    《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
  • 同時該段代碼還會跳轉到下一個子產品調用sub_401070函數,同時出現了可疑的字元串“60”,“80” 和 “http://www.practicalmalwareanalyss.com” 被作為參數傳入到該函數。
    《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
  • 跟入該函數進行分析,發現該函數會建立一個系統資料庫項 “HKLM\SOFTWARE\Microsoft \XPS” 的 “configuration”鍵,并且修改相應的鍵值為輸入的參數即上面的字元串。
    《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
    《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
    《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
  1. 分析 ‘-re‘ 子產品,與 ’-in‘ 子產品一樣,該子產品同樣會判斷參數的個數,三個參數和四個參數會跳轉到不同的邏輯,但最終也會調用同一個函數sub_402900,右邊函數在調用sub_402900之前還調用了sub_4025B0函數,該函數非常簡單,用于擷取目前程式的執行的絕對路徑進而得到函數sub_402900的輸入參數;而在左邊的部分,該參數是由指令行輸入提供的,也就是說兩個分支會根據指令行輸入參數的個數來擷取調用函數sub_402900的參數。
    《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
  • 跟進函數sub_402900 進行分析:發現該函數會根據傳入的服務名删除程式建立的服務,同時根據指定路徑進行程式的自我删除。
    《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
    《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
    《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
  1. 分析 “-c” 子產品,該子產品有兩個邏輯分支,一個指向 “-cc” 子產品,此處分析另一個子產品,該子產品需要7個參數,同時該函數還調用了sub_401070 函數來修改指定的鍵值。
    《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
    《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
  2. 再分析 “-cc” 子產品,除了一些自我删除的函數調用邏輯子產品外,另一個邏輯分支調用了函數sub_401280和sub_402E7E,
    《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
  • 其中sub_401280 已經在第4)處分析過,該函數會擷取指定注冊項下的鍵值對,并且放入指定的緩存區中。
  • 另一個函數sub_402E7E 被IDA劃分為系統函數之列,同時該函數的輸入參數為一個字元串和四個變量,這個與printf函數的格式非常相似,該函數為字元串列印函數。
    《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09
    《惡意代碼分析實戰》實驗——Labs-09《惡意代碼分析實戰》實驗——Labs-09

5. 到此,該惡意程式的分析基本就結束了,對于惡意程式的分析,切記不能調入某一個細節中。

6. 接下來進行總結:

  • 1) 該惡意程式需要指令行 ‘-in’ 進行安裝,同時安裝需要密碼 ‘abcd’
  • 2) 該惡意程式還能能執行多種指令 ‘-in’ 進行安裝,‘-re’ 進行惡意程式的徹底清楚,‘-cc’ 進行系統資料庫列印,‘-c’ 進行系統資料庫配置
  • 3) 此惡意程式在成功安裝後自我複制到指定系統目錄下,并且建立服務進行自啟動。
  • 4) 另外,該程式還會建立後門與C&C通信,執行任意指令。

問題

  1. 如何讓代碼安裝自身?

    回答:利用指令行輸入參數 ‘-in’ 和密碼 ‘abcd’

  2. 這個惡意代碼的指令行選項是什麼?它要求的密碼是什麼?

    回答: 該惡意程式還能能執行多種指令 ‘-in’ 進行安裝,‘-re’ 進行惡意程式的徹底清楚,‘-cc’ 進行系統資料庫列印,‘-c’ 進行惡意代碼更新配置;要求的密碼是 ‘abcd’

  3. 如何利用OllyDbg永久修補這個惡意代碼,使其不需要指定的指令行密碼?

    回答: 先在IDA中找到密碼驗證後的跳轉位址,然後在OD中打開,找到指定位置直接修改反彙編代碼跳到下個邏輯部分,然後儲存二進制檔案即可。

  4. 這個惡意代碼基于系統的特征是什麼?

    回答:會建立一個指定系統資料庫項 “HKLM\SOFTWARE\Microsoft \XPS” 的 “configuration”鍵”;同時會建立一個服務,該服務的名稱由安轉時傳入的參數決定;另外,該程式還會自我指派到Windows系統目錄下。

  5. 這個惡意代碼通過網絡指令執行了哪些不同的操作?

    回答:通過網絡指令可以執行 “sleep”, “upload”, “download”, “cmd” 和 “nothing”;

  6. 這個惡意代碼是否有網絡特征?

    回答:會向指定的站點發出http (HTTP/1.0 GET) 請求,預設的站點是“http://www.practicaolmalwareanalysis.com”

繼續閱讀