如何操作加载许多 dll 的游戏

逆向工程 dll注入 注射
2021-06-30 16:59:20

我正在玩一个用 CryEngine 制作的游戏。这是一个 MMORPG,但我发现我可以通过作弊引擎操纵我角色的 X/Y/Z 坐标。而且我还发现我可以通过改变记忆中的值来切换目标敌人。

这个游戏由一个launcher.exe和许多dll组成。其中之一称为 CryGame.dll,我猜是其中的大部分游戏代码。我对保存目标敌人的内存进行了指针扫描,但是大多数存储我想要的内存区域的指针链都保存在 CryGame.dll 中。

现在我的问题是:是否可以将代码注入 CryGame.dll 或类似的东西以获取该内存区域并对其进行操作(我正在尝试为自己制作一个简单的机器人)。

或者有人有其他想法如何获得这个价值?通常我会简单地在游戏进程中注入一个 dll 并对其进行操作,但是由于这个游戏是由 dll 组成的,我无法真正挂钩函数,因为每次重新启动游戏后 dll 都会更改地址,对吗?

希望你明白我的意思,对不起我的英语。

1个回答

您当然可以像挂钩任何其他函数一样挂钩 dll。要获取 dll 函数的地址,您需要调用两个 Windows API。

首先,您需要获取您尝试挂钩的模块的地址/句柄(在讨论加载的模块时这些是相同的)。获得它的一个简单方法是调用LoadLibraryGetModuleHandle最大的区别是GetModuleHandle不会加载 dll,以防它尚未加载,null而是返回您可能可以使用 自己加载 dll LoadLibrary,因此这两个 API 都是有效的。

其次,你需要让你感兴趣的函数的地址,你可以使用任何的返回值GetModuleHandle或者LoadLibrary作为DLL的当前位置,并计算具体的使用它的某些功能失调。或者,您可以调用GetProcAddress以获取由 DLL 导出的任何函数的地址。

请记住,还有其他方法可以修改 dll 的行为:

  1. 您可以在磁盘上修补 dll(假设没有使用完整性检查)。
  2. 您可以使用 DLL 重定向创建DLL 代理