日期:2014-05-18  浏览次数:20970 次

用.net2005自带的Dotfuscator 混淆程序后,程序不能启动。
我用.net2005自带的Dotfuscator   对exe文件混淆后,程序不能启动,提示程序已经关闭。我试了好几个程序,只要混淆了,在哪个机器上运行都是一样的结果,郁闷啊,不知道哪位高人有解决办法或知道原因,小弟先谢了!

------解决方案--------------------
可能是你的系统哪里有了问题了,
我这里都好好的。
------解决方案--------------------
你混淆的时候没有设置好。
------解决方案--------------------
我这里也好好的 没什么问题 啊
------解决方案--------------------
既然.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呢。