Obfuscation of custom assemblies doesn't get discussed much on the forums. We're nearing a release and so I was wondering if anyone had any useful experience obfuscating the assemblies they distribute with Unity?
Any obfuscation tools that have worked well like Dotfuscator or one mentioned on the forums - Unity 3D Obfuscator?
We can obviously follow the status quo path and just obfuscate and forget it, but I was hoping the social brain could spread some wealth on lessons learned.
I haven't done anything with obfuscation in terms of Unity, but I have been working with .NET applications for the last 9 years (mostly outside the gaming industry), and we did a fair bit with it further back. Here's the thing: if someone wants to steal your code, I have yet to find a way that can really prevent that. Worse, in this case, if you're hoping to prevent piracy, all the obfuscation in the world won't help.
I'm not saying it's useless -- some manner of obfuscation is probably worthwhile, although I don't bother with my games. But, I'm saying that I wouldn't personally spend a lot of time on that, because you're likely going to be disappointed with the result once the game is in the wild.
I wish I had better news to share, more along the lines of what you were actually looking for, but that's my practical experience with obfuscation!
I used to reverse engineer games for a living and I wrote a post about this specific topic. It’s a bit too long to post in a reply, but I definitely recommend that you check it out if you are considering to obfuscate or not. TLDR: Just obfuscate.
Unity 3D Obfuscator is the only product providing professional means of protection against reengineering and unlicensed use of applications developed in the Unity 3D (2., 3. )environment.
Main features:
-Protection against decompilation;
-Obfuscating (renaming into a meaningless set of characters) object names (classes, functions, properties, etc.);
-Control flow obfuscation;
-Unpacking Unity3D projects;
-Removing the metadata of events and properties.