0x00 远线程注入
远线程注入是指一个进程在另一个进程中创建线程的技术。
0x01 函数介绍
OpenProcess
作用: 打开现有的本地进程对象。
函数声明:
HANDLE WINAPI OpenProcess(
_In_ DWORD dwDesiredAccess,
_In_ BOOL bInheritHandle,
_In_ DWORD dwProcessId
)
参数:
dwDesiredAccess:
想拥有该进程的访问权限,若进程启动了SeDebugPrivilege权限,则无论安全描述符内容是什么,都会授予请求的访问权限。
bInheritHandle:
若该值为TRUE,则此进程创建的进程将继承该句柄。
dwProcessId:
本地进程的PID。
返回值:
成功:返回进程打开句柄
失败:返回NULL
VirtualAllocEx
作用: 在指定进程的虚拟地址空间内保留、提交或更改内存的状态。
函数声明:
LPVOID WINAPI VirtualAllocEx(
_In_ HANDLE hProcess,
_In_opt_ LPVOID lpAddress,
_In_ SIZE_T dwSize,
_In_ DWORD flAllocationType,
_In_ DWORD flProtect
)
参数:
hProcess:
过程的句柄。句柄必须有PROCESS_VM_OPERATION(允许远程VM操作)权限。
lpAddress:
指定要分配页面所需起始地址指针。若为NULL,则自动分配内存。
dwSize:
要分配的内存大小,单位为字节。
flAllocationType:
内存分配类型。具体参数参考官方手册。
flProtect:
要分配的页面区域的内存保护。
返回值:
成功:返回分配页面基址
失败:返回NULL
WriteProcessMemory
作用: 在指定的进程中将数据写入内存区域,要写入的整个区域必须可访问,否则操作失败。
函数声明:
BOOL WINAPI WriteProcessMemory(
_In_ HANDLE hProcess,
_In_ LPVOID lpBaseAddress,
_In_ LPCVOID lpBuffer,
_In_ SIZE_T nSize,
_Out_ SIZE_T *lpNumberOfBytesWritten
)
参数:
hProcess:
要修改的进程内存的句柄。句柄必须具有PROCESS_VM_WRITE和PROCESS_VM_OPERATION访问权限。
lpBaseAddress:
指向指定进程中写入数据的基地址指针。
lpBuffer:
指向缓冲区的指针,其中包含要写入指定进程的地址空间中的数据。
nSize:
要写入指定进程的字节数。
lpNumberOfBytesWritten:
指向变量的指针,该变量接收传输到指定进程的字节数。
返回值:
成功:返回不为0
失败:返回0
CreateRemoteThread
作用: 在另一个进程的虚拟地址空间中创建运行的线程。
函数声明:
HANDLE WINAPI CreateRemoteThread(
_In_ HANDLE hProcess,
_In_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
_In_ SIZE_T dwStackSize,