发布于:2017-12-5 10:59 | 147175次阅读 作者: 管理员 | 原作者: 外部投稿
对于很多游戏来说,摆摊的收入都是很客观的,而好的摊位也直接影响着摆摊的收益。以《天涯明月刀》为例,我们来分析下这款游戏的抢摊位辅助的相关数据。 抢摊位这个功能,我们要求的是尽量快,相同的摊位如果想比别人快,自然要通过调用发包来达到摆摊的效果,以下是摆摊包的分析 +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函数的调用,那样难免要分析封包加密和时间戳加密。 来源:外部投稿 |
最新评论
发表评论