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