首页 > Unity3D频道 > 【Unity3D研究院之游戏开发】 > Unity3D研究院之在把代码混淆过的游戏返混淆回来(七十七)
2014
08-01

Unity3D研究院之在把代码混淆过的游戏返混淆回来(七十七)

最近一直在找如何在MAC上混淆Android的DLL,至今没能找到合适的,有大神知道记得告诉我喔。今天群里有人说了一个混淆代码和返混淆代码的工具de4dot ,不查不知道一查吓一跳。这玩意可以把别人混淆过的代码反混淆回来。

这个工程是开源的 https://github.com/0xd4d/de4dot  找一台Windows电脑,下载后在VS上面打开它,另外它不能直接编译,需要在引入一个库文件。为了方便大家我把能正常编译的工程提供出来。

下载地址: http://pan.baidu.com/s/1ntjw3mL

如下图所示,打开工程后在VS里面快捷键F6,编译完成后会生成出来de4dot.exe 。那么我们返混淆就是通过这个exe来将unity生成的dll返混淆回来。

Unity3D研究院之在把代码混淆过的游戏返混淆回来(七十七) - 雨松MOMO程序研究院 - 1

 

经过混淆的代码反编译后。

Unity3D研究院之在把代码混淆过的游戏返混淆回来(七十七) - 雨松MOMO程序研究院 - 2

 

返混淆以后,如下图所示,属性名子就出来了。但是方法名就回不来了,都是按数字一次加上去,不过这些总比方括号好看多了。而且我看了一下内容,有些方法内容奇葩的地方也都解的至少能看。

Unity3D研究院之在把代码混淆过的游戏返混淆回来(七十七) - 雨松MOMO程序研究院 - 3

在Windows里面的cmd里面输入

de4dot.exe test.dll -p un

Unity3D研究院之在把代码混淆过的游戏返混淆回来(七十七) - 雨松MOMO程序研究院 - 4

 

另外你随便下载一个用Unity做的安卓游戏,然后把apk解开把里面的Assembly-CSharp.dll找出来,它的代码都在里面。如果它的代码没有做混淆工作,那么可以直接反编译出来。 如下图所示,返混淆会在原始dll的目录下生成一个后缀-cleaned.dll的文件。然后用反编译工具打开它即可。

Unity3D研究院之在把代码混淆过的游戏返混淆回来(七十七) - 雨松MOMO程序研究院 - 5

 

de4dot 看起来应该是非常强大,他支持返混淆这么多工具。。我就不一个一个试了,希望阅读本文的你帮我做一下测试,看看是不是所有混效果的Unity游戏都可以解开。

  • Agile.NET (aka CliSecure)
  • Babel.NET
  • CodeFort
  • CodeVeil
  • CodeWall
  • CryptoObfuscator
  • DeepSea Obfuscator
  • Dotfuscator
  • .NET Reactor
  • Eazfuscator.NET
  • Goliath.NET
  • ILProtector
  • MaxtoCode
  • MPRESS
  • Rummage
  • Skater.NET
  • SmartAssembly
  • Spices.Net
  • Xenocode

de4dot不仅仅可以返混淆,它也可以自身去混淆。。大家可以看看它的gitHub上的介绍,哎 又是一个必须在Windwos上完成的操作。。 今天把研究成果发出来,希望大家多多测试一下,看看能不能把所有混淆过的Unity游戏返混淆回来。 另外有什么最近进展大家一定要告诉我呀。。嘿嘿嘿嘿。

雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!

--

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。

  1. 方法名类似c_iterval,变量是f$__this这样的,不做任何修改直接编译替换回去就会闪退,de4dot反混淆失败,是不是要自己一个个改正变量名? Unity3D研究院之在把代码混淆过的游戏返混淆回来(七十七) - 雨松MOMO程序研究院 - 1

  2. 报错了!报错了!“System.IO.FileNotFoundException”类型的未经处理的异常在 未知模块。 中发生其他信息: 未能加载文件或程序集“de4dot.cui, Version=3.1.41592.3405, Culture=neutral, PublicKeyToken=d3f3ed1e47f67fc6”或它的某一个依赖项。系统找不到指定的文件。

  3. MOMO大大,你是用什么混淆的啊?我混淆后,代码反编译出来还是一堆数字和字母,不是你的括号啥的。还有就是,Unity的函数如Awake,Start,以及一些public提供给外面的接口是不能混淆的,但是我看你贴出来的代码,都是被混淆了。用de4dot 混淆,再用de4dot反编译,100%还原。