學會動態分析基礎
使用ProcessMonitor工具監控目標進程名稱Lab03-01.exe,並設置監控注冊表與文件寫入操作,如果目標寫入了數據,則可以監控到寫入的具體目錄。
使用ProcessExplorer 可用來監控目標程序導入的Dll文件以及頭部數據。
例如程序中使用了Mutant互斥量,來保證程序只運行一個實例。
使用WireShark工具捕捉目標網絡特征,首先找到該進程對應的PID,然后執行CMD netstat -ano
得到TCP端口號再根據特定端口,使用Wireshark篩選條件中輸入tcp.port == xxx 過濾特定流量
如果惡意程序是一個dll文件,我們需要首先查看導出表中是否存在安裝之類的到處函數。
一般dll無法自己運行,需要使用svchost.exe -k netsvcs 等命令引導其運行,在其身上會加載很多dll文件,運行。
首先使用Regshot對注冊表拍一個快照。
使用rundll32工具加載並安裝后在分析,執行命令:rundll32.exe Lab03-02.dll,installA 然后拍攝第次快照,並對比兩次的不同,報告中顯示,創建了一個IPRIP的服務。
由於是一個服務,則執行命令,讓這個服務啟動起來。
然后可以使用ProcessExplorer工具,find搜索,目標dll實在那個程序中被運行起來的,如下可知,是附着在svchost.exe中進程中運行起來的。
如下我們知道了目標進程的PID是1028
使用ProcessMonitor設置過濾條件監控PID是,1028即可獲取到目標DLL的操作記錄。
IDA 的使用技巧總結
1.找到導出表的GetHostBynme函數位置,並查詢有多少函數調用了這個地址,通過交叉引用即可獲取到,選中地址按下ctrl+x即可查詢。
類型type 中p開頭代表是一個函數,rw開頭代表是可讀可寫的屬性,如下除去重復的與非P類型的,剩下的一共有五個地址調用了。
接着跳轉到0x10001757位置處的gethostbyname的調用,找出dns請求的域名。
將地址跳轉到0x10001656處,觀察,帶有var_的變量為局部變量,正數則代表是函數參數。
使用string窗口,在反匯編中定位字符串\cmd.exe /c 它位於什么地方?
選擇view ->OpenSubview -> strings 選項,找到字符串位置。
雙擊地址,即可找到引用的變量地址,如下所在:xdoors_d:10095B34
在引用\cmd.exe /c的代碼所在區域發生了什么?我們直接在最右側雙擊上箭頭
即可找到引用區域
在同樣的區域中,0x100101c8處,dword_1008E5C4 是一個全局變量,那惡意代碼是如何設置這個位置的呢,使用交叉引用來解決。
首先雙擊一下,跳轉到全局變量位置。
接着,我們在data地址處按下 ctrl+x 交叉引用地址,只有type為w的是寫入了數據,賦值也就是從這里開始的。
使用塗抹式來繪制出對sub_10004e79的交叉引用圖,當進入這個函數時,那個API函數可能被調用,僅僅基於這些API函數,如何重命名這些函數?
1.首先找到sub_10004e79函數地址,雙擊跳過去。
接着是獲取圖模式,選擇view - > graphs -> user xrefs chart 直接點擊ok生成圖結構。
接着看一下dllmain直接調用了多少個API函數,多少個在深度為2時被調用?
找到DllMain地址,然后選擇 view - > graphs -> user xrefs chart 調用深度為2.
在0x10001701處是一個對socket的調用,他的三個參數是什么?我們可以將第一個參數2轉換為參數關鍵常量,選中push 2 然后右鍵選擇,Use stardard symbolic constant找到一個常量然后保存即可。
搜索IN指令,(OpCode 0xED)指令在代碼中使用位置,點擊search -> sequence of bytes 查找ED指令。
尋找in指令,雙擊過去看看。
可以將壓縮數,轉換為字符串.
為了能找到所有引用虛擬機檢測的代碼,我們可以來到代碼頭部,然后交叉引用一下,有三處引用了虛擬機檢測。
最后將光標跳轉到0x1001d988位置,使用IDC腳本進行解密。
#include <idc.idc>
static main()
{
auto ea = ScreenEA(),b,i,decode;
for(i=0x0;i<0x50;i++)
{
b = Byte(ea+i);
decode = b ^ 0x55;
PatchByte(ea+i,decode);
}
}
將光標放到解密的行上,然后運行腳本即可解密。
識別匯編中的C代碼結構 第四章
分析惡意windows程序 第五章
使用OD進行動態分析 第六章
惡意代碼的特殊行為 第七章
隱藏的惡意代碼啟動 第八章
惡意代碼的數據加密 第九章