《游戏安全与逆向》Cocos creator【2.x&3.x】游戏项目资源加密与方法 | 社区征文

各位游戏开发者同僚们,我想你们一定不想自己的游戏上线后被Crack利用、破解的吧?
或许你有想过,通过各种技术手段再一定程度上减少损失,但还是会被XX掉
在开始之前我先给大家介绍写提纲~
1.了解并知晓 | Crack如何一步步破解你的资源,并利用的
2. 加密的手法 | 针对不同的需求运用不同的技术
3. 科普时间 | 预判他的预判从而让自己预判
4. 做点手脚 | 在游戏包中下暗雷、暗桩、树人
5. 安全等级划分 | 敌人诡计多端,应当逐一当断! :rofl:

【1.了解并知晓】
好戏开始了!首先先介绍一下各种Crack者
初级:
1.利用apktools 对 你的APK/APP 进行解包 | IOS 只需要改后缀为 .zip即可
2.将游戏工程目录拷贝出来,查看所有工程资源即可
3.如果有加密(图片、代码)在利用脚本、工具解密(通为市场流动的)
初级举例图:


描述:该游戏的资源都没有进行加密,而且内容很多

中级:
1.利用apktools 对 你的APK/APP 进行解包 | IOS 只需要改后缀为 .zip即可
2.将游戏工程目录拷贝出来,查看所有工程资源即可
3.如果有加密(图片、代码)在利用脚本、工具解密(通为市场流动的)
4.如果加密无法现成解密则=>手动对其解密


描述:该游戏的资源核心部分加密,以至于被找到漏洞口,从而全员丢失

高级:
1.利用apktools 对 你的APK/APP 进行解包 | IOS 只需要改后缀为 .zip即可
2.将游戏工程目录拷贝出来,查看所有工程资源即可
3.如果有加密(图片、代码)在利用脚本、工具解密(通为市场流动的)
4.如果加密无法现成解密则=>手动对其解密
5.解剖代码拷贝出js部分代码,进行解密还原,然后改写换皮,市场流通


描述:该游戏资源全部加密,不过是用了官方的 md5混淆。该方法一样可以被破解,还原名称回去
不过代码部分为JS 加密。还是很弱。。

建议大家用我推荐的 加密方式 ! 在本文章 3,4阶段中会做描述介绍。

【2.加密的手法】
:star:[1星]
方法名:远程资源(res)
运行时: apk/app 游戏包的资源通过远程服务器获取到,而在获取时需要交换token才能取得资源文件
优点:使应用程序加快访问和下载速度,最简单的项目优化和加密手段
缺点:如果觉得这种加密可以称为加密,那真的是大聪明。

:star::star:[2星]
方法名:异或暗调(res)
运行时:apk/app 该类游戏通常会有预加载场景,运行到此时不论资源存储在哪里,它一定会对所有图片资源进行异或反调。使得之前不可查看的方式变为可查看、可使用。
优点:可以防御 初级Crack 同时项目结构看起来清晰有序
缺点:预加载时间很长,在打包时要解决很多问题

异或暗调(res)加密方法:


建议:如果是个人游戏或小工程,含金量不大就用这种足够

:star::star::star:[3星]
方法名:Aes秘钥加密(res、js、cpp\lua)
运行时:apk/app 游戏包的资源 每次运行时被该头文件库 进行解码
优点:可以防御 初级Crack中级Crack
缺点:资源加载的时间变得更长了一些,同时在CC中,可能库引用不当会出现很多意料外的问题

Aes秘钥加密(res、js、cpp\lua)加密方法:
可以参考这篇文章来学习写法
CSDN: AES加解密之C++实现
https://blog.csdn.net/lixiang987654321/article/details/109009397

