自动化助手的添加(1 分析&接管)

需求:

为游戏增加VIP功能 - 自动化助手。游戏中原本的自动药水设定功能,如果是非VIP使用,则依然使用游戏原本自动药水功能,如果是VIP,则替换游戏中的自动药水功能为我们 提供的自动化助手功能

同时对于VIP修改菜单,自动药水设定为自动化[VIP]

对于非VIP,使用自动化药水功能时,弹出提示 ,可以开通vip使用高级的自动化助手功能

  1. 找到游戏本身的药水设定函数,跳转到我们自己的接口函数中
  2. 找到菜单字符串访问函数,搜索菜单文字是如何加载的,修改对应文字
  3. 找到游戏中的信息提示接口,实现显示我们想要的提示信息

自动药水设定的逆向分析:

在之前找到的虚函数按钮C7CE8D上下断

点击自动药水设定功能函数断下 F7 进入

自动化助手的添加(1 分析&接管)_第1张图片

这就是自动药水设定功能

但还要进行测试。

头部下断,发现这个函数是对应这一列按钮的 

自动化助手的添加(1 分析&接管)_第2张图片

所以这个函数就不是我们要找的函数,要找的函数就在这个函数的内部

自动化助手的添加(1 分析&接管)_第3张图片

 粗略一看这个函数,很像一个Switch的结构,把所有的菜单归集到了一起,每个菜单对应一个自己的处理方式。每段的下半段的eax都是一样的 ,所以核心就是上半段的函数,我们只要找到自动药水设定跳转到了哪个区域

这段寻址全是edx+5c  基本可以认为是同样的一个函数,就是调用了同样的一个虚函数,极有可能是调用了基类的某一个函数,基本执行的都是相同的功能

跟进去 这应该就是自动药水设定的功能了 ,测试发现 只有这个地方响应 应该就是这儿了

但按快捷键却不响应,我们要的核心功能应该还在这个里面。

这个区域有两个函数 ,要证明在哪就进去直接改ret 4.

发现自动药水设定功能失效了,所以下面的函数就没啥必要看了

进入这个函数,下断,测是不是共用的函数

测试发现,快捷键也调用成功了,但是在自动药水设定里按‘取消’也调用成功了。

但说明我们只要操作这个函数就够了

自动化助手的添加(1 分析&接管)_第4张图片

这个函数调用约定毫无疑问是类的成员函数,有一个参数,没有返回值

原型就是 void 0x1256E3C::X(int);  假定为int类型

 直接点击发现参数是1

 退出参数是0

点确定也是0

直接可以看出来参数为1的时候就是显示 0就是不显示

传进去的参数就是是否显示界面的参数

这个地方比较 我们可以知道这个是bool类型的参数

所以原型就是 void 0x1256E3C::ShowAutoHelp(bool showUI);

假设之前没有找到这个虚函数,就再通过UI来找这个函数

这个界面打开或者关闭 一定会有一个标志位来记录窗口的开关状态

首先假定BOOL四字节搜索0 1

如果不是再扩大范围

发现有好几个跟随变化,就要考虑共享,打开别的窗口来排除

自动化助手的添加(1 分析&接管)_第5张图片

 最终发现这几个,而且算法是往上面加一个1,这就试试能不能看下改写来确定位置了

显示:

自动化助手的添加(1 分析&接管)_第6张图片

隐藏 

 自动化助手的添加(1 分析&接管)_第7张图片

 直接打开x32dbg跟进去

往上多找几次

自动化助手的添加(1 分析&接管)_第8张图片

 发现还是可以触发,但不知道这是在哪层(可能还是偏底层的函数)

最好要在上层函数中才比较好,所以好事要往上找

多找几次

自动化助手的添加(1 分析&接管)_第9张图片

发现还是在初始化界面这里,所以还不是要找的地方..一直往前找 

自动化助手的添加(1 分析&接管)_第10张图片

然后追到了这,有分歧点的地方  按快捷键无效  点击有效,在从这往下找..然后和第一种方法一样找就行了。 

接管自动药水设定:

自动化助手的添加(1 分析&接管)_第11张图片

我们将这个函数删掉 在VEH中恢复

自动化助手的添加(1 分析&接管)_第12张图片

把这段消灭   运行也没啥问题

然后在这个函数恢复的地方做个HOOK,就能成功接管到这个函数了

你可能感兴趣的:(c++,安全)