我有一个包含许多项目的解决方案,这会产生许多dll文件。
我的问题是,这是混淆时的障碍吗?我应该以某种方式对其进行优化吗?
或者只是公共/私人领域/方法的问题?
答案 0 :(得分:3)
使用Dotfuscator完成此操作的方法是将所有程序集添加为Dotfuscator项目的输入。完成此操作后,您需要为整个项目(从“输入文件”选项卡,看起来像一组书籍的图标)或单独的每个程序集关闭库模式。库模式是DLL文件的默认模式,不会重命名任何公开可见的元素。
关闭“库”模式后,将重命名所有方法,并且还将更新调用程序集中的方法。如果您通过Reflection或后期绑定执行任何动态调用,则需要手动从重命名中排除这些目标方法。
编辑:您可以看到另一件可能使您的发行更容易的事情是Dotfuscator的链接功能。这允许您将程序集链接在一起(类似于ILMerge所做的那样),这样您就可以发送单个EXE,并将所有DLL链接到其中或任何其他组合,以便您可以为最终用户提供更少的物理文件。
答案 1 :(得分:2)
不,你绝对不应仅仅为混淆器妥协你的项目布局结构。
一般来说,混淆器有一种模式,你可以说“这是我的整个系统,假设没有其他人做任何事情”,这实际上就是说,把它视为一块代码。
可以使用internal
与InternalsVisibleToAttribute
一起使用的技巧(默认情况下,许多混淆器会比internal
内容更加激进{/ 1}}。
任何需要保持原样的内容,例如基于public
或System.Reflection
的访问权限都可以用dynamic
标记,告诉混淆器“不要触摸”
还有其他一些权衡要考虑是否放置在作为组件之间桥梁的外观层,然后在其后面创建内部类 - 取决于可能使其更容易进行逆向工程的上下文(您正在处理otu)快速摘要)或更难(你有一个核心类,并通过在其上使用一些关键方法而不是例如重命名来提供大量线索。)