C#是为微软在.NET平台下主推的开发语言,其运行模式借鉴了JAVA,运行于.NET Framework之上,编译时C#代码被编译成一种中间语言。这种中间语言易于反编译,这就导致C#应用十分容易反编译,也就是源代码的泄露。
只要开源就不存在这个问题,但手头的项目不允许开源,安全起见查找了如何加密C#源代码。
主流的方式是加密和混淆,基本上有字符串加密、名称混淆、流程混淆。前两个通过降低代码的可阅读性来提高反编译时间成本,实现机密。第三个本人没有深究其内在机制。
初选定下使用Dotfuscator,因为这个方案网上推荐的最多,但是实施中遇到很多问题。这里需要说明下当前的项目是一个Form调用一个DLL,所以两个文件一起进行混淆,否则调用会出问题。Dotfuscator在进行两个文件混淆时总是不能通过。时间关系,寻找其它方案。
后找到.NET Reactor,免安装,无需注册,两个文件混淆也很容易,混淆时勾选[NecroBit®]很快解决了问题。混淆后,使用.NET Reflector反编译,核心算法均无法看到,外部调用的对象及其公有方法的名称未改变,应用正常工作。
使用.NET Reactor
介绍及下载http://www.cnblogs.com/saptechnique/archive/2009/09/12/1565152.html
需要说明的是勾选Obfuscation仅混淆私有成员和私有方法;勾选NecroBit®会隐藏公有方法的内容,保护强度提高很多。
使用.NET Reflector
官网可试用http://www.red-gate.com/products/dotnet-development/reflector
打开软件首先选择.NET Framework版本,然后选择需要反编译的文件。
刚开始很奇怪混淆与反编译软件怎么没有开源产品,后来想明白了这种反开源的产品怎么会开源呢?也许还与C#程序员的数量有关。
扫描二维码,分享此文章