我是混淆的新手。我正在使用与Visual Studio 2010捆绑在一起的Obfuscation的DotFuscator工具。
我有一个Web服务有很少的API。这项服务在正常发布时,所有API都能正常运行并提供预期的结果。
但是当我混淆DLL并发布服务时,所有API都会转到Catch块,并在我从该服务执行任何API时出错。
另外,我试过,当混淆DLL时,我禁用了RENAMING属性。所有API工作正常。但是,没有混淆感,因为DLL中没有任何内容被重命名,并且可以很容易地获取DLL中的所有代码。
在混淆DLL时是否缺少任何属性或选项?
答案 0 :(得分:4)
当混淆时,重要的是可以通过程序集引用从外部访问的任何类,方法和属性,或者在您的情况下通过Webservice API(依赖于xml序列化)的任何类,方法和属性都不会重命名
根据您应用模糊处理的位置,客户端将根据其末尾的模糊名称通过线路发送垃圾XML,从而导致服务器无法读取消息。 或客户端可能会发送正确的消息,但随后服务器会出现各种乱码,因为它的类和属性已被混淆。
因此,在应用模糊处理时,如果您有明确的数据合同或数据传输对象从模糊处理中排除,然后将它们映射到您的真实域模型(这是私有的,并且被严重混淆),它会有所帮助。
或者,如果您希望消息难以在线上阅读,请对整个合同进行模糊处理,但在客户端和服务器上使用相同的混淆程序集。这样他们就会说同样的“废话”。模糊处理工具了解序列化协议非常重要,因此它不会生成与XML不兼容的名称。
所以,为了回答最终的问题,如果我必须为某些类关闭它,那么混淆的用途是什么?,那就是保护真实的业务代码,同时允许你的交互仍然可以在一个众所周知且定义明确的界面上工作。
关于它,许多银行和医院使用标准协议进行序列化,线路上的对象是众所周知的,但软件的功能不在从A-> B传输的消息中,它是发送和接收这些消息所产生的算法和操作。混淆可以帮助您保护这个重要的IP。
来自Dotfuscator FAQ:
How does Dotfuscator work on API libraries?
您仍然可以利用重命名非公开类型,方法和字段。在这方面,Dotfuscator混淆是非常可配置的。 Dotfuscator有一个方便的“库”选项,可以自动阻止重命名所有公共方法。如果这不适合您的应用程序,您可以在不同的粒度级别自定义排除规则。更不用说控制流混淆和字符串加密在没有重命名的情况下保护代码还有很长的路要走。
可能(使用属性)to turn Obfuscation on or off for specific types and attributes as well。允许您保持属性名称,但加密或混淆方法/属性的内部。