1 Cocos2dx-js資源文件
Cocos2dx-js開發的遊戲應用,其遊戲核心內容被打包到了Android應用的Assets目錄中。其中包含了經過加密的jsc文件,正因爲經過加密處理,無法獲取遊戲核心邏輯。通常需要對jsc文件進行解密處理。Assets目錄結構如下圖所示。
2 獲取key
2.1 靜態獲取
靜態方式直接使用ida打開so文件,以jsb和encrypt爲關鍵字,可以定位到部分加密函數,其中xxtea系列函數尤爲可以。尤其是jsb_set_xxtea_key。函數jsb_set_xxtea_key看起來像是設置key的地方,F5僞代碼看下,傳入了一個字符串化的指針參數,大概率可能是Key。回溯調用該函數的地方,看下傳入的參數值。最終在applicationDidFinishLaunching函數中找到了指針指向的字符串。
2.2 動態獲取
根據上述靜態獲取方式的方法,同樣可以使用hook的方式來取得jsc的加密key。只需hook jsb_set_xxtea_key或者解密函數,然後獲取該函數的參數即可。根據so和導出函數名可以快速寫出hook腳本。
function hookJava() { Java.perform(function() { var Cocos2dxActivity = Java.use("org.cocos2dx.lib.Cocos2dxActivity") Cocos2dxActivity.onLoadNativeLibraries.implementation = function() { this.onLoadNativeLibraries() hookNative() } }) } function hookNative() { Interceptor.attach(Module.findExportByName("libcocos2djs.so", "xxtea_decrypt"), { // 打印入參 onEnter: function (args) { console.log("cocos key is : ", Memory.readUtf8String(args[2])); }, // 打印返回值 onLeave: function (returnValue) { } }) } hookJava()
3 解密jsc文件
此處解密需要用到jsc解密工具,直接填入解密key,拖入加密的jsc文件即可完成解密工作,之後就可以明文的方式瀏覽遊戲邏輯。