游戏安全实验室 首页 技术入门 查看内容

 阅读目录

协议获取

发布于:2017-12-28 14:59   |    94329次阅读 作者: 管理员    |   原作者: TP

协议分析是游戏漏洞挖掘的关键,确定游戏的协议是漏洞挖掘的前置条件。游戏客户端与服务器间通过事先定义的协议进行通信。只不过通信的数据往往被加密后,难以从信道上直接获取有效信息清楚数据打包的过程,便是协议获取的关键。打个不恰当的比喻,未学习其他语言基本知识时,我们很难听懂外国人对话的,此时了解了加密过程,就好比将他们的对话翻译成国语,了解了序列号过程,就好比知道了他们的断句,了可读懂的语言,再加上断句,我们就能清楚的知道他们每一句话的意思。协议分析也是这个道理,其分析的关键便是弄清楚明文数据和序列化过程。。

一般协议的明文buff分析从游戏的socket连接开始进行逆向分析,借助2.1.5提供的网络工具,可以清楚的了解到游戏使用的tcp/udp链接,然后针对性对send/sendto, recv/recvfrom断点进行逆向。部分游戏因为自身的复杂性,可能会有多socket连接,一般我们可以通过分析每一次数据交互过程,进一步确定游戏选择的是哪个socket进行数据传输。

更加清楚的说明协议分析的过程,笔者选取一款游戏进行说明。首先通过net-peeker发现游戏仅仅采用了TCP链接OD附加后直接对send下断,发现游戏有多个调用地址调用了call,于是分析每一次send的参数,在游戏内进行网络操作时,拦截到如下截图

上图可知,游戏大部分数据传输选择了0x674这个套接字,进一步回溯堆栈结合数据下访问断点,最终确认到游戏的明文发包函数

获取到了明文buf点时,需要进一步分析游戏的序列化过程,不同的游戏采取的序列化过程不相同

会调用通用的序列化函数,如调用类似与write函数,向buf里传入写入的数据和参数

有的更为直接,直接调用类似write_byte, write_word, write_dword, write_qword函数,不同的函数写入不同的数据

还有的并没有直接调用序列化函数,而是传入了一个结构的指针,通过解析这个结构就可以得到各个数据的偏移和大小

分析思路上,基本都是协议明文buf前后,进行回溯分析确定序列化过程。常见的如对数据buf下访问/写入断点后,再次进行堆栈回溯,对明文发包点下断,堆栈回溯观看函数调用顺序,也可以分析数据是如何进行填充清空的,最终确定游戏的序列化过程。分析涉及到的逆向知识较多,这里不再一一描述



 *转载请注明来自游戏安全实验室(GSLAB.QQ.COM)

分享到:
踩0 赞0

收藏

上一篇:编程环境

下一篇:协议分析

最新评论
引用 月魂 2017-12-28 11:32

查看全部评论(1)

B Color Image Link Quote Code Smilies

发表评论