iT邦幫忙

2026 iThome 鐵人賽

DAY 18
0
Security

《Nyahello!從零開始的 30 天 malware 學習日誌》系列 第 18

【Day 18】動態前的靜態:利用 IDA 對 malware 進行 patch 前調查

  • 分享至 

  • xImage
  •  

前言

昨天我們透過 lab 9-1 並利用 x32dbg 進行了動態分析中的下斷點、step into 與 step over 等操作,最後透過函式中的分析得知可以透過提供 -in 選項,並且同時提供正確的密碼,讓這個程式自行安裝,或者也可以直接 patch 掉這個執行檔,使程式跳過密碼驗證的檢查,因此今天要來繼續分析這支惡意程式,並介紹如何在 patch 掉程式之前透過靜態分析蒐集需要的資訊。

補充:分析 shellcode

x64dbg 有非常簡單的方式可以分析 shellcode,以下是操作步驟:

  1. 從 hex editor 複製 shellcode 到剪貼簿
  2. 在 Memory Map 中,選擇一塊類型為 Priv 的記憶體區域,Priv 代表配置給這個 process 使用的 private memory,這與那些可能由多個 process 共用、而且是唯讀的 executable image 記憶體區域不同
  3. 在 Memory Map 中對其中一列點兩下,開啟該記憶體區域的 hex dump,然後就可以檢查其中的資料,並且選擇的區域應該包含至少數百個連續的 00 bytes
  4. 在 Memory Map 視窗中,以滑鼠右鍵點擊選擇的記憶體區域,然後選擇 Set Access > Full Access,賦予這塊記憶體讀取、寫入以及執行的權限
  5. 回到 Memory Dump 視窗。選取一段由 00 填滿、而且空間足以容納完整 shellcode 的記憶體區域。對選取區域按下滑鼠右鍵,選擇 Binary > Binary Paste,這樣就會把 shellcode 貼到選擇的記憶體區域
  6. eip 暫存器設定成你剛才修改的那塊記憶體所在位置。(可以在 Disassembler 視窗中對某一條指令按下滑鼠右鍵,然後選擇 New Origin Here,這樣可以很方便地把 eip 設定到該位置)

完成後就可以像分析一般程式一樣,對這段 shellcode 進行執行、Debug,以及進行 single-stepping。

lab 9-1

Questions

2. 這個程式的 command-line options 有哪些?密碼的要求是甚麼

選項分析

昨天我們最後得知

可以透過提供 -in 選項,並且同時提供正確的密碼,讓這個程式自行安裝,或者也可以直接 patch 掉這個執行檔,使程式跳過密碼驗證的檢查。

於是接下來我們要去找所有的 command-line options,這邊我是利用 IDA Pro 先進行靜態分析,也可以用動態分析來做

https://ithelp.ithome.com.tw/upload/images/20260914/20183878130OBLRv7B.png

首先打開 main 函式看到有一堆 _mbscmp 的呼叫,_mbscmp 是 Microsoft C Runtime 的字串比較函式,用途和 strcmp 很接近,概念上

_mbscmp(string1, string2);

它會逐字比較兩個字串,回傳值通常可以這樣理解:

回傳 0    → 兩個字串相同
回傳 < 0  → string1 小於 string2
回傳 > 0  → string1 大於 string2

因為我們想要找到對於選項參數的比較,所以就點進去看

https://ithelp.ithome.com.tw/upload/images/20260914/20183878Tto5DnV7Bt.png

可以看到選項總共有 4 個

  • -in
  • -re
  • -c
  • -cc

個別分析後發現

Option Address 功能
-in 0x402600 安裝 serrvice
-re 0x402900 移除 service
-c 0x401070 設定 configuration key
-cc 0x401280 顯示 configuration key

https://ithelp.ithome.com.tw/upload/images/20260914/20183878o7ZP1D9nap.png

https://ithelp.ithome.com.tw/upload/images/20260914/20183878Dinh7TRhir.png

0x402900 對應到命令列參數 -re,而 -re 對應的函式,所做的事情和位址 0x402600 的安裝函式完全相反,它首先會在位址 0x402915 開啟 Service Manager,接著在位址 0x402944 找到已安裝的 malware service,然後在位址 0x402977 將這個 service 刪除

https://ithelp.ithome.com.tw/upload/images/20260914/20183878c1wTfaVWje.png

最後,它會刪除位於 %SYSTEMROOT%\system32 中的 malware 複本,並且移除 malware 的 configuration registry value,這兩個行為分別發生在位址 0x402A9D0x402AD5

https://ithelp.ithome.com.tw/upload/images/20260914/20183878W7SN75qTcp.png

接著,查看從位址 0x401070 開始的函式,當我們提供 -c 這個選項時,就會執行這個函式,從位址 0x401070 開始的函式會接收四個參數,並把這四個參數串接在一起。

https://ithelp.ithome.com.tw/upload/images/20260914/20183878SRfotUGe3U.png

這個函式會把最後產生的 buffer 寫入 Windows Registry 中HKLM\SOFTWARE\Microsoft\XPS 底下名為 Configuration 的 registry value。

https://ithelp.ithome.com.tw/upload/images/20260914/201838781tepfKPvUO.png

提供 -c 給 malware,可以讓使用者更新 malware 儲存在 Windows Registry 中的 configuration。

下圖顯示了 malware 進行預設安裝後,透過 Regedit 所看到的 Windows Registry 項目

https://ithelp.ithome.com.tw/upload/images/20260914/201838781FZivMz4pX.png

從位址 0x401280 開始的函式,則是在提供 -cc switch 時執行,這個函式和 configure function,也就是 0x401070 剛好相反,它會讀取 configuration registry value 的內容,然後把裡面的各個欄位放進由 function arguments 所指定的 buffers 中

如果 malware 使用 -cc switch 執行,目前的 configuration 就會從 Registry 中被讀取出來,再被格式化成一個字串,最後,malware 會把這個字串輸出到 console。

密碼分析

從剛剛的 main 函式中可以看到最後一個 command-line argument 會被傳進 0x402510,而 0x402510 就是密碼驗證函式

https://ithelp.ithome.com.tw/upload/images/20260914/20183878Sxc7p0iJlq.png

可以理解成

bool CheckPassword(char *password)
{
    if (strlen(password) != 4)
        return false;

    if (password[0] != 'a')
        return false;

    if (password[1] - password[0] != 1)
        return false;

    char x = 99 * (password[1] - password[0]);

    return password[2] == x &&
           password[3] == x + 1;
}

所以

password[0] = 97  = a
password[1] = 98  = b
password[2] = 99  = c
password[3] = 100 = d

→ abcd

所以提供 -in 選項以及密碼 abcd,即可讓 malware 進入安裝流程,另一種方式則是 patch password verification,使驗證直接成功,有了這些資訊以後,明天就可以來 patch 掉函式!

參考資料

  • Practical Malware Analysis (Chapter 9)

本日貓味

https://ithelp.ithome.com.tw/upload/images/20260914/20183878MWY0XE291m.jpg


上一篇
【Day 17】實戰 Debugger!下斷點、step into 與 step over 練習
下一篇
【Day 19】竄改之術!使用 debugger 對函式內容進行 patch
系列文
《Nyahello!從零開始的 30 天 malware 學習日誌》28
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言