簡單進程注入分析
樣本來自《惡意樣本分析》Lab12-1.exe Lab12-01.dll
運行程序後,發生了什麼?
觀察程序運行信息,會彈出一個對話框提示Press Ok to reboot
,點擊確認後會再次彈出,可以肯定程序是應該有一個循環,每次彈出對話快之後就等待,如果對話框沒被關閉,會重複彈出,如果關閉了,則會在定時器觸發後再次彈框。
哪個進程被注入了
這個在運行時沒有準確定位到,對比了可以的程序並沒有發現,需要實際逆向分析程序。分析後可知,explore.exe
被注入加載dll
如何關閉彈窗
需要逆向分析並做patch掉彈框程序,將被注入的進程關閉即可。
程序是如何工作的
首先將樣本拖入ida分析,來到main入口,程序先獲取獲取可執行程序的路徑,並拼接了currentpath\to\Lab12-07.dll
的完整路徑,這時候通過EnumProcesses
來枚舉進程,如果枚舉失敗,則返回裝填1退出,如下
枚舉完成進程後,開始查找目標進程
經過分析後知道,程序在syub_401000
處查找目標explore.exe
進程,如果找到則返回1,失敗就繼續循環
當找到目標進程後,開始執行進程注入邏輯。通過OpenProcess
打開一個進程目標句柄,
接着調用VirtualAlloc
函數在目標進程分配一塊內存,然後調用WriteProcessMemeory
函數將Lab12-07.dll
寫入到目標進程explore.exe
內,緊接着通過kernel32.dll
獲取LoaLibraryA
函數,最後將獲取的LoadLibraryA
函數設置給CreateRemoteThread
函數的lpStartAddress
,寫入到explore.exe
的Lab12-01.dll
的地址設置給lpParameter
參數,最後調用CreateRemoteThread
執行Lab12-01.dll
的DllMain
函數,這樣一個進程注入就完成了。
分析Lab12-01.dll
根據前面可以知道程序在會被LoadLibrayA
函數加載,dll的DllMain
函數會被調用,如下
使用一個線程去執行,直接查看lpStartAddress
函數,經過分析後知道,程序另開了一個線程來調用MessageBox
函數,標題是"Practical Malware Analysis %d"
,
消息內容是"Press OK to reboot"
休眠60000
毫秒
休眠完成後繼續循環執行一次,因此這個程序不會停止,會不停的彈框。
總結
程序首先獲取了當前執行的路徑以便獲取到Lab12-1.dll
的絕對路徑,接着枚舉進程並找到explore.exe
作爲注入目標進程,之後利用OpenProcess
函數獲得目標進程的句柄並在目標進程內分配內存空間寫入要注入的dll
,通過CreateRemoteThread
執行LoadLibraryA
將dll
在目標進程內加載並運行,通過這個注入方法來隱藏實際的惡意行爲。