過程中大家也積極討論了一些防破解的方法,在徵得到大家的同意後,我將討論的方案整理了出來,希望對正在做小遊戲的開發者們有所幫助或啟發,如果你有更好的方案也歡迎留言討論。
混淆程式碼,禁止除錯弱聯網加密校驗增加彩蛋1.混淆程式碼,禁止除錯對於 JavaScript 程式碼來說,最簡單是對程式碼進行混淆加密。當有不法分子拿到程式碼後,使他不能直接閱讀,進行二次開發。
曉衡曾經做過一個兒童教育應用,使用 javascript-obfuscator 做混淆加密,同時開啟禁止除錯功能,效果如下:
混淆出來的程式碼,樣子變成這樣:
這裡是 javascript-obfuscator 的 github 地址:
https://github.com/javascript-obfuscator/javascript-obfuscator
除了使用 javascript-obfuscator 提供的命令列工具,它還支援 Grunt、Gulp、Webpack 等外掛方式,具體使用方法請參考官方教程,這裡就不贅述了。
但是對於 JavaScript 專案,對方接將我們的遊戲程式碼、資源一起搬走,大不了不做二次修改,將圖片一換仍然可以執行,沒有絲毫招架之力!
2.弱聯網校驗混淆程式碼只能是讓“盜碼者”不能閱讀原始碼,做二次開發,但不能解決他們直接破解資源,換皮打包的問題。目前還有一種大多數單機使用的方案:弱聯網&資源校驗。
弱聯網
將我們的遊戲關鍵資料儲存到伺服器上,比如關鍵配置、使用者存檔,或者是向服務請求加密驗證,在遊戲中使用自己的平臺 appid 作為金鑰等手段。
通過弱聯網,就算遊戲客戶端程式碼、資源被盜也無法正常遊戲,也能起到保護作用,是一種比較實用的方案。
資源校驗
在工程中儲存一個空配置檔案,開發模式時不用讀取它。釋出 Release 構建時,對生成的關鍵圖片資源、JS程式碼等生成 MD5 指紋,替換到構建資源中。
在引擎載入資源過程中,通過系統介面獲檔案物件,計算檔案 MD5 做比較,如果 MD5 不匹配則不進行遊戲。
下面是曉衡在網路上找一個 browser-md5-file 的模組,效果如下:
browser-md5-file 它是一個 NPM 模組,使用很方便這裡是 Github 地址:
https://github.com/forsigner/browser-md5-file
除了微信小遊戲、H5遊戲,也有不少開發者使用引擎打包 iOS、Android 原生遊戲,如果不做一些保護手段,直接將安裝包中的res、src匯出是非常容易的事情。讀取原生資原始檔相對簡單,使用引擎提供的 jsb.fileUtils.getDataFromFile 即可。
3.彩蛋”彩蛋“方案是一位夥伴想起曾經莉莉絲的《刀塔傳奇》反編譯案提出來的,看下圖:
案件情況如下:
《刀塔傳奇》開發商莉莉絲在美國加州向法院提起對《Heroes Charge》開發商uCool的訴訟,斥其侵權,但由於玩法不被保護,所以莉莉絲的勝訴希望並不大。但莉莉絲任選擇與 uCool 對簿公堂,可以想見是掌握了決定性證據,現在這個證據終於公佈。
莉莉絲在Facebook官方主頁釋出了一段視訊,這則視訊內容表明了uCool所推出的遊戲《Heroes Charge》反編譯《刀塔傳奇》程式碼的一個關鍵性證據。
在視訊中,演示者從App Store登陸,下載了《Heroes Charge》的App,然後打開了App。演示者登陸游戲後,點選進入了“遠古神廟”關卡,然後開始點選螢幕。
在多次點選螢幕之後,赫然跳出了一個視窗。視窗上寫著“LILITH GAMES ©”。在《Heroes Charge》的遊戲中出現了《刀塔傳奇》開發商莉莉絲遊戲的商標,這顯然並不正常。
彩蛋是不得已的最後一手,當我們的遊戲發現已經被盜時,向平臺提出申訴,彩蛋將是一個重要的申述證據。
4.小結隨著微信小遊戲日趨普及,開發商廠和個人開發者也大量湧入, 遊戲同質化嚴重,不少小遊戲廠商或個人將一套遊戲程式碼經過簡單換皮上線,更有投機者直接反編譯別人的遊戲變成自己的產品上架。
微信平臺以及其它小遊戲平臺,為了打擊這種現象,會對程式碼相似度進行審查,超過一定比例相似度的程式碼會被判定為“程式碼包侵權”,將不能通過稽核。因此個人開發者上線小遊戲時,建議對程式碼進行混淆,以免被人拿到引擎直接輸出的程式碼混淆後上線,他將有機會逃過相似度審查。
曉衡也是一名普通的個人開發者,深知個人開發者的艱辛。遊戲被盜,作為個人是很難與一些不良公司抗衡的,更重要的是它會極大地打擊我們學習和創作的動力。上面介紹了三種保護遊戲的方案,拋磚引玉,相信大家還有更多更好的方法,歡迎大家留言討論分享你的經驗。