吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7635|回复: 73
上一主题 下一主题

[游戏安全] 逆向在线游戏加密通信协议

  [复制链接]
跳转到指定楼层
楼主
发表于 2018-1-18 11:47 | 只看该作者 回帖奖励 |倒序浏览
本帖最后由 usualwyy 于 2018-1-31 11:31 编辑

看到有朋友在问工具名称,说一下用到的工具
API monitor + IDA + VS2017
在下菜逼,偶然得到一款韩国游戏的客户端和服务端,因为个人兴趣想开个sf,然而架设部署过程中发现缺少一个关键组件:游戏负载均衡网关,这个组件负责在客户端连上之后给客户端提供环境变量信息,以及分配游戏服务器IP,这本应该是服务端的一部分,然而却缺失了。
本来想找人逆向,身边朋友问了一圈,淘宝找了一圈,一万都没人干,我去,只好硬着头皮自己撸起袖子干。
搞了一个礼拜终于完工,分享一下中间的过程。
一步一步来:
1.修改客户端IP指向。
客户端下载回来,要想仿制服务端,首先要把客户端连接IP改成我自己服务器的IP,这样客户端连上我的服务端,这个应该不难。

我分析IP要不然写死在exe文件里,要不然卸载配置文件里。exe文件搜了一遍字符串,并没有搜到IP字符串,ascII和unicode都没有,那么看看有没有写着IP的配置文件:

New.dat和Version.dat都是音量大小,版本号之类无关紧要的配置信息,这个New.rst里面是不可识别字符串(俗称乱码)

长度正好是16的倍数,我怀疑是AES之类的block加密算法,因为要对齐block,所以长度是0x10的整数倍(时候发现block不是16是2,唉,算是蒙对了),为了验证我的想法,跑一遍游戏,监视系统API调用和自带的dll调用,大致看一下游戏外部调用的流程:



选上Networking相关和加密相关(系统自带的加密API都是从ADVAPI32.dll里导出的),以及自带dll,然后游戏跑起来走一遍。
跑完成了两万多个call

exclude掉几个出现太频繁的,先找connect:

找到connect,那么如何获取到这个IP,一定在connect之前,既然我怀疑IP是从被加密的配置文件里来的,那么就重点看加密API
顺着connect网上找,果然,找到了

根据api call看参数,密钥、交换算法、hash算法、block size都写在里面,照葫芦画瓢写个加解密程序,最终成功解密New.rst:

明文IP和端口号都在里面,不过显然,这个文件是有数据结构的,不管怎样,IP指向算是搞定了,继续下一个环节。

2.分析通信协议,研究他如何加密的,如何封包的,包内结构如何。
这部分是耗时最多的,首先抓包看一下,

这两个包都是分两次抓取、通信开始时的第一个包(目测握手包,或者say hello 之类的),这里可以看出来,相同类型的的包,包头和包尾一样,中间不一样的部分应该就是经过加密的包体,因为每次不同,可以判断明文中加入了时间之类的随机字符串,这个情况想重放是不可能了,只能老老实实逆向他协议了。
下面就是要找到他数据包的结构,和加密方法,来看一下主程序的导入表:

这几个函数从字面意义来看跟加解密关联很大,这个时候不急着分析dll,先回到捕获的API调用,看看调用顺序

这写信息非常关键,我们可以根据外部接口调用顺序看出来,包是经过如下流程解密的
tryDeserializeIncomingPacket ->tryDeframeIncomingPacket ->Decrypt ->crc16 ->Decode
中间经过crc16这个步骤,可以说明数据包中某个部分有校验码,这个等会儿再说,下面该IDA出场了,一个函数一个函数分析
1.tryDeserializeIncomingPacket:

函数内容比较简单,直接把参数传给另一个函数,目测就是进了tryDeframeIncomingPacket ,具体怎么样开debuger跟踪就知道
在call下断,跑起来停在这个call,step in跟进去,果然是进了tryDeframeIncomingPacket

不过这边也没什么实际作用,继续进下一个call


这边虽然点了analysis module,然而不知什么原因IDA的分析没有起作用,猜测有可能是因为从静态分析的dll换到了另一个内存中加载的dll的领空,那么重新加载tryDeframeIncomingPacket所在的dll
现在IDA顺利分析出来了函数结构,经过反反复复的调试,tryDeframeIncomingPacket前半段代码如下

根据分析真个数据包的格式如下:
923E(包头标识) + ServiceID(用来判断数据包的作用,然后进行相应回调) + 包长度 + 02 00(作用不明,不过是固定的) + CRC16(用来校验包体) + 包体 + EC3E(包尾标识)
继续往下看,包体如何解密


解密包体使用的是一个叫CRijndael::Decrypt的函数,Rijndael是AES的别称,CRijndael我猜测是用C写的Rijndael,这应该是一个第三方组件,到google查查看

哈哈,这不就有了,经过一番寻找,找到了CRijndael的代码,还是老办法,照葫芦画瓢,先看看主程序的API调用,把key找到

生成密钥的函数MakeKey在主程序初始化阶段就调用了,可见这个key是全局使用的,后面不会发生改变,所以一开始就Makekey,现在可以开始画瓢了
把代码下载回来一番修改编译, 跑一遍

