游戏辅助脚本是如何实现的?

前两天搞家庭聚会的时候,看到表弟在玩天天酷跑,一玩就是一两个小时。

然后我自己也下载玩了几把,发现这个真的很考验玩家的反应力,尤其是初始人物角色只能跳两次,而且还要捡金币什么的。

后来突发奇想,捣鼓了下这款游戏的辅助脚本,看看能不能做到无限跳和自动吸金。

游戏辅助脚本是如何实现的?_第1张图片
由于之前我已经分析过了,所以下面就给大家看看一部分主要的实现代码。

当然,我是不会让表弟用的,以免影响其他玩家的体验,破坏游戏的平衡。

在这里说明一下,我只是想要测试分析并验证,其实游戏辅助实现起来都挺简单的,运用到的技术也都相差不大。比如棋牌、麻将游戏,知己知彼方能百战不殆,想要做到透视那也不难。

首先我们要用工具查找到要Hook的函数,进而搜寻真实函数,然后查找游戏辅助函数,最后就是分析修改这些游戏辅助函数来达到辅助脚本的实现。

游戏辅助脚本是如何实现的?_第2张图片

查找要 Hook 的函数

用工具打开XX助手里关于天天酷跑的游戏插件xxKPPlugin.dylib, 对 MSHookFunction 函数查找引用,会发现该dylib对符号名,也就是下面我们需要用到的函数进行Hook。
在这里插入图片描述

搜寻真实函数

用工具打开天天酷跑的二进制BreezeGame,搜寻上面这些符号所对应的真正函数,看下这些单词,我们基本能猜测到这些函数的作用。
在这里插入图片描述
无限吸金
BreezeGame::PlayerManager::IsCurMagnet(void) _ZN10BreezeGame13PlayerManager11IsCurMagnetEv

无限跳

不在导出函数里面,通过PatchMemory来实现的.

查找游戏辅助函数

用工具打开 xxKPPlugin.dylib,定位到 XXAssistControl 类, 可以看到的游戏辅助函数,我们只要需要的函数即可。

游戏辅助脚本是如何实现的?_第3张图片

辅助函数的实现

我们看到除了自动吸金和无限跳,还有其他函数,其实就是飞行距离,穿越等等。

这些游戏辅助函数的实现基本一致,比如自动吸金的函数

现在我们来分析修改函数changeisMagnet: 自动吸金

如下图:

游戏辅助脚本是如何实现的?_第4张图片

changeCJ:无限跳
无限跳和前面的不一样的地方,是要打开BreeZeGame,然后定位到该offset,这里是一个判断跳跃次数的地方,然后Patch掉就好。

如下图:

游戏辅助脚本是如何实现的?_第5张图片

其他功能也是基本一样的,修改内存属性为可写,然后填充你要patch的内容即可。

你可能感兴趣的:(游戏,技术)