前段时间,晓衡加入的一个小游戏个人开发者群突然,炸锅了!群里有两位伙伴开发的小游戏,一个破解上架头条,一个破解打成 Android 包。

我应该拿什么来拯救你,我的游戏?_github

我应该拿什么来拯救你,我的游戏?_javascript_02

我应该拿什么来拯救你,我的游戏?_开发者_03

我应该拿什么来拯救你,我的游戏?_javascript_04

我应该拿什么来拯救你,我的游戏?_微信_05

我应该拿什么来拯救你,我的游戏?_小游戏_06

过程中大家也积极讨论了一些防破解的方法,在征得到大家的同意后,我将讨论的方案整理了出来,希望对正在做小游戏的开发者们有所帮助或启发,如果你有更好的方案也欢迎留言讨论。
  • 混淆代码,禁止调试

  • 弱联网加密校验

  • 增加彩蛋

1混淆代码,禁止调试对于 JavaScript 代码来说,最简单是对代码进行混淆加密。当有不法分子拿到代码后,使他不能直接阅读,进行二次开发。晓衡曾经做过一个儿童教育应用,使用 javascript-obfuscator 做混淆加密,同时开启禁止调试功能,效果如下:

我应该拿什么来拯救你,我的游戏?_开发者_07

混淆出来的代码,样子变成这样:

我应该拿什么来拯救你,我的游戏?_开发者_08

这里是 javascript-obfuscator 的 github 地址:https://github.com/javascript-obfuscator/javascript-obfuscator除了使用 javascript-obfuscator 提供的命令行工具,它还支持 Grunt、Gulp、Webpack 等插件方式,具体使用方法请参考官方教程,这里就不赘述了。但是对于 JavaScript 项目,对方接将我们的游戏代码、资源一起搬走,大不了不做二次修改,将图片一换仍然可以运行,没有丝毫招架之力!

 

2弱联网校验混淆代码只能是让“盗码者”不能阅读源码,做二次开发,但不能解决他们直接破解资源,换皮打包的问题。目前还有一种大多数单机使用的方案:弱联网&资源校验。

 

1弱联网将我们的游戏关键数据保存到服务器上,比如关键配置、用户存档,或者是向服务请求加密验证,在游戏中使用自己的平台 appid 作为密钥等手段。通过弱联网,就算游戏客户端代码、资源被盗也无法正常游戏,也能起到保护作用,是一种比较实用的方案。2资源校验如果我们没有服务器怎么办呢?这里讨论一种方案供大家参考。在工程中保存一个空配置文件,开发模式时不用读取它。发布 Release 构建时,对生成的关键图片资源、JS代码等生成 MD5 指纹,替换到构建资源中。在引擎加载资源过程中,通过系统接口获文件对象,计算文件 MD5 做比较,如果 MD5 不匹配则不进行游戏。下面是晓衡在网络上找一个 browser-md5-file 的模块,效果如下:

我应该拿什么来拯救你,我的游戏?_javascript_09

browser-md5-file 它是一个 NPM 模块,使用很方便这里是 Github 地址:https://github.com/forsigner/browser-md5-file不过这里有一个难点,如何通用 Creator 引擎或其它 H5 引擎获取到资源文件的 File 对象呢?而且在不同平台,比如普通 H5 、微信小游戏、头条小游戏 环境不同还需要进一步研究。除了微信小游戏、H5游戏,也有不少开发者使用引擎打包 iOS、Android 原生游戏,如果不做一些保护手段,直接将安装包中的res、src导出是非常容易的事情。读取原生资源文件相对简单,使用引擎提供的 jsb.fileUtils.getDataFromFile 即可。

 

3彩蛋”彩蛋“方案是一位伙伴想起曾经莉莉丝的《刀塔传奇》反编译案提出来的,看下图:

我应该拿什么来拯救你,我的游戏?_微信_10

案件情况如下:
《刀塔传奇》开发商莉莉丝在美国加州向法院提起对《Heroes Charge》开发商uCool的诉讼,斥其侵权,但由于玩法不被保护,所以莉莉丝的胜诉希望并不大。但莉莉丝任选择与 uCool 对簿公堂,可以想见是掌握了决定性证据,现在这个证据终于公布。莉莉丝在Facebook官方主页发布了一段视频,这则视频内容表明了uCool所推出的游戏《Heroes Charge》反编译《刀塔传奇》代码的一个关键性证据。在视频中,演示者从App Store登陆,下载了《Heroes Charge》的App,然后打开了App。演示者登陆游戏后,点击进入了“远古神庙”关卡,然后开始点击屏幕。在多次点击屏幕之后,赫然跳出了一个窗口。窗口上写着“LILITH GAMES ©”。在《Heroes Charge》的游戏中出现了《刀塔传奇》开发商莉莉丝游戏的商标,这显然并不正常。
彩蛋是不得已的最后一手,当我们的游戏发现已经被盗时,向平台提出申诉,彩蛋将是一个重要的申述证据。

 

4小结随着微信小游戏日趋普及,开发商厂和个人开发者也大量涌入, 游戏同质化严重,不少小游戏厂商或个人将一套游戏代码经过简单换皮上线,更有投机者直接反编译别人的游戏变成自己的产品上架。微信平台以及其它小游戏平台,为了打击这种现象,会对代码相似度进行审查,超过一定比例相似度的代码会被判定为“代码包侵权”,将不能通过审核。因此个人开发者上线小游戏时,建议对代码进行混淆,以免被人拿到引擎直接输出的代码混淆后上线,他将有机会逃过相似度审查。晓衡也是一名普通的个人开发者,深知个人开发者的艰辛。游戏被盗,作为个人是很难与一些不良公司抗衡的,更重要的是它会极大地打击我们学习和创作的动力。上面介绍了三种保护游戏的方案,抛砖引玉,相信大家还有更多更好的方法,欢迎大家留言讨论或来公众号分享你的经验。