Android Cocos2dx-js游戏APP逆向
本文从Android逆向工程师的角度对Cocos2dx-js游戏App进行逆向分析,记录逆向过程中使用的工具以及相关原理。
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文件即可完成解密工作,之后就可以明文的方式浏览游戏逻辑。