簡單COM惡意組件分析

簡單COM惡意組件分析

什麼是COM組件

COM組件是微軟的一個接口標註,全稱是組件對象模型(Component Obejct Model),它可以使不同的軟件組件在不知道其他組件代碼的接口規範時,進行相互間的調用。COM可以支持任何編程語言,因此被設計成了一個可複用的軟件組件。

COM組件的基本分析

每個程序在調用COM組件之前,都需要進行一系列的初始化工作,常用的函數包括了

OleInitialize或者CoInitializeEx函數進行一個組件的初始化,之後才能對響應的COM組件使用。

在分析一個COM組件的樣本的時候,需要清楚每個COM組件初始化的一些參數,需要關注的是

CLSID:類型標識符

IID 接口標識符

COM通過上述兩個標識來訪問相關的組件。

當一個程序調用了CoCreateInstance函數式,操作系統會使用註冊表中的註冊信息來判斷請求中的riidrclsid這兩個字段的值,通常會查詢如下註冊表

HKLM\SOFTWARE\Classes\CLSID
HKCU\SOFTWARE\Classes\CLSID

來進行查找要使用的COM服務器的信息。

如果COM組件是一個應用程序則CLSID一個LocalService,如果COM組價你被安裝爲了一個DLL用來被程序加載,則對應的CLSID是一個InprocServer32的鍵。

例如Windows的組側表下有如下信息

\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Classes\AppID\{278A87E1-1BC2-4E19-82E9-8BBE31D67D20}

那麼COM組件通過這個278A87E1-1BC2-4E19-82E9-8BBE31D67D20就能訪問到相關的組件,每個COM組件被註冊爲了一個LocalService的形式,如下

在這裏插入圖片描述

簡單的樣本分析

樣本是來自《惡意分析》中的Lab07-02實驗,hash值爲

BDF941DEFBC52B03DE3485A5EB1C97E64F5AC0F54325E8CB668C994D3D8C9C90

查看樣本的信息得知,編譯時間爲2010/12/19

在這裏插入圖片描述

並且程序使用VC++6.0編寫,並沒有加殼

在這裏插入圖片描述
查看導入表信息,發現了OleInitialize CoCreateInstance函數,如下

在這裏插入圖片描述

推斷程序會調用相關的COM組件使用。使用IDA打開後,程序來到main函數,程序首先調用OleInitialize函數進行了初始化COM組件,接着調用了CoCreateInstance函數創建了一個實例對象,

在這裏插入圖片描述

其中的ripidrclsid分別是

在這裏插入圖片描述

## 整理後
riid:D30C1661-CDAF-11D0-8A3E-00C04FC9E26E
clsid:0002DF01-0000-0000-C000-000000000046

根據對應的riid rclsid值可以知道,riid表示的IWebBrowser2的接口,而rclsid的值指向了Internet Explorer,這裏要使用的是瀏覽器的COM組件信息,接着設置網絡請求的地址URL

"UTF-16LE", 'http://www.malwareanalysisbook.com/ad.html',0

最後調用了Navigate函數訪問了指定的url地址。如下

在這裏插入圖片描述

對應的僞C程序

在這裏插入圖片描述

總結

在分析一個調用COM組件的樣本時,可以先定位到初始化函數的調用,接着查看對應的riid和rclsid的值確定程序要調用COM組件的服務和要執行的功能,有時候在確定了彙編層的調用後,可以在僞代碼之間設置先關的結構對象來明確程序的調用函數,例如這裏的Navigate函數,當設置了ppv的指針爲IWebBrowser2結構之後,就能看到這裏調用了Navigate函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章