Reloaded-II与Special K本地注入模式冲突的技术分析

Reloaded-II与Special K本地注入模式冲突的技术分析

【免费下载链接】Reloaded-II Next Generation Universal .NET Core Powered Mod Loader compatible with anything X86, X64. 【免费下载链接】Reloaded-II 项目地址: https://gitcode.com/gh_mirrors/re/Reloaded-II

背景介绍

Reloaded-II是一款功能强大的游戏模组加载框架,而Special K则是一款广受好评的游戏优化工具。当两者同时使用时,在某些特定配置下可能会出现兼容性问题。本文将深入分析当Reloaded-II与Special K本地注入模式结合使用时导致加载失败的技术原因及其解决方案。

问题现象

当用户同时使用Reloaded-II和Special K时,如果满足以下三个条件,则会出现加载失败的问题:

  1. 通过Reloaded启动器启动游戏
  2. 采用Special K的DLL劫持方式(即"本地注入"模式)安装Special K
  3. 游戏包含Steam嵌入式DRM(.bind段)

此时系统会报错"Failed to Load Reloaded-II",错误信息显示在尝试重新编码新地址的代码时遇到了无效指令。

技术原理分析

Reloaded-II的加载机制

Reloaded-II启动游戏时采用了一种特殊的加载流程:

  1. 以挂起状态启动游戏进程
  2. 注入启动器DLL
  3. 注入的加载器加载所有模组
  4. 恢复进程执行

这种设计使得用户模组可以在任何游戏逻辑运行前执行。对于包含Steam DRM的游戏,由于游戏代码在启动时是加密的,模组无法直接应用钩子。

Reloaded-II的DRM绕过方案

Reloaded-II采用了一种巧妙的方案来处理Steam DRM:

  1. 读取预定义的库入口API列表
  2. 通过导入表检查哪些库已加载
  3. 钩住所有这些API,使用特定的存根代码
  4. 在回调中初始化加载器并移除所有钩子

这种方案之所以有效,是因为Steam DRM会在原地解密代码且不会调用外部API。

Special K本地注入的问题

当Special K以本地注入方式安装时(如作为d3d11.dll),问题就出现了:

  1. Reloaded调用GetModuleHandle和GetProcAddress获取函数地址
  2. 对于某些Special K导出的函数,返回的实际上是函数指针而非函数代码本身
  3. 这些指针位于.data段,默认权限为读写而非执行
  4. 当Reloaded尝试在这些地址上创建钩子时失败

解决方案

Reloaded-II端的修复

Reloaded-II可以通过增加内存页权限检查来解决此问题:

MEMORY_BASIC_INFORMATION mi;
VirtualQuery(pAddress, &mi, sizeof(MEMORY_BASIC_INFORMATION));

const bool bIsExecutable = 
    (mi.State == MEM_COMMIT && 
    (mi.Protect & (PAGE_EXECUTE | PAGE_EXECUTE_READ | 
     PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY)) != 0);

如果地址不满足可执行条件,则不进行钩子操作。

Special K端的优化

从设计规范角度,更彻底的解决方案是修改Special K的导出方式:

  1. 移除不必要的私有DLL符号导出
  2. 确保导出的函数包含实际的代码而非指针
  3. 对于x86平台,可以使用相对跳转指令
  4. 对于x64平台,可以使用绝对跳转指令

这种修改虽然会增加少量DLL体积(约600字节),但能从根本上解决问题。

总结

Reloaded-II与Special K本地注入模式的冲突源于两者对函数导出的不同处理方式。通过增加内存权限检查或规范导出函数实现,可以有效解决这一问题。这也提醒我们,在开发类似工具时,应当遵循更严格的API设计规范,确保导出的函数地址确实是可执行代码。

对于普通用户,如果遇到类似问题,可以暂时采用以下解决方案之一:

  1. 使用Special K的全局注入模式而非本地注入
  2. 使用工具移除游戏的Steam DRM保护
  3. 等待相关工具的更新版本发布

【免费下载链接】Reloaded-II Next Generation Universal .NET Core Powered Mod Loader compatible with anything X86, X64. 【免费下载链接】Reloaded-II 项目地址: https://gitcode.com/gh_mirrors/re/Reloaded-II

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值