先解释一下远程进程,其实就是要植入你的代码的进程,相对于你的工作进程(如果叫本地进程的话)它就叫远程进程,可理解为宿主。 DE+k'8\T
7{\6EC}d[&
首先介绍一下我们的主要工具CreateRemoteThread,这里先将函数原型简单介绍以下。 WO6R04+WV
;3XOk+
CreateRemoteThread可将线程创建在远程进程中。 \k{d'R#~(
YJ|U|[
函数原型 OIDP#K
HANDLE CreateRemoteThread( rl,i,1t
HANDLE hProcess, // handle to process *7w!~mn[m
LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD !v8](UI8-
SIZE_T dwStackSize, // initial stack size qu&p)*M5
LPTHREAD_START_ROUTINE lpStartAddress, // thread function wg<t*6&'x
LPVOID lpParameter, // thread argument ]k8f1F
DWORD dwCreationFlags, // creation option 0BH-kr
LPDWORD lpThreadId // thread identifier +8Y|kC{9"
); g7{:F\S
参数说明: qh+&Z x~
hProcess EQ.K+d*K][
[输入] 进程句柄 Tp|>(~;ai
lpThreadAttributes Y]7 6y>|e
[输入] 线程安全描述字,指向SECURITY_ATTRIBUTES结构的指针 J9MAnYd)i
dwStackSize Xck`"RU<xA
[输入] 线程栈大小,以字节表示 9h/Hy aN
lpStartAddress .>Qa3,v5
[输入] 一个LPTHREAD_START_ROUTINE类型的指针,指向在远程进程中执行的函数地址 c
dWg_WBC
lpParameter r'4Dj&9Ac
[输入] 传入参数 V"B/4v>
dwCreationFlags kj6H+@
{
[输入] 创建线程的其它标志 #lO ^PK
!#zO%
lpThreadId ~~=]_lwyK%
[输出] 线程身份标志,如果为NULL,则不返回 X]o"4#CQIX
vqZBDQ0
返回值 q0DRT4K
成功返回新线程句柄,失败返回NULL,并且可调用GetLastError获得错误值。 IJVzF1vC
B*t1Y<>x
接下来我们将以两种方式使用CreateRemoteThread,大家可以领略到CreateRemoteThread的神通,它使你的代码可以脱离你的进程,植入到别的进程中运行。 Z1Qv>@u
;/t~MH
第一种方式,我们使用函数的形式。即我们将自己程序中的一个函数植入到远程进程中。 PEg]z
4Y1dkg1y
步骤1:首先在你的进程中创建函数MyFunc,我们将把它放在另一个进程中运行,这里以windows @1xIph<z
z{&