:star::star::star::star:[4星]
方法名:Audio dk加密(res、js、cpp\lua、音频)
运行时:apk/app 游戏包的资源在首界面启动时,才会开始释放所有被加密的资源。且释放出的内容为缓存文件,对用户不可见、不可使用。即使搜索到也全都是无法打开的音频文件或被损坏的文件
优点:1.可以防御 初级Crack中级Crack高级Crack
缺点:该加密方式为国外圈内捞金行业内使用的方法
1.使得游戏会消耗大量性能资源,且运行速度缓慢
2.硬件需求很高(手机设备、网络)

Audio dk加密方法非常抱歉,我不会写。我只懂得破解。有需求的朋友可以顺着这个逻辑自己去进阶

:star::star::star::star::star:[5星]
方法名:odBat加密(res、js、cpp\lua)
运行时:apk/app 游戏包的资源在运行调用时,才会被解密在设备内存中(缓存)。且资源全部以Aes秘钥进行加密。如果crack操作不当,则直接会中圈套;
优点:可以防御 初级Crack中级Crack高级Crack大神级Crack
缺点:同样的该加密方式也是国外圈内使用的方法
1.使得游戏会消耗大量性能资源(手机发热很快=》掉线、卡退)
2.硬件需求很高(手机设备、网络)

odBat加密方法:依赖前面的几种方式,只是它多了一个手脚模式。不过这种方式可以效仿借鉴!

【3.科普时间】
有许多CC开发者,不会加密,或者加密的方式过于简单。
还有一些加密很繁琐,外行看起来就很复杂!在Crack面前无卵用的加密手法。
防御,要先知道对方想要攻击你哪里。才能加强自己的技术,保护自己的知识。
先来了解一下破解者,拿到你的程序后,都会做什么吧
1.遍历一遍所有目录,看看代码和资源。(高效的算法、特效、逻辑或,资源利用)
2.有无重复利用的价值(二开换皮,上线这种)
3.倒卖你的游戏
4.查看代码,找到api接口处,渗入后端(攻击、恶心、敲竹杠、妨碍你)
个人觉得,前面3者到还好,最后一种就很恶心了,对方不仅拿了你的东西,还要阻碍你的游戏运营或者。。。所以,防御的手段是必须需要的。而且一定要趁早!针对自身的项目,采取对应的加密方式。
不是哪种高级就用哪种。 “知晓痛楚,了解痛楚,感受痛楚”—佩恩说的
我们都有这个痛楚,接下来针对以上第4点,科普一下API防御
api接口如何防御?不论后端是java\cpp\node\php
api攻击方式分为:

  1. 疯狂请求(拒绝服务) 拉爆你的服务器延迟
  2. 回执请求(访问服务) 我发1个1,你要回我64个1
  3. 探测请求(索引目录) 不停的给你全身检查,消耗后端性能
  4. 验证码请求(反正不是我的钱) 不停的消耗你的验证码次数
    socket类:
  5. 垃圾填充(垃圾服务) 在大厅聊天系统中塞入乱码、编码 填充你的数据库
  6. 伪劫持(Ludp)截获自身与服务端的数据,改写其内容长度内容
  7. 要塞炸弹(Rmd2p)将事先写好的炸弹程序拷贝其核心底层编码,将其压缩成最短字节。然后通过socket某一项连接处,发送过去。一旦服务端接受。服务端会直接试图理解内容。然后就卡崩了。

api防御模式分为:
防御请求:做好验证机制,例如限制每IP时间段请求次数
防御探测:有专门的方探测工具和插件,装一个。服务器最好是linux,防火墙端口的放行进出很重要
防御垃圾:对内容限制长度和大小即可
防御验证码:同样做好验证,选用靠谱的第三方
防御要塞炸弹:对于匿名方、密文内容异常的包要做筛选接受验证的。

