unity android 符号表,如何获取libunity.so的符号表

满意答案

加密原理(无需Unity源码): 1. IDA Pro打开libmono.so, 修改mono_image_open_from_data_with_name为 mono_image_open_from_data_with_name_0, 2. 替换实现mono_image_open_from_data_with_name, extern mono_image_open_from_data_with_name_0(...); mono_image_open_from_data_with_name(...) { MonoImage *img = mono_image_open_from_data_with_name_0(...); //发现数据文件头不是DLL前缀则解密 img->raw_data, 相应修改img->raw_data_len return img; } 3. 重新打包libmono.so; 替换Unity3D中的android下的版本. 4. 另外写个加密的工具,植入构建环境(MonoDeveloper或VS,添加一个打包后Build Phase来加密DLL); (IOS下禁用JIT固采用AOT编译,DLL中没有逻辑代码,所以无需操心); 从AndroidManifest.xml中可以看出,腾讯的改造应该是修改并替换了入口的classes.dex,把以前的入口 UnityPlayerProxyActivity替换为com.tencent.tauth.AuthActivity. 然后去加载了自定义的几个so: libNativeRQD.so. 周全考虑,为了防止第三方委托libmono去做解密而做了防护措施. 具体实现我还没做深入分析, 应该也是老套路. libmono.so中的mono_image_open_from_data_with_name也被替换成了mono_image_open_from_data_with_name_0. 解密(android): 方法一: ROOT android系统(最好是一部手机,别搞模拟器,慢死), 挂载LD_PRELOAD的API hook来实现. 方法二: 内存特征码提取,简单高效无敌; 机器能读,你就能读;

00分享举报

你可能感兴趣的:(unity,android,符号表)