part1
点击上方蓝字关注我们
往期推荐
将二进制空间安全设为"星标⭐️"
第一时间收到文章更新
声明: 二进制空间安全公众号文章中的技术只做研究之用,禁止用来从事非法用途,如有使用文章中的技术从事非法活动,一切后果由使用者自负,与本公众号无关。
1.摘要
这里收集了Windows平台下24种进程注入相关的Windows API的调用方法, 包括:文件操作、进程管理、内存管理、线程管理、动态链接库(DLL)管理、同步、进程间通信、Unicode字符串操作、错误处理、Winsock网络操作和注册表等函数的方法汇聚。
下面列举一些常用的进程注入函数使用案例和模版, 其中还包含一些未公开的API调用方法。完整的API调用链官方文档链接见文末的URL, 不仅给出了API函数的官方链接, 还有未公开文档化的函数调用方法。
2.DLL注入
实现DLL注入的常用API调用链如下:
-
OpenProcess
HANDLE OpenProcess(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
DWORD dwProcessId
);
-
VirtualAllocEx
LPVOID VirtualAllocEx(
HANDLE hProcess,
LPVOID lpAddress,
SIZE_T dwSize,
DWORD flAllocationType,
DWORD flProtect
);
-
WriteProcessMemory
BOOL WriteProcessMemory(
HANDLE hProcess,
LPVOID lpBaseAddress,
LPCVOID lpBuffer,
SIZE_T nSize,
SIZE_T *lpNumberOfBytesWritten
);
-
CreateRemoteThread
HANDLE CreateRemoteThread(
HANDLE hProcess,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);
-
GetProcAddress
FARPROC GetProcAddress(
HMODULE hModule,
LPCSTR lpProcName
);
-
LoadLibrary
HMODULE LoadLibraryA(
LPCSTR lpLibFileName
);
-
NtCreateThread(未文档化)
NTSTATUS NTAPI NtCreateThread(
OUT PHANDLE ThreadHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN HANDLE ProcessHandle,
OUT PCLIENT_ID ClientId,
IN PCONTEXT ThreadContext,
IN PINITIAL_TEB InitialTeb,
IN BOOLEAN CreateSuspended
);
-
RtlCreateUserThread(未文档化)
NTSTATUS NTAPI RtlCreateUserThread(
IN HANDLE ProcessHandle,
IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
IN BOOLEAN CreateSuspended,
IN ULONG StackZeroBits,
IN OUT PULONG StackReserved,
IN OUT PULONG StackCommit,
IN PVOID StartAddress,
IN PVOID StartParameter OPTIONAL,
OUT PHANDLE ThreadHandle,
OUT PCLIENT_ID ClientId
);
API模板使用方法:
-
使用 OpenProcess 打开目标进程。
-
使用 VirtualAllocEx 在目标进程中分配内存。
-
使用 WriteProcessMemory将DLL路径写入分配的内存中。
-
使用 GetProcAddress 获取 LoadLibraryA 的地址。
-
使用 CreateRemoteThread 在目标进程中创建一个远程线程,指向 LoadLibraryA,并将 LoadLibraryA 的地址作为 lpStartAddress 参数传递。
-
可选)使用 NtCreateThread 或 RtlCreateUserThread 作为替代的线程创建方法。
检测和防御方法:
-
监控可疑的进程访问和内存分配模式。
-
使用应用程序白名单来防止未经授权的 DLL 加载。
-
实施进程完整性检查。
-
使用 Microsoft 的 Process Monitor 等工具检测 DLL 注入尝试。
3.PE注入
该技术涉及在远程进程或相同进程中编写并执行恶意代码。
-
OpenThread
HANDLE OpenThread(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
DWORD dwThreadId
);
-
SuspendThread
DWORD SuspendThread(
HANDLE hThread
);
-
VirtualAllocEx(见上)
-
WriteProcessMemory(见上)
-
SetThreadContext
BOOL SetThreadContext(
HANDLE hThread,
const CONTEXT *lpContext
);
-
ResumeThread
DWORD ResumeThread(
HANDLE hThread
);
-
NtResumeThread(未文档化)
NTSTATUS NTAPI NtResumeThread(
IN HANDLE ThreadHandle,
OUT PULONG PreviousSuspendCount OPTIONAL
);
API模板使用方法:
-
使用 OpenThread 打开目标线程。
-
使用 SuspendThread 挂起该线程。
-
使用 VirtualAllocEx 在目标进程中分配内存。
-
使用 WriteProcessMemory 将恶意代码写入分配的内存中。
-
使用 SetThreadContext 修改线程上下文,使其指向注入的代码。
-
使用 ResumeThread 或 NtResumeThread 恢复线程。
检测和防御方法:
-
监控异常的线程挂起和恢复模式。
-
实施内存完整性检查。
-
使用终端检测与响应 (EDR) 解决方案来检测可疑的内存修改。
-
采用运行时进程内存扫描技术。
收录的完全版文档请参考:
https://github.com/7etsuo/windows-api-function-cheatsheets?tab=readme-ov-file#10-extra-windows-memory-injection
往期推荐
点个在看你最好看
原文始发于微信公众号(二进制空间安全):Windows下24种进程注入方法模板
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论