【4.做点手脚】
在游戏开发时、完成时都可以在代码内做些手脚
比如:

  1. 利用Aes加密方式,但cpp/lua文件中不包含token,需要通过socket首次接通时获取到,然后再对其资源进行解密。
    注意:这里可能会被劫持socket内容,来查看你的报文。
    加强防御:为你的socket内容,加密其内容,保护交互的token。
    安全算法:sha1,sha512 其次sha256 , sha384
    补充:sha256,sha384以均被本人破解过,未公布详细解法

  2. 利用Audio dk加密方式,能够非常有效的保护你的所有文件资源,同时非常考验Crack的耐心,但难免有些异常专注的人就是想一探究竟。 你还需要掌握一定的Bit语言基础,来对你的加密后的资源进行扰码加密
    注意:前身的资源文件被解密后,audio格式的文件将会被打回原形!一定要留第二手[扰码]
    加强防御:扰码是指将被加密的文件中写入一定的格式化乱码
    var decode=[64][64][64][64]
    每隔多少段,放入多少乱码。或乱码数值随机化,无规律。

【5.安全等级划分】
最后根据不同的项目等级,这里为大家推荐安全架构方式

项目团队安全架构
image
注意点:防御好api接口处


注意点:防御好api接口处,在遇到攻击时,查看log日志是不错的问题排除方式

对于大型开发团队,建议前端资源加密采用 3.Aes加密(128位) .5 odBat加密方式
为什么不推荐第4种(Audio dk加密)
PS:已经是有许多作品的团队了,要考虑用户感受,第4种对用户很不友好,如果目标用户群体质量很高是可以考虑。 而且这种加密方式较为难实现,所以不是很推荐

最后感谢大家观看我的文章,希望以后各位开发的游戏大火!同时也希望Cocos 快点出新版本!
我是大菠萝!大大大大!菠萝!萝 :pineapple:

46赞

收藏了! :ok_hand:

做h5以来只把代码混淆了,其它没干… :sweat_smile:

给大佬点赞!

这太干货了,收藏收藏

赞!赞!赞!

大佬牛皮plus

这种能防得住hook openGL 的Api 接口吗?

我只能说我之前看过直接读内存的方式取图片资源

1赞

源代码是重点,源代码沦陷了什么花里胡巧都是百搭,源代码保护得好,就是当你面最简单的对称加密也不怕破解。另外不要想着能固若金汤,矛总比盾强,产品设计护城河、法律武器才是最有效的

源码一样可以被同种方式加密,或其它方式,这只是一个提议苗头。 另外你靠法律武器 维护自身权益是需要 金钱和时间的。 产品设计重点是很对

不是否认你这个加密的意义,只是说加密也要顾及代码,不然就没那么好效果了,纯粹补充说明,加密的意义是让对方破解成本大于收益就算成功了。

总的来说我觉得资源还是比较难保护的,我之前有“借过”别人资源(做DEMO用,没有做产品),整套下来感觉还是水来土掩的感觉,没有遇到什么解决不了的障碍。
所以总体感觉如果自己有一套成熟的或者大佬写好的可以用,特意去设计一套感觉有点花成本划不来。

好了废话说完其实就一句:哪位大佬写一套开源 :rofl: :rofl: :rofl:

感觉你这个贴子直接拉一个项目最好,我也考虑加入贡献,不是伸手党 :joy:

你这个话倒是给我提醒了,做个专门给CC加密解密的软件

1赞

资源加密没啥用 只要加密一定可以破解.比如最底层的ccc的图片经过解密后都是str字符串 再内存里 你内存拍照 .然后base64转换图片全部图片就出来了…没啥用 .CCC的解密 再Xp框架下Hook轻松拿到

抖音不是不让Hook了吗?是因为有个So库不让Hook 那么简单 替换So文件 即可轻松Hook…做好产品比较重要.

插件里面有.不过大部分都是js层加密.效率很低 ,项目很大 图片很多 就会很卡,还是cpp层效率高.

技术层面上的防御从来都是一山更比一山高,不存在什么稳妥的加密方式,会不会被破解只取决于代价是否大于收获

1赞

Mark!!!!!