如何防止Unity3D代码被反编译

如何防止Unity3D代码被反编译,第1张

加密原理(无亮轿需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来实现.

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

在Unity3D中,代码会编译到Assembly-CSharp.dll。基于以上两点,代码的保护有以下两种:辩散

第一种是对代码进行混淆,诸如混淆软件CodeGuard、CryptoObfuscator、de4dot

第二种是对Assembly-CSharp.dll进行加密后,重新对mono进行编译。。

Virbox Protector可对Assembly-CSharp.dll直接进行加壳后,袭灶顷无需手动编译mono,能防拍陆止反编译

Unity3D主要使用C#语法和开源mono运行开发商的代码逻辑,所有代码都不是编译到EXE,而是位于{APP}\build\game_Data\Managed\Assembly-CSharp.dll。而且mono执行原理跟微软.NET Framework兼容但是执行原理完全不一样。传统的.NET Framework加壳全部失效,因为Assembly-CSharp.dll不是PE格式的动态库也不是.NET的动态库,无法从 .NET Framework 加载,而是由mono.dll读扰雹取 Assembly-CSharp.dll的穗埋里面C#脚本解释执行。

Virbox Protector 对 Assembly-CSharp.dll 做加密,无需手动加密 Assembly-CSharp.dll 代码,自动编译 mono, Assembly-CSharp.dll 代码按需解密,只有调用到才会在内存解密,不调用不解密,黑客无法一次解出所有的代码。一键加密代码逻辑,无法反编译,无法dump内存。不降低游戏帧数,自带反黑引擎,驱动级别反调试,秒杀市面的所有调试器。

Uinty3D 主要的游戏资源都在 resources.assets ,游戏里面所有放在 resources 文件夹下的东缓族帆西都会放在这里,DSProtector工具可以对Unity软件中的 .resS和resources等资源文件进行加密防止软件或游戏中的资源被非法提取。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12236587.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存