Windows Ring3层注入——注册表注入(五)

注册表注入原理

在Windows NT/2000/XP/2003操作系统中,当需要加载user32.dll的程序启动时,user32.dll会加载注册表键HLM\Software\Microsoft\WindowsNT\CurrentVersion\Windows\AppInit_Dlls下面列出的所有模块。

根据这个条件,外挂可以将外挂模块所在的路径写到AppInit_Dlls键下,待游戏进程启动并将外挂模块带入之后,再删除AppInit_Dlls键的值以清除痕迹,其核心函数如下。

注册表注入函数原型

   #define DSTKEY "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Windows"
	//打开主键
	RegOpenKeyEx(
			    HKEY_LOCAL_MACHINE,
			    DSTKEY,
			    0
			    KEY_ALL_ACESS,
			    &hKey);
	//设置AppInit_DLLs键的值,其中“cDllPath”为待注入DLL的路径
	RegSetValueEx(
				hKey,
				"AppInit_Dlls",
				0,
				REG_SZ,
				cDllPath,
				strlen((char*)cDllPath)+1
				);

注册表注入步骤:

注册表注入可以通过代码实现,通过代码改变注册表键值就可以,在此介绍手动改变键值,进行注入。

下面示例过程需要在Windows 32位或Windows XP

1.使用编译器编译成DLL文件
2.打开regedit.exe,进入如下路径:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows
编辑修改AppInit_DLLs表项的值为我们编译的DLL所在的路径地址
3.注册表项修改完毕后,重启系统,使修改生效。重启完毕后,我们使用Process Explorer查看DLL是否被注入进程。

测试的DLL文件源码RegeditInjection.cpp

// RegeditInjection.dll
 
#include <windows.h>
#include <tchar.h>
 
#define DEF_PROCESS_NAME "cmd.exe"  // 目标进程 cmd.exe
 
BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD dwReason, LPVOID lpvRevered) {
	char szPath[MAX_PATH] = {0, };
	char *p = NULL;
 
	GetModuleFileNameA(NULL, szPath, MAX_PATH);
	p = strrchr(szPath, '\\');
 
	switch( dwReason ) {
		case DLL_PROCESS_ATTACH:
			if( !_stricmp(p + 1, DEF_PROCESS_NAME) )
				MessageBox(NULL, TEXT("Hello cmd!!!"), TEXT("info"), MB_OK);  // 被进程加载时弹出MessageBox("Dll Inject Success!!!")
			break;
		case DLL_PROCESS_DETACH:
			if( !_stricmp(p + 1, DEF_PROCESS_NAME) )
				MessageBox(NULL, TEXT("Goodbye cmd!!!"), TEXT("info"), MB_OK);  // 被进程卸载时弹出MessageBox("Dll unInject Ok!!!")
			break;
	}
	return TRUE;
}

1.使用编译器编译成DLL文件
在这里插入图片描述
2.打开regedit.exe,进入如下路径:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows
编辑修改AppInit_DLLs表项的值为我们编译的RegeditInjection.dll所在的路径地址
在这里插入图片描述
3.注册表项修改完毕后,重启系统,使修改生效。重启完毕后,我们使用Process Explorer查看RegeditInjection.dll是否被注入进程。

注册表注入优缺点

优点:

简单,易于实现

缺点:

第一,系统重启后才能实现注入,且对DLL的稳定性要求较高。建议只在虚拟机里试用,因为DLL写得不好会造成BSOD(蓝屏),连安全模式也进不去。第二,易于被像ProcessMonitor这样用于监测注册表操作的软件记录,进而被安全分析人员发现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值