技術討論 | Windows 10進程鏤空技術(木馬免殺)
前言
在Win10 x64環境下替換正常的進程,是一個比較高超的技術。使用該技術,可以內存執行病毒、木馬。在文件層面實現免殺。可以把一個木馬使用DES加密,放在資源里。執行時,從資源里釋放出來,在內存里進行DES解密,注入到一個系統的進程中。
環境
VisualStudio 2015 企業版
普通程序 Notepad.exe (C:windowssystem32Notepad.exe)
木馬程序 MalWare.exe
源碼下載地址,http://www.isafe.cc/article.asp?id=77
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
※黑客可以通過電源線從計算機竊取數據
※利用PRET控制遠程印表機測試
TAG:FreeBuf |