[转] 学习外挂需要学哪些知识?
转自: https://www.zhihu.com/question/61336077/answer/684373535
作者:任鸟飞
链接:https://www.zhihu.com/question/61336077/answer/684373535
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
今天讲一下手游封包的分析
从分析过程上来讲,和端游的封包分析是类似的。我们同样可以通过send函数下断点,向外层返回来分析加密函数和明文函数。在分析封包的时候,有一些重要的信息需要我们去外层的函数中分析来源,下面我们以动态调试的方式来分析一下手游封包。
我们将真机连接电脑,搭建动态调试环境(如图)


静态加载要调试.so文件,对ARM汇编和函数进行分析(如图)


处理好动态调试异常,并加载手机内的游戏进程(如图)


这样我们就可以正常的调试游戏了,我们以这款游戏的进入战斗封包为例来进行分析。
首先来到游戏调用的send函数下F2断点,在游戏内做动作让游戏断下(如图)


向外层返回,可以得到调用send的函数(如图)


在返回的函数上下F2断点来分析send的参数,我们发现这里的封包是以明文的方式进行存放的,也就是说我们不必向外层返回去分析加密函数或者找到明文函数(如图)

对进入战斗封包进行截取,并对其进行粗略分析(如图)


这里的包长为0x62,我们更换出站卡牌的位置再次下断(如图)


我们发现封包内容从+24开始出现了变化,说明这部分应该是卡牌相关的信息,而其中有8字节的FF则会随着没有放入卡牌的位置变化,说明这可能是一个卡牌数组,里面存放的是对应位置的卡牌信息。
下面我们用同样的阵容,同样的位置,不同的副本再看一下封包信息(如图)


我们发现封包只有+12后面的2个字节发生了变化,其他位置都没有变化,说明这部分内容是和选择的副本相关的。
而我们回过头来对选择副本封包进行分析后,发现这部分封包的内容是固定的,也就说明这只是让我们进入一个准备战斗的界面,真正的进入哪个副本是从进入副本的封包中体现的(如图)


接下来我们就需要到外层函数中分析卡牌和副本相关的信息了。
按shift+F3,打开函数窗口,用ctrl+F搜索card关键字,可以得到一些和卡牌相关的函数(如图)


这里我们选择CPlayerData里面的函数,这是和游戏信息初始化相关的内容,在里面我们找到一个名为CPlayerData::GetCardInfo(int)的函数(如图)


下F2断点并在卡牌列表中点击任意卡牌,游戏会断下,执行到返回后来到GetCardSkillInfo函数内(如图)


我们在GetCardInfo上下断,观察参数和返回值,得出函数传入两个参数,其中R0为固定的地址,而R1则随着卡牌的获得顺序发生变化。函数执行完会返回一个卡牌的对象地址。(如图)(如图)




这说明在函数GetCardInfo内部是有一个遍历的数据结构存在的,我们到函数内部进行分析,可以得到如下的公式
[0xAB8+r0]+n0x370+0 卡牌ID,对象的前8字节为传入到进入战斗封包中的数据
这里的r0则为传入的参数1,而n为参数2
在函数外向上分析,可以很容易的得到r0来源于函数_ZN11CPlayerData10SharedDataEv的返回值,F5对这个函数进行观察,可以得出这个函数是游戏初始化相关的函数,在游戏刚刚启动时会new一个很大的空间来存放初始化信息,之后就不会再经过这片代码,而r0会来源于其内部的一个全局变量(如图)


接下来我们用类似的方法可以得到副本相关的信息。首先在函数列表中搜索FB关键词,并最终锁定CPlayerData::GetFbNodeInfo(int,int,int)这个函数(如图)


执行到返回后来到 CScriptFuntionPlayerData::GetFbNodeInfo(lua_State *)这个函数内部(如图)


下断对CPlayerData::GetFbNodeInfo(int,int,int)这个函数的参数和返回值进行分析后,我们发现第一个参数和卡牌的第一个参数是相同的, 第二个参数和第三个参数分别代表的大副本序号和小副本序号。而返回值则代表的是副本的对象,其中包括副本的ID和名字(如图)


我们可以通过传入要战斗副本的序号来获取副本的对象信息,并传入进入战斗封包中进行调用。
当然也可以对函数内部的数据结构遍历进行分析,来获取所有副本的列表。
这样我们对进入战斗的封包信息分析完全了,可以通过frida方式进行注入来进行测试。
------------------------------分割线-------------------------
本人每天需要讲课 ,会把每天讲的课以文章的形式整理出来。
本文章仅限于交流,如果本文章侵犯了贵公司权益,请联系我删除。
点赞是一种鼓励,转载是一种美德,分享能给我最大的动力,如有不足之处请予指正。
编辑于 2019-05-21
浙公网安备 33010602011771号