先解释一下远程进程,其实就是要植入你的代码的进程,相对于你的工作进程(如果叫本地进程的话)它就叫远程进程,可理解为宿主。 Tj~#Xc
M)RQIl5
首先介绍一下我们的主要工具CreateRemoteThread,这里先将函数原型简单介绍以下。 Q2PwO;E.`C
M- A}(r +J
CreateRemoteThread可将线程创建在远程进程中。 55en
D
=&xoyF
函数原型 $S ("-3
HANDLE CreateRemoteThread( =f|a?j,f~
HANDLE hProcess, // handle to process <;"=ah7A
LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD ''YjeX
SIZE_T dwStackSize, // initial stack size (!=aRC.-
LPTHREAD_START_ROUTINE lpStartAddress, // thread function -JQg{A
LPVOID lpParameter, // thread argument +Enff0 =+
DWORD dwCreationFlags, // creation option Bbp9Q,4
LPDWORD lpThreadId // thread identifier bS"M*
); ]jrxrUl
参数说明: fL:Fn"Nv
hProcess BS.6d}G4
[输入] 进程句柄 .`RC,R`C
lpThreadAttributes %05a>Rf&
[输入] 线程安全描述字,指向SECURITY_ATTRIBUTES结构的指针 _L.yt5_
dwStackSize ZJm^znpw6
[输入] 线程栈大小,以字节表示 "xI[4~'`:
lpStartAddress ,6L>f.V^(U
[输入] 一个LPTHREAD_START_ROUTINE类型的指针,指向在远程进程中执行的函数地址 |g!#
\
lpParameter ~(S4/d5
[输入] 传入参数 T`;M!-)2
dwCreationFlags V0(ABi:d
[输入] 创建线程的其它标志 1\kehCt
u'."E7o#
lpThreadId Sa~C#[V
[输出] 线程身份标志,如果为NULL,则不返回 Wg&