把dll模块注入到游戏进程的方法_基于文件修改的注入方式

发布于:2025-04-22 ⋅ 阅读:(13) ⋅ 点赞:(0)

1、概述

      本文主要是介绍两种基于文件修改的注入方式,一种是“DLL劫持”,另一种是“修改导入表”。这两种注入方式都是利用操作系统加载PE时的特点来实现的,我们在实现这两种注入方式时只需专注于注入dll的实现,而不用花费额外的精力去关注注入器的实现。要想深入了解这两种方式,需要先对PE Loader的原理以及PE结构有所了解。

2、DLL劫持注入

2.1原理

每个PE文件都有一个“导入表”,pe文件在加载时,会优先加载“导入表”中的PE文件。进程在运行时,会从“导入表”中获取要加载的DLL的名称,然后按照指定的目录顺序去加载这些dll。“导入表”中有系统dll,也有程序自带的dll,因此dll劫持可再细分为系统dll劫持和程序自带dll劫持两类。

DLL在被加载时有个搜索顺序,当注册表HKLM\System\CurrentControlSet\Control\Session Manager键值下的属性SafeDllSearchMode的值设置为1时,DLL搜索顺序如下:(引用自 DLL搜索路径和DLL劫持_利用dll劫持网址-CSDN博客

      1、应用程序EXE所在的路径。

           2、系统目录。

           3、16位系统目录

           4、Windows目录

           5、当前目录

           6、PATH环境变量指定的目录

当SafeDllSearchMode的值为0时,dll搜索顺序又会变为:

       1、应用程序EXE所在的路径。

           2、当前目录

           3、系统目录。

           4、16位系统目录

           5、Windows目录

           6、PATH环境变量指定的目录

通过观察这两种模式下的搜索路径,我们会发现进程在启动时会优先加载该进程exe所在路径下的dll,因此我们可以通过替换应用程序exe所在路径下的dll或将注入dll改名为系统dll并放在应用程序exe所在路径下的方式来实现注入,即”DLL“劫持。

然而在实际的”系统dll劫持“操作中,我们会发现并不是所有dll都能被劫持,xp和win7及win7以后的系统劫持效果也有所不同。Win7及以后的系统增加了HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs 来拒绝部分系统dll被劫持。该注册表中的dll名称不允许被劫持,即系统dll劫持会失败。

 不过,微软又莫名其妙的允许用户在上述注册表路径中添加“ExcludeFromKnownDlls”注册表项,排除一些被“KnownDLLs注册表项”机制保护的DLL。也就是说,只要在“ExcludeFromKnow


网站公告

今日签到

点亮在社区的每一天
去签到