level 7
DLL注入的主要思路是在目标进程创建远程线程,让线程加载我们需要注入的DLL。我们假设A进程需要注入DLL到B进程,那么通常都是如下的步骤:
1. 使用OpenProcess打开B进程,取得一个进程句柄。
hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, Pid)
2. 使用GetProcAddress和GetModuleHandleA获取LoadLibraryA函数的地址,为接下来的调用做准备。LoadLibraryA函数于kernel32.dll中,所以先要获取kernel32.dll的句柄,
lpLoadLib =GetProcAddress(GetModuleHandleA("kernel32.dll"),"LoadLibraryA")
3. 使用VirtualAllocEx在B进程分配可以存下DLL路径的空间并把DLL路径然后用WriteProcessMemory写入到这片空间里。因为A进程和B进程的内存不是共用的,不能互相访问,所以A进程要先在B进程分配内存,然后把需要注入的DLL路径写进去,让B进程知道要注入的DLL文件路径。
WriteAddr = VirtualAllocEx(ByVal hProcess, ByVal 0, ByValUBound(DllPath), MEM_RESERVE Or MEM_COMMIT, PAGE_READWRITE)
WriteProcessMemory ByVal hProcess, ByVal WriteAddr,DllPath(0), ByVal UBound(DllPath), 0
4. 使用CreateRemoteThread在B进程创建远程线程,令其调用LoadLibraryA加载DLL。
hThread = CreateRemoteThread(ByVal hProcess, ByVal 0, ByVal0, ByVal lpLoadLib, ByVal WriteAddr, ByVal 0, Tid)
现在如果不出意外A进程应该成功把DLL注入到B进程了。以上是注入DLL最常用的步骤,上张DLL成功注入的图(Word很不幸的当了白老鼠)。DLL是用C++编写的,负责在成功注入后弹出一个消息框。注意看下方任务栏的图标,说明消息框是属于Word的。





