在Visual Studio中更好地混淆多个项目的解决方案?

时间:2009-12-16 10:12:16

标签: .net visual-studio obfuscation

我有一个包含许多项目的解决方案,这会产生许多dll文件。

我的问题是,这是混淆时的障碍吗?我应该以某种方式对其进行优化吗?

或者只是公共/私人领域/方法的问题?

2 个答案:

答案 0 :(得分:3)

使用Dotfuscator完成此操作的方法是将所有程序集添加为Dotfuscator项目的输入。完成此操作后,您需要为整个项目(从“输入文件”选项卡,看起来像一组书籍的图标)或单独的每个程序集关闭库模式。库模式是DLL文件的默认模式,不会重命名任何公开可见的元素。

关闭“库”模式后,将重命名所有方法,并且还将更新调用程序集中的方法。如果您通过Reflection或后期绑定执行任何动态调用,则需要手动从重命名中排除这些目标方法。

编辑:您可以看到另一件可能使您的发行更容易的事情是Dotfuscator的链接功能。这允许您将程序集链接在一起(类似于ILMerge所做的那样),这样您就可以发送单个EXE,并将所有DLL链接到其中或任何其他组合,以便您可以为最终用户提供更少的物理文件。

答案 1 :(得分:2)

不,你绝对不应仅仅为混淆器妥协你的项目布局结构。

一般来说,混淆器有一种模式,你可以说“这是我的整个系统,假设没有其他人做任何事情”,这实际上就是说,把它视为一块代码。

可以使用internalInternalsVisibleToAttribute一起使用的技巧(默认情况下,许多混淆器会比internal内容更加激进{/ 1}}。

任何需要保持原样的内容,例如基于publicSystem.Reflection的访问权限都可以用dynamic标记,告诉混淆器“不要触摸”

还有其他一些权衡要考虑是否放置在作为组件之间桥梁的外观层,然后在其后面创建内部类 - 取决于可能使其更容易进行逆向工程的上下文(您正在处理otu)快速摘要)或更难(你有一个核心类,并通过在其上使用一些关键方法而不是例如重命名来提供大量线索。)