找回密码
 立即注册
查看: 240|回复: 0

从《原神》私服说Protobuf在游戏服务器中的缺点

[复制链接]
发表于 2022-5-31 13:54 | 显示全部楼层 |阅读模式
1.起因

这两天刷知乎,首页给我推荐了一个问题, 如何看待《原神》私服流行的现象?
这个问题的起因就是github上有人放出了原神私服的源代码,然后我就深入研究了一下在github上被放出来的Grasscutter这个项目。
Grasscutter这个使用Java重写的原神后端的逻辑代码,所以并不是那种真的后端源代码泄露。如果你有兴趣的话,你也可以破解王者荣耀的协议,然后重写后端代码。Grasscutter主要就是破解了原神Protobuf的网络通信协议,然后通过代理让你的游戏app连接到指定的Grasscutter私服,然后这个私服的逻辑代码是自己重新实现的。
现在市面上很多私服都是通过这种手段去破解的,很难根治。
我们都知道原神的游戏服务器用Cpp+Lua写的,所以这个Grasscutter这个项目和原神的后端没有太大关系,所以功能注定不是非常全面的,bug也不少。
所以大家要支撑正版。
------------------------------------------------------------------------------------------------------
2.Protobuf在游戏服务器中的缺点。

Protobuf这个大家都知道是google开源出来的一套跨平台的网络协议,使用范围非常的广泛,但是极其容易被破解。
甚至都不用破解Protobuf,google本身就提供了解析Protobuf二进制数据的工具,所以Protobuf本身可以说是一个透明的协议格式,只是可见度并不像json那也高,看Protobuf必须用工具转一下。
使用 protoc –decode_raw < 二进制数据,就会得到一串类似json的数据,这里我我说Protobuf是透明的协议,大家没有意见吧。网上有很多逆向解析protobuf的教程写的很详细,火线安全平台:protobuf协议逆向解析,我就不重复了。



protobuf协议格式

这张图是protobuf字段的协议格式,每个字段详细标明了位置,类型,数据内容,这就等于明确标识了你这段二进制每个字节代表了什么意思,这比地图还清晰!
也许互联网行业软件被破解没有关系,比如淘宝,京东,同花顺,东方财富被破解协议了,自己搭个私服你最多就自己玩玩,你买再多东西别人也不会给你发货,你的股票涨了多少也不会多取出一分钱。
但是对于游戏行业就意味着私服,收入大打折扣。
Protobuf还有一些其它的缺点,比如用C++写个大项目,一个proto文件得编译半小时,编译文件太大容易卡死,并不是所有语言都有无符号数。当然这些缺点并不是核心缺点,就一带而过不去重点探讨了。
-----------------------------------------------------------------------------------------------
3.那既然Protobuf这么容易被破解,那么一般游戏公司怎么去防止协议被破解导致私服泛滥的现象呢?

第一种是利用常见加密算法,诸如AES等算法,对响应数据进行加密。
第二种是自己的“私有协议”,自己编写的不开源的协议,进行数据序列化。
第一种,原神使用的是第一种,在protobuf上做了一层加密,但是这层加密既然只做了一个异或的运算,这种异或加密前后端都必须知道密钥,然后Grasscutter可能把原神untiy前端的包给拆了获得了这个密钥,也有可能直接看汇编代码,这种密钥不是私有的所以非常容易被拿到进而破解。现在其它大部分游戏公司是使用AES加密,把私有密钥放在后端,这样就不会轻易的被不怀好意的人拿到密钥了。使用AES要损失20%左右解密和加密的cpu运算的性能损耗,这个也是使用加密算法的一个缺点。
第二种使用自己的私有协议,有能力自己写,私有协议框架不多,可以看看这个:
zfoo的主要优点就是,协议可以自定义私有协议格式,让你的协议更加安全,支持增加字段和兼容前后版本协议。
zfoo是目前的Java二进制序列化和反序列化速度最快的框架,并且为序列化字节最少的框架
协议目前原生支持 **C++ Java Javascript C# Lua GDScript**,可以轻易实现跨平台
在没有任何JVM参数调优的情况下速度比Protobuf快50%,比Kryo快100%

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-13 06:22 , Processed in 0.132728 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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