• 34阅读
  • 0回复

任鸟飞谈逆向----天涯明月刀抢摊位数据分析 [复制链接]

上一主题 下一主题
离线任鸟飞
 

对于很多游戏来说,摆摊的收入都是很客观的,而好的摊位也直接影响着摆摊的收益。以《天涯明月刀》为例,我们来分析下这款游戏的抢摊位辅助的相关数据。
抢摊位这个功能,我们要求的是尽量快,相同的摊位如果想比别人快,自然要通过调用发包来达到摆摊的效果,以下是摆摊包的分析
+0   00
+1   摊位名字UTF-8
+?选中代工数量
+?+0+x*?代工结构体编号
+?+4+x*?同类代工数量
+?+8+?*y+x*?代工ID
+?+C+?*y+x*?代工数量
+?+11+?*y+x*?代工价格
为了不对游戏产生影响,封包的重要偏移我们用?来代替
我们发现这里的有代工的相关信息,所以在摆摊之前我们还要对代工的相关做一个整理,以保证游戏可以正确发包
[[Base]+0xC]代工数组起始地址
[[Base]+0x10]代工数组结束地址
[[代工数组起始地址+n*0x14+0]代工结构体编号
[[代工数组起始地址+n*0x14+4]代工对象起始地址
[[代工数组起始地址+n*0x14+8]代工对象结束地址
[代工对象起始地址+0x14*m+0]代工ID
[代工对象起始地址+0x14*m+4]代工标志,是否选中 BYTE型  1为选中
[代工对象起始地址+0x14*m+C]代工价格
[代工对象起始地址+0x14*m+10]代工数量
有了游戏的封包,还需要有某个摊位上玩家的摆摊状态,而这个状态在玩家对象下也有存放,我们可以遍历到周围那些玩家在摆摊,如果想在某个玩家摆摊结束时立刻摆摊,那我们还需要调用一个特殊的走路CALL,因为这个CALL的内层有标志位被改写,如果不调用会直接被检测封号,而周围VM代码特别多,所以想分析到具体的某个标志位也不容易,直接调用即可。

这样我们就得到了抢摊位辅助所需要的数据,创建一个线程来循环读取要抢玩家的摊位状态,标志位变化立刻发包,就可以抢到该玩家的摊位。当然这只是一个理想化的情况,如果想要代码效率更快,抢的更稳,还需要将玩家状态变化改成收包获取,将明文包的调用改成send函数的调用,那样难免要分析封包加密和时间戳加密。


快速回复
限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个