TexturePacker最新版本中增加了一個新功能以防止你的產品資源被反編譯出來。它被稱爲ContentProtection,即圖片加密。但目前官方只支持Cocos2d-iphone的解密.TexturePacker作者說,不久Cocos2d-x也將集成解密功能.代碼已經提交Cocos2d-x github官方庫.(文章內容複製泰然論壇TexturePacker 圖片加密,只是修改了相應部分)
Read as other languages:英語
你的app或者遊戲仍可以解密數據,但是其他人則需要耗上很長的時間才能夠完成破解。理論上別人仍可能從源碼提取出密鑰,並寫出一些解碼器,這是因爲解碼器和密鑰已經被存儲在你的app中-否則不可能使用你的遊戲資源。但是這需要花費知識,時間和精力來解密你的資源。所以他們很有可能找一些其他更簡單的獵物來破解而不是你的資源文件。
TexturePacker加密策略設置
假設你已經運行過TexturePacker 創建精靈表,所以只需要打開一個已經存在的.tps文件。
下載最新版的TexturePacker-在左側你會看到一個新的option屬性:Content Protection。按下“Lock”圖標,並會彈出一個新的窗口:
在編輯框中你可以輸入你想要設置的key-或者按Create new key 按鈕創建新的key
使用Clear/Disable來關閉加密功能。
在 TexturePacker 中 按下Save as global key 會存儲密鑰key爲全局變量,在.pvr查看器中用它來解密,
通過按下Use global key按鈕你可以複製密鑰key到其他精靈表中。
改變文件的格式爲pvr.ccz是非常重要的,它是當前唯一支持解密的格式。
在TexturePacker中按下Publish完成在TexturePacker中的工作。
在命令行中輸入的命令是:–content-protection <key> ,其中 key必須是32位十六進制值。
在Cocos2d-x工程準備 Content protection
下載並拷貝下面2個文件到你的cocos2d-x文件夾裏並且替換掉原有的文件重新編譯libcocos2d.lib: cocos2d-2.1rc0-x-2.1.*\cocos2dx\support\zip_support
現在在你的app裏設置密鑰key。在第一個精靈表導入前你可以在你的程序啓動前調用4個方法來完成它。
爲了讓他們更難被破解請嘗試分開調用。
如果你的密鑰是aaaaaaaabbbbbbbbccccccccdddddddd,你必須將它們分成4部分每部分8位:
- aaaaaaaa
- bbbbbbbb
- cccccccc
- dddddddd
- aaaaaaaa
- bbbbbbbb
- cccccccc
- dddddddd
128位加密密鑰每個值是32位。在它是作爲一個另一個值傳遞給函數,因此在app中它很難定位。
然後使用:
- ZipUtils::ccSetPvrEncryptionKey(0xaaaaaaaa,0xbbbbbbbb,0xcccccccc,0xdddddddd);
- ZipUtils::ccSetPvrEncryptionKey(0xaaaaaaaa,0xbbbbbbbb,0xcccccccc,0xdddddddd);
- ZipUtils::ccSetPvrEncryptionKeyPart(0 , 0xaaaaaaaa)
- ZipUtils::ccSetPvrEncryptionKeyPart(1 , 0xbbbbbbbb)
- ZipUtils::ccSetPvrEncryptionKeyPart(2 , 0xcccccccc)
- ZipUtils::ccSetPvrEncryptionKeyPart(3 , 0xdddddddd)
- ZipUtils::ccSetPvrEncryptionKeyPart(0 , 0xaaaaaaaa)
- ZipUtils::ccSetPvrEncryptionKeyPart(1 , 0xbbbbbbbb)
- ZipUtils::ccSetPvrEncryptionKeyPart(2 , 0xcccccccc)
- ZipUtils::ccSetPvrEncryptionKeyPart(3 , 0xdddddddd)
在每一個文件裏使用解密,你都得確保添加下面一行:
- #import "ZipUtils.h"
- #import "ZipUtils.h"
當然你也可以添加新文件到你的工程裏。對,就是這樣!
總結
保護你遊戲資源被盜是容易的。使用新的Content Protection功能你只需要不到五分鐘的時間來設置就可以做到。
文章鏈接2:
遊戲開發過程中要涉及到大量的圖片,使用TexturePacker可以把小圖合成大圖。這是我們使用最多的功能,但是TexturePacker還帶有對圖片加密的功能。之前還是對加密不慎瞭解,所以寫下來分享下。
把圖片導入到TexturePacker中:
接下來就是加密了
>----- Create new key 是系統隨機密鑰
>----- Clear/DIsable 啓用、關閉圖片加密功能
>----- Save as global key 將密鑰作爲全局的密鑰,以後對其他的圖片加密直接點擊use global key就行
>----- Use global key 使用保存的全局密鑰
點擊Save
點擊Publish。把生成的plist和ccz文件複製到資源文件夾下面就行了。
由於使用的cocos2dx 3.0的版本不需要更新ZipUtils文件。同樣TestCpp中也有示例:\cocos2d-x-3.0\tests\cpp-tests\Classes\TexturePackerEncryptionTest
在這裏使用的密鑰爲:
中間的空格我手動添加的,因爲在程序中使用需要把32位密鑰分成4個十六進制的值。我們可以在cocos2dx的AppDelegate中添加設定密鑰,或者在我們使用的位置添加。
本示例在AppDelegate中添加的
用到的頭文件:
1 #include "cocos/2d/ZipUtils.h"
1 bool AppDelegate::applicationDidFinishLaunching() { 2 // initialize director 3 4 .............. 5 6 // 2528bd78 112d53ef fa5e5fb2 b7a5b25a (加密的 必須是32位十六進制值) 7 ZipUtils::setPvrEncryptionKeyPart(0, 0x76bcbb68); 8 ZipUtils::setPvrEncryptionKeyPart(1, 0x3a89c4f1); 9 ZipUtils::setPvrEncryptionKeyPart(2, 0xa9dfbac2); 10 ZipUtils::setPvrEncryptionKeyPart(3, 0x65a46419); 11 12 // 或者按照這種方式添加 13 //ZipUtils::setPvrEncryptionKey(0x2528bd78, 0x112d53ef, 0xfa5e5fb2, 0xb7a5b25a); 14 15 auto scene = TexturePackageEnvryption::scene(); 16 // run 17 director->runWithScene(scene); 18 19 return true; 20 }
在我們程序中具體使用如下:
1 SpriteFrameCache::getInstance()->addSpriteFramesWithFile("TexturePackageEncryption/poker.plist", "TexturePackageEncryption/poker.pvr.ccz"); 2 3 auto spriteRole = Sprite::createWithSpriteFrameName("1.png"); 4 spriteRole->setPosition(Point(240, 320)); 5 this->addChild(spriteRole);
轉載地址:https://www.cnblogs.com/luorende/p/6092808.html