免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
本次游戏没法给
内容参考于:微尘网络安全
上一个内容:43.第二阶段x64游戏实战-封包-代码实现获取包裹物品
之前的内容找到了掉落物的物品id,然后想实现自动捡包,还需要一个东西,就是打开掉落物列表,之前说掉落物列表id在遍历周围里可以找到,但是有一个问题,游戏中点击掉落的物品然后打开掉落列表,打开的动作发送了数据包,这里就有一个问题,光有数据包不行,打开的时候游戏会把当前打开的掉落物列表的id放到一个内存地址(当前掉落物列表),如果我们光发送数据包没有给这个内存地址写东西,游戏就可能会崩溃,所以还要解决这个问题,这个问题从拾取的封包往上找,就是说捡物品的时候会有掉落物列表id,然后我找这个id的值在哪来的就可以了
下方是抓的最新打开掉落物列表和捡包的数据包(后面要用它)
3400040000 E9 92260000
AC000C0000 EB 92260000 271E00002900EF4E
AC000C0000 EC 92260000 271E00002A00EF4E
AC000C0000 ED 92260000 271E00002B00EF4E
AC000C0000 EE 92260000 271E00002C00EF4E
AC000C0000 EF 92260000 271E00002D00EF4E
然后打开x64dbg,如下图来着之前找的捡包函数
下图红框位置是掉落物列表id,下图红框位置怎么就是掉落物列表id了?因为它前面是1E27,上方271E00002D00EF4E,然后271E由于小端序问题在内存中的样子是1E27,然后271E00002D00EF4E的前面也就是 92260000 是掉落物列表id,这个之前确定的,所以下图红框位置就是掉落物品列表id,注意这个掉落物列表id在偏移0x18位置,然后就看rdx的值哪来的
如下图红框rdx的值来自于rbp-0x58,然后rbp-0x58+0x18也就是说rbp-0x40位置是掉落物列表id
然后找rbp-0x40位置的值哪来的,如下图红框rbp-0x40的值来自于eax,eax的值来自于上方的call
然后在下图红框位置打断点
然后捡物品触发断点
取消断点
按F7进入call,eax的值来自于rcx+0x182A4
然后观察它的值,可以看到它的值直接就是掉落物列表id
切换掉落物列表
rcx的值来自于基址
0x00007FF737CDB840 - 0x00007FF737390000 = 0x94B840
然后下图红框的call是一个虚函数,所以用的时候不能直接 rcx+0x182A4,要用的值rcx+0x1A8加0x2位置的数据
rcx+0x1A8的值加0x2位置(加完后是内存地址,需要取内存地址的值)是下图红框位置