Android Cocos2dx-js遊戲APP逆向

1 Cocos2dx-js資源文件

Cocos2dx-js開發的遊戲應用,其遊戲核心內容被打包到了Android應用的Assets目錄中。其中包含了經過加密的jsc文件,正因爲經過加密處理,無法獲取遊戲核心邏輯。通常需要對jsc文件進行解密處理。Assets目錄結構如下圖所示。

tree.png

2 獲取key

 

2.1 靜態獲取

靜態方式直接使用ida打開so文件,以jsb和encrypt爲關鍵字,可以定位到部分加密函數,其中xxtea系列函數尤爲可以。尤其是jsb_set_xxtea_key。xxtea.png函數jsb_set_xxtea_key看起來像是設置key的地方,F5僞代碼看下,傳入了一個字符串化的指針參數,大概率可能是Key。回溯調用該函數的地方,看下傳入的參數值。最終在applicationDidFinishLaunching函數中找到了指針指向的字符串。applicationDidFinishLaunching.png

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文件即可完成解密工作,之後就可以明文的方式瀏覽遊戲邏輯。jscdecrypt.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章