惡意代碼分析實戰lab6-2

先靜態分析

最下面這些internet開頭的函數都是wininet的一部分,這個庫提供了通過網絡使用http的一組簡單的api

internetopena:用於初始化對wininet庫的使用,並設置用於http通信的user-agent字段

internetopenurla:使用一個完整的ftp 或http的url,來打開一個句柄

internetreadfile用於從internetopenurla打開的句柄中讀取數據

internetclosehandle用於關閉已經文件的句柄

 

這一部分和lab6-1類似,就是一些聯網的操作

 

 

接下來嘗試使用wireshark監聽流量

wireshark開啓監聽後,打開文件,如下圖所示

可以看到dns請求查詢惡意網址

我這臺winxp上的是ie6

但是在抓到的流浪中看到,使用get請求惡意網址時,該文件該僞造了user-agent

 

 

 

接下來載入ida分析

main函數一個次調用是sub_40100

跟入

與我們之前分析的lab6-1.exe是一樣的,不再分析了

根據問題2,看sub_40117f,

在其附近可以看到有兩個push壓棧操作

跟入後可以看到

確實是傳入兩個參數

一個是格式化字符串success。。。。

另一個是ecx,往上看

是401148的調用返回字符

因爲字符串後面有%c,所以可知這是格式化字符串,因此我們推斷40117f調用了printf,可以給它重命名

光標定位到40117f,按n

修改如上,點擊ok即可

printf會把success處的%c替換成另一個壓入棧的參數

 

main函數調用的第二個子過程爲sub_401040

跟入後可以看到

裏面都是我們靜態分析時發現的wininet api的調用。

具體來看

首先是Internetopen,用於初始化對wininet庫的使用

注意這裏壓棧了之前在wireshark中看到的那個user-agent

然後是internetopenurl,來打開位於壓入棧參數的靜態網頁,也就是www.practice……

可以看到internetopenurla的返回結果賦給了hfile

並通過cmp指令與0比較,如果不等於0則跳到loc_40109d,也就是走左邊的分支,hfile就這樣傳給了internetreadfile。可以看到,這裏的hfile就是一個用於訪問url的句柄

internetreadfile用於從internetopenurla打開的網頁中讀取內容

從文檔中知道:https://docs.microsoft.com/en-us/windows/win32/api/wininet/nf-wininet-internetreadfile

對照着ida的返彙編結果,我們知道第二個參數爲接收數據的buffer,而在ida中也將其標記爲buffer

由Push 200h可知,會讀取0x200字節的內容,也就是buffer爲0x200大小,即10進制的512

既然ida沒有識別出來,我們可以自己設置

在任意處ctrl+k

在buffer這邊右鍵->數組

設置爲512

點擊ok即可

 

cmp用於比較返回值是否爲0

如果爲0,則關閉句柄並終止

如果不爲0,則跳到loc_4010e5

如上圖所示,可知,代碼會將buffer每次逐一與一個字符比較,每次比較時buffer數組的索引值加1

最開始是cmp ecx,3ch

檢查第一個字符是否等於0x3c

在0x3c處右鍵可以將其改爲<

對於後面的也是同理

可以看到就是比較buffer前4字節是否爲<!—

這串字符是html的註釋開始部分

如果其中有一處比較不成功,則會跳到loc_40111d

全成功則會執行mov al,[ebp+buffer+4],作用是buffer第5個字符會移到al中,並從這個函數返回

 

回到main函數

如果401040返回非零值,則jnz跳到loc_40115c,打印success,,字符串中的%c會被處理爲函數讀取的buffer的第五個字符

後面是調用sleep

參數爲0ea60h,即10進制的60000ms

 

那麼程序爲什麼會這麼寫呢?

我們來理一下。程序首先檢查是否有一個可用的internet連接,然後下載一個包含了<!—的網頁,由於這是html註釋的開頭部分,在瀏覽器中不會被顯示,但是惡意軟件可以讀取到命令,但是在正常人觀察來看,惡意代碼只是在訪問一個網頁,而不是在接收攻擊者發給它的指令。

 

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