.Net 代码混淆的一些注意事项

既然.Net总能够被人破解, 那么我们只好把重要的计算和功能放在server上通过webservice提供了,但是客户端的代码总还得混淆一下,否则别人反编译一下不是全部知道底细了,所以我只使用code protect tools的混淆功能而不是加密,毕竟再怎么加密也是可以破解掉的。

以XENOCODE为例(其实我只使用了这个,毕竟相信老牌软件,心里有底些),它的select pattern相当不错,经过一段时间的摸索,找到一些需要注意的地方:

1、Enumeration一定不要重命名:毕竟我们还有很多地方会使用Enum.Parse(string)以及直接tostring得到名称
2、Reference和Interface最好不要重命名
3、public, protect的不能重命名:因为public会被外部使用,而且有些还是virtual override或是implicitly implement, 而protect的会被其它的继承类使用
4、需要反射的最好单独一个assembly,不要去混淆:毕竟这个风险太大,很难去一个个选取哪些要哪些不要重命名,比如说有的ORM中需要反射属性和字段的实体类定义
5、资源类Properties.Resources修改为public(这样可以批量设置public的不要重命名)
 因为这段代码
 global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("XXX.Properties.Resources", typeof(Resources).Assembly);
 resourceMan = temp;
否则的话就会出现:
 Could not find any resources appropriate for the specified culture or the neutral culture.

其它:
字符串加密这个不会出错,只是有些性能损失而已
流程混淆xenocode还是很安全的,我一般使用1~2级就可以了,毕竟有时候出错了我还得打开混淆后的代码查找位置
其它的防止反编译的选项我也没有设置,因为我自己还得用reflector呢。
posted @ 2007-08-28 13:20  progame  阅读(5103)  评论(3编辑  收藏  举报