1. 程式人生 > 其它 >惡意程式碼分析實戰四:IDA Pro神器的使用

惡意程式碼分析實戰四:IDA Pro神器的使用

目錄
這節課主要通過使用IDA Pro來進行靜態高階分析

實驗:

----------------
Lab05-01.dll
----------------

使用工具:
1. IDA Pro

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
1、DllMain的地址是什麼?
2、使用Imports視窗並瀏覽到的gethostbyname,匯入函式定位到什麼地址?
3、有多少函式呼叫了gethostbyname?
4、將精力集中在位於0x10001757處的對gethostbyname的呼叫,你能找出哪個DNS請求將被觸發嗎?
5、IDA Pro識別了在0x10001656處的子過程中的多少個區域性變數?
6、IDA Pro識別了在0x10001656處的子過程中的多少個引數?
7、使用Strings視窗,來在反彙編中定位字串\cmd.exe /c 。它位於哪?
8、在引用\cmd.exe /c的程式碼所在的區域發生了什麼?
9、在同一的區域,在0x100101C8處,看起來好像是dword_1008E5C4是一個全域性變數,它幫助決定走哪條路徑。那惡意程式碼是如何設定dword_1008E5C4的呢?(提示:使用dword_1008E5C4的交叉引用。)
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

題目1:利用IDA Pro分析dll的入口點並顯示地址

按照如下步驟開啟IDA Pro並且載入dll檔案進行分析。

等待分析完畢後,IDA Pro自動的會顯示出dll的入口點函式dllmain,如圖。

題目1讓我們顯示出dllmain函式的地址,這裡有兩種方法,第一種方法是直接按空格切換成文字檢視,第二種方法是在設定中顯示帶地址的圖形顯示。

空格切換文字檢視:

帶地址顯示圖形介面

點選選單 Options->General...->勾上 Line prefixes (graph)

題目2:IDA Pro匯入表視窗

Imports視窗中按ctrl+f進行搜尋輸入gethostbyname

,定位到gethostbyname後雙擊過去調到文字檢視介面看到其地址。

題目3:交叉應用,看多少處函式呼叫了

gethostbyname處按ctrl+x調出交叉引用,能看到所有對gethostbyname處有呼叫讀取寫入等的所有地方。

點選Type進行型別排序,然後我們仔細來看這裡有兩個Type,一個是p代表的是函式,r代表的是讀取屬性,

所以這裡一共有9個p,但是這9個p並不能程式碼是9個函式呼叫了,我們在仔細來看圖2,其中他有很多地址重複的,所以我們按照地址來分一共可以分析出是4處函式呼叫了gethostbyname。

題目4:利用ctrl+g跳轉地址

將精力集中在位於0x10001757處的對gethostbyname的呼叫,你能找出哪個DNS請求將被觸發嗎?

首先我們用ctrl+c拷貝0x10001757這個地址,然後在IDA Pro文字檢視或介面檢視,按g按鍵,跳轉到對應的地址處。

切換到介面檢視,然後對題目4的問題進行分析:你能找出哪個DNS請求將被觸發嗎?,我們找找gethostbyname的引數,一般call的意思就是呼叫函式,這裡call gethostbyname就是呼叫gethostbyname這個api函式,然後call上面挨著的push就是函式引數,可以看到這裡就一個引數push eax,引數是eax,所以我們來看看是什麼給eax進行了賦值,往上可以看到有一句mov eax,off_10019040,這種帶off_或者dword_下劃線後面加個地址的可能都是全域性變數,在後面有個註釋是IDA Pro自動加上的,他這裡分析出來off_10019040是一個字串[This is RDO]pics.praticalmalwareanalys

我們也可以直接雙擊全域性變數過去,跳到他的定義處,在圖一中還有一句add eax,0Dh,意思是將eax字串的指標指向從開頭後0xD也就是後13處,那麼正好是pics.praticalmalwareanalys這個域名被解析。(答案)

題目5:區域性變數分析

IDA Pro識別了在0x10001656處的子過程中的多少個區域性變數?

首先跳轉到地址處,不再重複如何跳轉。然後我們在彙編程式碼的上面可以看到這些東西,紅色標記的地方,這些都是區域性變數和引數,其中帶負號的都是區域性變數,這裡一共有23個帶負號的,也就是23個區域性變數。

題目6:函式引數分析

IDA Pro識別了在0x10001656處的子過程中的多少個引數?

看上面的圖,其中正數的就是引數,這裡只有一個引數lpThreadParameter,其實也可以看函式頭註釋那裡,IDA Pro自動分析出了DWORD __stdcall sub_10001656(LPVOID lpThreadParameter),可以看出是一個引數。

題目7:Strings字串視窗

使用Strings視窗,來在反彙編中定位字串\cmd.exe /c 。它位於哪?

我們可以按shift+f12來開啟字串視窗,可以在選單中點選View->Open subviews->Strings開啟字串視窗。

雙擊過去之後點選這個地方,然後在圖2中可以看到是0x100101D0位置的反彙編push offset aCmdExeC處。

題目8:程式碼分析

在引用\cmd.exe /c的程式碼所在的區域發生了什麼?

我們在100101D0地址處,按一下按鍵F5進入反編譯C++虛擬碼進行程式碼分析。

首先我們在函式開頭的地方開始逐步分析,可以看到一些敏感的字串,這裡有個關鍵字Remote Shell Session,所以這個程式應該是一個惡意遠端Shell程式。

接著就是用控制命令,遠端建立cmd命令來達到執行Shell的目的。

題目9:進階分析

在同一的區域,在0x100101C8處,看起來好像是dword_1008E5C4是一個全域性變數,它幫助決定走哪條路徑。那惡意程式碼是如何設定dword_1008E5C4的呢?(提示:使用dword_1008E5C4的交叉引用。)

跳轉到地址,然後點選全域性變數,在全域性變數位置處按ctrl+x調出交叉引用,然後可以看到有w 和r兩種屬性,其中我們可以知道w就是寫入屬性,而題目中需要我們來cmp走哪條分支,還有如何設定dword_1008E5C4全域性變數,那麼肯定是要看w屬性看是什麼東西寫入到了全域性變數dword_1008E5C4

可以看到程式碼處是eax複製給了全域性變數dword_1008E5C4,而eax來源於上一句call的返回值,所以我們需要繼續跟入Call來看他的返回值是什麼?

sub_10003695函式功能是獲取系統版本資訊,並且判斷系統版本是否為NT系統,如果是返回true,否則返回false。

根據上面的分析我們可以得出結論,dword_1008E5C4的值應該是true也就是不為0,所以他不會跳轉到loc_1001d7處,而是繼續執行"cmd.exe /c"處。

總結:

這一節我們學習了IDA Pro的很多知識,主要學會了IDA Pro

  • 文字檢視和介面檢視的切換(用空格按鍵)
  • 在介面檢視顯示地址
  • 檢視IDA Pro的匯入表視窗
  • 交叉引用,檢視被多少處函式呼叫(ctrl + x)
  • 地址的跳轉(ctrl + g)
  • 函式內區域性變數的分析(帶負號的)
  • 函式引數分析(push xx,call xxx)、(正數的)
  • Strings 字串視窗的檢視(shift + f12)
  • 程式碼分析(f5)
  • 靜態分析流程分支,追溯(利用ctrl +x) 看w和r屬性,分析函式返回值