如何防止Unity3D代码被反编译

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何防止Unity3D代码被反编译相关的知识,希望对你有一定的参考价值。

在Unity3D中,代码会编译到Assembly-CSharp.dll。基于以上两点,代码的保护有以下三种:
第一种是对代码进行混淆,诸如混淆软件CodeGuard、CryptoObfuscator、de4dot
第二种是对Assembly-CSharp.dll进行加密后,重新对mono进行编译

Virbox Protector直接进行加壳后,无需手动编译mono,能防止反编译

参考技术A 加密原理(无需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中没有逻辑代码,所以无需操心);本回答被提问者采纳

如何防止Unity3D代码被反编译

根本的解决办法是:先对DLL加密,然后在Unity的源码中加载程序DLL之前进行解密。

这就需要通过逆向工程获得相应的Unity源码或者是直接向Unity购买Source Code License。
参考技术A 在Unity3D中,代码会编译到Assembly-CSharp.dll。基于以上两点,代码的保护有以下两种:
第一种是对代码进行混淆,诸如混淆软件CodeGuard、CryptoObfuscator、de4dot
第二种是对Assembly-CSharp.dll进行加密后,重新对mono进行编译。。
Virbox Protector可对Assembly-CSharp.dll直接进行加壳后,无需手动编译mono,能防止反编译

以上是关于如何防止Unity3D代码被反编译的主要内容,如果未能解决你的问题,请参考以下文章

如何防止Unity3D代码被反编译

如何防止Unity3D代码被反编译

Unity3D加密外壳如何做到防止反编译?

Unity3D代码加密防止反编译及资源加密

如何防止代码被反编译

如何防止Android程序被反编译