前言
惡意代碼分析是安全從業(yè)人員非常重要的一個(gè)技能。
之前提到過SSDT hook隱藏和PEB斷鏈隱藏,今天接觸一下其他的。
參考書籍:<<惡意代碼分析實(shí)戰(zhàn)>>
Lab13-1
這里先運(yùn)行一下,可以看到對(duì)一個(gè)網(wǎng)站的請(qǐng)求。
然后用IDA查看,沒有看到這個(gè)域名相關(guān)的信息。
看到這里抽取資源文件,并對(duì)資源文件進(jìn)行了異或操作。
這里我們對(duì)資源文件提取,進(jìn)行異或操作,可以看到域名。
之后再調(diào)用了一個(gè)函數(shù),獲得主機(jī)名。
這里之后調(diào)用一個(gè)函數(shù),我們用od看一下這里干了啥。
可以知道這里進(jìn)行了base64編碼
然后發(fā)送請(qǐng)求
讀取返回內(nèi)容。
然后進(jìn)行判斷。
Lab13-2
用IDA打開。
GetTickCount
GetTickCount返回(retrieve)從操作系統(tǒng)啟動(dòng)所經(jīng)過(elapsed)的毫秒數(shù),它的返回值是Dword。
函數(shù)解除鎖定的內(nèi)存塊,使指向該內(nèi)存塊的指針無效
GlobalFree
釋放指定的全局內(nèi)存塊
GetSystemMetries
通過設(shè)置不同的標(biāo)識(shí)符就可以獲取系統(tǒng)分辨率、窗體顯示區(qū)域的寬度和高度、滾動(dòng)條的寬度和高度。
GetDesktopwindows
該函數(shù)返回桌面窗口的句柄。桌面窗口覆蓋整個(gè)屏幕。桌面窗口是一個(gè)要在其上繪制所有的圖標(biāo)和其他窗口的區(qū)域。
該函數(shù)檢索一指定窗口的客戶區(qū)域或整個(gè)屏幕的顯示設(shè)備上下文環(huán)境的句柄,以后可以在GDI函數(shù)中使用該句柄來在設(shè)備上下文環(huán)境中繪圖。
該函數(shù)創(chuàng)建一個(gè)與指定設(shè)備兼容的內(nèi)存設(shè)備上下文環(huán)境(DC)。
CreateCompatibleBitmap
該函數(shù)創(chuàng)建與指定的設(shè)備環(huán)境相關(guān)的設(shè)備兼容的位圖。
SelectObject
該函數(shù)選擇一對(duì)象到指定的設(shè)備上下文環(huán)境中,該新對(duì)象替換先前的相同類型的對(duì)象。
GetObjectA
t函數(shù)得泛指得到對(duì)象,到指定圖形對(duì)象的信息,根據(jù)圖形對(duì)象,函數(shù)把填滿的或結(jié)構(gòu),或表項(xiàng)(用于邏輯調(diào)色板)數(shù)目放入一個(gè)指定的緩沖區(qū)。
GlobalAlloc
該函數(shù)從堆中分配一定數(shù)目的字節(jié)數(shù)。Win32內(nèi)存管理器并不提供相互分開的局部和全局堆。提供這個(gè)函數(shù)只是為了與16位的Windows相兼容。簡稱全局堆分配
GlobalLock
鎖定內(nèi)存中指定的內(nèi)存塊,并返回一個(gè)地址值,令其指向內(nèi)存塊的起始處。
GlobalUnlock
函數(shù)解除鎖定的內(nèi)存塊,使指向該內(nèi)存塊的指針無效,GlobalLock鎖定的內(nèi)存,一定要用GlobalUnlock解鎖。
GlobalFree
釋放指定的全局內(nèi)存塊
ReleaseDC
函數(shù)釋放設(shè)備上下文環(huán)境(DC)供其他應(yīng)用程序使用。函數(shù)的效果與設(shè)備上下文環(huán)境類型有關(guān)。它只釋放公用的和設(shè)備上下文環(huán)境,對(duì)于類或私有的則無效。
DeleteDC
函數(shù)刪除指定的設(shè)備上下文環(huán)境(Dc)。
DeleteObject
該函數(shù)刪除一個(gè)邏輯筆、畫筆、字體、位圖、區(qū)域或者調(diào)色板,釋放所有與該對(duì)象有關(guān)的系統(tǒng)資源,在對(duì)象被刪除之后,指定的句柄也就失效了。
先獲得操作系統(tǒng)的時(shí)間,作為文件名
然后截圖
之后進(jìn)入一個(gè)加密函數(shù)
最后寫入文件
那么怎么看到這個(gè)截圖呢,一種方法是在加密前直接返回。
還有一種是將加密后的圖片內(nèi)容取出來,放到加密的參數(shù),這里是先假設(shè)自定義加密是可逆的進(jìn)行嘗試。按住第一個(gè)字節(jié),shift往下脫,在最后一個(gè)字節(jié)上面按一下。
Lab13-3
放入PEid,無殼,并且可以看到有加密字段。
放入IDA中查看,這里通過插件可以看到先是調(diào)用了AES相關(guān)的函數(shù)
接著啟用了socket初始化,與服務(wù)器通信
然后這里創(chuàng)建了兩個(gè)管道
之后創(chuàng)建了cmd的進(jìn)程。
之后創(chuàng)建了一個(gè)線程,從socket讀取內(nèi)容。
這里還涉及到了一個(gè)函數(shù),點(diǎn)進(jìn)去查看,可以得知是base64
然后調(diào)用了另一個(gè)函數(shù),也是讀和寫的操作,這里進(jìn)行了AES加密操作。
理一下,就是socket獲取服務(wù)器base64編碼后的數(shù)據(jù),然后解碼傳遞給cmd,然后cmd運(yùn)行結(jié)果aes加密,然后傳遞給服務(wù)器。
這里通過插件和字符串可以判斷出AES加密和base64編碼,AES的私鑰可以從main函數(shù)中得知。