當前位置:
首頁 > 新聞 > 技術討論 | Windows 10進程鏤空技術(木馬免殺)

技術討論 | Windows 10進程鏤空技術(木馬免殺)

前言


在Win10 x64環境下替換正常的進程,是一個比較高超的技術。使用該技術,可以內存執行病毒、木馬。在文件層面實現免殺。可以把一個木馬使用DES加密,放在資源里。執行時,從資源里釋放出來,在內存里進行DES解密,注入到一個系統的進程中。


環境





  1. VisualStudio 2015 企業版



  2. 普通程序 Notepad.exe (C:windowssystem32Notepad.exe)



  3. 木馬程序 MalWare.exe



  4. 源碼下載地址,http://www.isafe.cc/article.asp?id=77



  5. EXE下載地址,http://www.isafe.cc/article.asp?id=77


步驟


創建一個掛起的進程notepad.exe->讀取線程上下文->讀取進程內存->讀取Notepad.exe原始入口點->卸載Notepad.exe佔用的內存->將MalWare.exe二進位放入內存緩衝區->在Notepad.exe進程中分配一個內存空間->將MalWare.exe注入到Notepad.exe的進程里->修改Notepad.exe的區段->修改Notepad.exe的入口點->恢復主線程->成功注入。



代碼實現


一.

創建一個掛起的進程notepad.exe




a.) lpApplicationName 這個參數是可執行文件的路徑。例如

c:programfilessub dirprogram.exe

c:program filesa.exe

netstat

b.) lpCommandLine 這個表示應用程序的參數。例如 -an

c.) lpProcessAttributes 進程屬性結構體變數


d.) lpThreadAttributes 線程屬性結構體變數


e.) bInheritHandles 指定當前進程內句柄不可以被子進程繼承


f.) dwCreationFlags 進程創建標識符,CREATE_SUSPENEDE 表示創建一個掛起的進程。


g.) lpEnvironment 指向一個新進程的環境塊。如果此參數為空,新進程使用調用 進程的環境。


h.) lpCurrentDirectory 指向一個以NULL結尾的字元串,這個字元串用來指定子進程的 工作路徑。這個字元串必須是一個包含驅動器名的絕對路徑。如果這個參數為NULL,新進程將使用與調用進程相同的驅動器和目錄。


i.) lpStartupInfo 指向一個用於決定新進程的主窗體如何顯示的STARTUPINFO結 構體。


j.) lpProcessInformation保存進程所有信息的結構體變數。


CreateProcess函數用於創建一個進程,cAppName為C:Windows
otepad.exe,是程序文件的路徑,第6個參數為CREATE_SUSPENDED,表示創建一個掛起的進程。最後2個參數si,pi保存了進程的相關信息(進程的句柄,線程的句柄等)。

二. 讀取線程上下文


GetThreadContext函數用於獲取線程上下文。


Pi.hThread為線程句柄,


context線程信息結構體。


三. 讀取Notepad.exe原始入口點


ReadProcessMemory函數用於讀取另一個進程的內存。這裡dwVictimBaseAddr存放讀取的數據,大小為4個位元組。


原型




第一個參數hProcess,要讀取的進程句柄。


第二個參數lpBaseAddress,要讀取的進程的內存首址。開始地址。

第三個參數lpBuffer,接收數據內容的緩衝區。


第四個參數 nSize,從內存中讀取的位元組數。


第五個參數lpNumberOfBytesRead,已經讀取的位元組數。


函數返回0表示調用失敗。


四. 卸載Notepad.exe佔用的內存


pfnNtUnmapViewOfSection函數用於卸載進程佔用的內存


五. 在Notepad.exe進程中分配一個內存空間


VirtualAllocEx函數用於在指定進程中分配一個內存空間。


函數原型:



第一個參數hProcess,需要在其中分配空間的進程的句柄。


第二個參數lpAddress,分配的內存首址。


第三個參數 dwSize,分配的內存大小。


第四個參數flAllocationType,內存區域的類型。


第五個參數flProtect,內存保護屬性。


六. 將MalWare.exe注入到Notepad.exe的進程里,修改Notepad.exe的區段和PE文件頭



WriteProcessMemory函數用於向Notepad.exe進程寫入任何數據。

函數原型:




第一個參數hProcess,待操作的進程句柄。


第二個參數 lpBaseAddress,要寫入數據的起始地址。


第三個參數lpBuffer,要寫入數據的緩衝區首址。


第四個參數 nSize, 要寫入數據的長度。


第五個參數lpNumberOfBytesWritten,已寫入的數據長度。


七. 修改Notepad.exe的入口點 RCX存放的是入口點。


八. 恢復主線程


SetThreadContext()函數用於恢複線程上下文,這裡指定了新的入口點地址 Rcx


ResumeThread ()函數用於啟動掛起的線程。


編譯為EXE


必須用Visual Studio 2015進行編譯。源碼下載(http://www.isafe.cc/article.asp?id=77)



在「解決方案資源管理器」中,右鍵->重新生成



在輸出窗口中看到成功1個(注意這裡生成的是一個Release版的64位程序)



MalWare.exe

編譯為EXE


源碼下載(http://www.isafe.cc/article.asp?id=77)


打開VS2015,點擊菜單[文件]->[打開]->[項目/解決方案]。



打開Malware.vcxproj工程文件,進行編譯,模式為Release,平台為x64。



在輸出窗口中,提示成功1個。



Win10

平台測試


將ProcessReplacement.exe拖入虛擬機。



雙擊,提示



看樣子是缺少什麼文件?將VS2015環境下的文件vcruntime140.dll,複製到虛擬機




雙擊執行ProcessReplacement.exe



總結


本文介紹的Win10 x64進程鏤空技術,可以在文件層面實現木馬免殺。


*本文作者:河馬安全網,轉載請註明來自FreeBuf.COM


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

黑客可以通過電源線從計算機竊取數據
利用PRET控制遠程印表機測試

TAG:FreeBuf |