DLL注入的多种方式

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

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值