定位吃药call
在编写自动吃药功能之前还需要两个数据,一个是吃药的功能call,另一个是当前的背包遍历,我们先来找吃药call。

首先来到明文封包call头部

吃药让断点断下

返回上一层,这一层是明文的发包call,继续返一层到功能call

这里就是我们需要的吃药call。接着来分析call的参数
选择吃第7个药品

这个call的参数比较简单
- rcx是基地址
- r9是物品ID
- r8是物品在背包的第几个格子
- edx是当前背包的序号,1表示主背包,2表示装备栏
吃药call代码如下
| 48:8BC8 | mov rcx,rax | 基地址 | 45:8B4E 08 | mov r9d,dword ptr ds:[r14+0x8] | 物品ID | 44:8BC7 | mov r8d,edi | 物品在背包的第几个格子 | 8B95 18020000 | mov edx,dword ptr ss:[rbp+0x218] | 1 | E8 303DE5FF | call 0x7FF64CE19280 | 吃药call 代码编写
#define EatDrug 0xD39280 //吃药 //吃药call 传入物品ID和格子序号 void Fn_EatDrug(DWORD dwID, DWORD index) { GameCall4(g_PublicRcx,1,index,dwID,g_GameAddr+ EatDrug); } 封装一个物品ID和格子序号的参数即可,然后调用测试
//吃药call void MainWnd::OnBnClickedButton10() { Fn_EatDrug(0x12D, 9); } 实际效果:

找到了吃药call,下一节我们来完成背包遍历数据的查找,然后就可以开始写自动吃药功能了。
Github:https://github.com/TonyChen56/GameReverseNote
完整代码:https://download.csdn.net/download/qq_38474570/79498815
everseNote