DLL注入的多种方式
注册表注入
在Windows NT/2000/XP/2003操作系统中,当需要加载user32.dll的程序启动时,user32.dll会加载注册表键HLM\Software\Microsoft\WindowsNT\CurrentVersion\Windows\AppInit_DIls下面列出的所有模块。
因此,可以将要注入的模块所在的路径写到AppInit_DIls 键下,待游戏进程启动并将外挂模块带入之后,再删除AppInit_DIls 键的值以清除痕迹,其核心函数如下:
//定义键值
#define DSTKEY "SOFTWARE\\\Microsoft\\\Windows NT\\\CurrentVersion\\\Windows"
//打开主键
RegOpenKeyEx (
HKEY LOCAL_ MACHINE,
DSTKEY,
0,
KEY_ ALL_ ACCESS,
&hKey) ;
//设置AppInit_DLLS 键的值,其中“cDllPath" 为待注人DLL的路径
RegSetValueEx (
hKey,
"AppInit_DLLs",
0,
REG SZ,
cD11Path,
strlen( (char*) cDl1Path) +1
) ;
优点:简单,易于实现。
缺点:第一,系统重启后才能实现注入,且对DLL的稳定性要求比较高。建议在虚拟机里使用,如果DLL有问题就会蓝屏。第二,易于被ProcessMonitor之类的用于监测注册表操作的软件发现。
远线程注入
远线程注入的核心思想是利用Windows提供的远线程机制,在目标进程中开启一个加载模块的远线程,使模块被该远线程加载到游戏的地址空间。
远线程使用的关键API有VirtualAllocEx、WriteProcessMemory、CreateRemoteThread和LoadLibrary,它们的声明如下。
LPVOID WINAPI VirtualAllocEx(
HANDLE hProcess, //远进程句柄
LPVOID lpAddress, //保留页面的内存地址;一般用NULL自动分配
SIZE_T dwSize, //分配内存的大小
DWORD flAllocationType,
DWORD flProtect
);
BOOL WriteProcessMemory (
HANDLE hProcess, //远进程句柄
LPVOID lpBaseAddress, //远进程待写入的地址
LPVOID lpBuffer, //本进程空间需要写入到远进程的地址
DWORD nSize, //lpBuffer所指空间的大小
LPDWORD lpNumberOfBytesWritten //返回实际写入远进程的字节数
) ;
HANDLE CreateRemoteThr

本文详细介绍了DLL注入的多种方法,包括注册表注入、远线程注入、依赖可信进程注入、APC注入、消息钩子注入和劫持进程创建注入。每种方法的实现原理、优缺点以及关键API都被详细阐述,展示了DLL注入的完整步骤,并指出对于有驱动保护的程序,更高的权限注入技术是必要的。
1440

被折叠的 条评论
为什么被折叠?



