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

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