查看: 2463|回复: 1
打印 上一主题 下一主题

[经验分享] 如何防止Unity3D代码被反编译?

[复制链接]

31

主题

1

听众

347

积分

设计实习生

Rank: 2

纳金币
65
精华
0

最佳新人

跳转到指定楼层
楼主
发表于 2016-8-19 18:14:28 |只看该作者 |倒序浏览
感谢大神彭帅的无私分享3d素材unity3d的相关经验~~


加密原理(无需3d素材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; 替换3d素材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来实现.


方法二: 内存特征码提取,简单高效无敌; 机器能读,你就能读;


JVM, CLR, AS3之类游戏通通秒破。


其他3d素材内容,尽在汇宝盆

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏1 支持支持0 反对反对0
回复

使用道具 举报

xkjoy    

13

主题

7

听众

3995

积分

中级设计师

Rank: 5Rank: 5

纳金币
55
精华
2

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2016-8-19 22:57:49 |只看该作者
现在有IL2CPP,对hacker来说,IL2CPP的难度真是高了不少,DLL随意破解
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-30 06:15 , Processed in 0.087730 second(s), 31 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部