解密的结果跟游戏程序自己解密的结果完全一样,这下加解密包体就算是ok了。
协议逆向部分最后还剩一个问题,CRC16校验码,这个问题刚入手感觉很简单,CRC16校验码的算法github上要多少有多少,没想到代码下回来跑了一遍发现个大问题
传入参数一模一样,但是生成的校验码跟他完全不同,这个地方花了很多时间研究,最后发现问题在这:


这个crc16是个查表算法,原来网上下到的crc16的表跟他的表不一样,继续IDA跑起来把

左边是汇编,右边是github上的crc16,一目了然,顺利找到256字节的table,替换进源代码,这次返回的CRC16校验码总算是对了
到此为止,加密协议分析就算是完成90%,剩下10%是明文包体的数据结构,这部分主要跟程序的业务相关,就不在这多说了。
最后根据协议的结构和加密算法,我写了一个游戏网关服务端,一万块都没人干的工作自己干了,爽。。。

感谢各位看官,欢迎大牛指点交流

点评

这个6,学习了  发表于 2018-1-22 20:43

免费评分

参与人数 39威望 +1 吾爱币 +55 热心值 +45 收起 理由
buaaliang + 1 + 1 热心回复!
太冲 + 1 + 1 谢谢@Thanks!
PiKa + 1 + 1 我很赞同!
o不懂爱的魂o + 1 + 1 热心回复!
/bq + 1 + 1 谢谢@Thanks!
lzzs + 1 + 1 看的热血澎湃
dreamHacker + 1 + 1 666,学习了,谢谢楼主和网关
八云紫轩 + 1 + 1 谢谢@Thanks!
liphily + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
XhyEax + 1 + 1 dalao
Jaymmz + 1 + 1 谢谢@Thanks!
sultan.sutuq + 1 + 1 牛人呀,收徒弟不?
WYWZ + 1 + 1 用心讨论,共获提升!
mj2013ly + 1 + 1 热心回复!
既定事项 + 1 我很赞同!
?﹏從此沉默 + 1 + 1 热心回复!
爸爸我要吃狼 + 1 热心回复!
nickall + 1 + 1 dalao厉害
sec0ces + 1 + 1 我很赞同!
ZHANGWUGUANG + 1 + 1 热心回复!
AlanTR + 2 + 1 来学习撸起袖子加油干的精神
-1s + 1 + 1 谢谢@Thanks!
chenjingyes + 1 + 1 谢谢@Thanks!
B1aN + 1 + 1 我很赞同!
Ravey + 1 + 1 很好,学习了
Ganlv + 1 + 1 谢谢@Thanks!
sc4256 + 1 + 1 逆向分析思路很棒!!!
zhiyi1120 + 1 + 1 谢谢@Thanks!
一杯柠檬苏打 + 1 + 1 谢谢@Thanks!
wtzql + 1 + 1 谢谢@Thanks!
SomnusXZY + 1 + 1 谢谢@Thanks!
pojieboom + 1 + 1 热心回复!
12924869872 + 8 + 8 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
evill + 1 + 1 谢谢@Thanks!
L4Nce + 1 + 10 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
塞北的雪 + 1 + 1 图1是什么软件?
490694561 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
By丿安之若素 + 1 + 1 我很赞同!
mouse31rat + 2 + 1 好思路,APIdebugger节省很多工作量

查看全部评分

本帖被以下淘专辑推荐:

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

推荐
 楼主| 发表于 2018-1-19 18:17 | 只看该作者 |楼主
淡淡香草味 发表于 2018-1-18 19:29
帖子需要按此编辑一下 https://www.52pojie.cn/misc.php?mod=faq&action=faq&id=29&messageid=36

无字天书已恢复原型

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

推荐
 楼主| 发表于 2018-1-19 18:16 | 只看该作者 |楼主
gunxsword 发表于 2018-1-18 19:24
没有编辑过,也没有被改过,你这啥内容没有,发出来是骗CB的吗?请版主处理......

是你功力不够,导致看不到

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

板凳
发表于 2018-1-18 19:14 | 只看该作者

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

报纸
发表于 2018-1-18 19:24 | 只看该作者
没有编辑过,也没有被改过,你这啥内容没有,发出来是骗CB的吗?请版主处理......:@

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

地板
发表于 2018-1-18 19:29 | 只看该作者

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

7#
发表于 2018-1-18 19:29 | 只看该作者
??? 原创空白版面?

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

8#
发表于 2018-1-18 20:15 | 只看该作者
看的不是很懂  

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

9#
发表于 2018-1-18 20:36 | 只看该作者
无字天书

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

10#
发表于 2018-1-18 20:53 | 只看该作者
打开方式有问题吗?怎么啥也看不见

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

11#
发表于 2018-1-18 21:36 | 只看该作者
只是有一个标题就没了吗?

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

12#
发表于 2018-1-18 21:38 | 只看该作者
怎么什么也没有???

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则


免责声明:
吾爱破解所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Service@52PoJie.Cn

快速回复 收藏帖子 返回列表 搜索

RSS订阅|手机版|小黑屋|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2018-2-19 10:00

Powered by Discuz!

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表