惡意代碼分析實戰四: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文件進行分析。

image-20210816104447048

image-20210816104555256

image-20210816104634494

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

題目1讓我們顯示出dllmain函數的地址,這里有兩種方法,第一種方法是直接按空格切換成文本視圖,第二種方法是在設置中顯示帶地址的圖形顯示。
image-20210816104746502

空格切換文本視圖:

image-20210816105000976

帶地址顯示圖形界面

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

image-20210816105345486

image-20210816105414962

題目2:IDA Pro導入表窗口

Imports窗口中按ctrl+f進行搜索輸入gethostbyname,定位到gethostbyname后雙擊過去調到文本視圖界面看到其地址。

image-20210816110307586

image-20210816110608131

題目3:交叉應用,看多少處函數調用了

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

點擊Type進行類型排序,然后我們仔細來看這里有兩個Type,一個是p代表的是函數,r代表的是讀取屬性,

所以這里一共有9個p,但是這9個p並不能代碼是9個函數調用了,我們在仔細來看圖2,其中他有很多地址重復的,所以我們按照地址來分一共可以分析出是4處函數調用了gethostbyname。

image-20210816111105632

image-20210816111304620

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

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

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

image-20210816112256669

image-20210816112341517

切換到界面視圖,然后對題目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

image-20210816112956670

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

image-20210816113033143

題目5:局部變量分析

IDA Pro識別了在0x10001656處的子過程中的多少個局部變量?

首先跳轉到地址處,不再重復如何跳轉。然后我們在匯編代碼的上面可以看到這些東西,紅色標記的地方,這些都是局部變量和參數,其中帶負號的都是局部變量,這里一共有23個帶負號的,也就是23個局部變量。

image-20210816114619883

題目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打開字符串窗口。

image-20210816115335485

image-20210816115422773

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

image-20210816115504628

image-20210816115756935

題目8:代碼分析

在引用\cmd.exe /c的代碼所在的區域發生了什么?

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

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

image-20210816131035431

接着就是用控制命令,遠程創建cmd命令來達到執行Shell的目的。

image-20210816131140039

image-20210816132027587

image-20210816132157267

image-20210816132317331

題目9:進階分析

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

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

image-20210816133055222

image-20210816133213139

可以看到代碼處是eax復制給了全局變量dword_1008E5C4,而eax來源於上一句call的返回值,所以我們需要繼續跟入Call來看他的返回值是什么?

image-20210816133907012

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

image-20210816134131308

image-20210816134330714

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

image-20210816134724611

總結:

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

  • 文本視圖和界面視圖的切換(用空格按鍵)
  • 在界面視圖顯示地址
  • 查看IDA Pro的導入表窗口
  • 交叉引用,查看被多少處函數調用(ctrl + x)
  • 地址的跳轉(ctrl + g)
  • 函數內局部變量的分析(帶負號的)
  • 函數參數分析(push xx,call xxx)、(正數的)
  • Strings 字符串窗口的查看(shift + f12)
  • 代碼分析(f5)
  • 靜態分析流程分支,追溯(利用ctrl +x) 看w和r屬性,分析函數返回值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM