【问题标题】:Obfuscation of assemblies that reference 3rd party assemblies混淆引用第 3 方程序集的程序集
【发布时间】:2012-05-01 17:48:02
【问题描述】:

我准备为客户完成一个大项目。要求是,最终组装必须是单个组装。通常我将所有程序集混淆在一起,并生成一个文件。但是,这一次我引用了 3rd 方程序集,例如 PostSharp、Enterprise Libraries 和一些特定的供应商 API。

当我混淆项目时,我最终得到了一个程序集,但它不再有效。

该项目是 ACT 的插件!这需要一个类来实现特定的接口。如果我构建并将所有输出文件复制到插件文件夹,它会按预期工作并且 ACT!将看到插件,它会工作。使用单个混淆程序集,它不再起作用。行为!不会看到插件。

我只能想象这是由这些 3rd 方引用引起的,因为我在以前的项目中这样做过,只是从未使用任何 3rd 方程序集或 API。

我正在使用 Xenocode 进行混淆,但我会尝试任何方法。

【问题讨论】:

    标签: c# .net obfuscation


    【解决方案1】:

    第一个问题不是因为您使用的是第三方程序集,而是大多数 likley 接口是 ACT!期望和它的实现被混淆了。获取 Reflector 甚至 ILDasm,看看你感兴趣的类是否实现了 ACT 所需的接口!

    我没有使用过 Xenocode,但我希望它能够指定哪些类/方法不应该被混淆。您的目标是使接口及其实现不被混淆。

    注意:我还建议查看您使用的第三方组件的许可要求,因为它们可能不允许此类合并。

    【讨论】:

    • 它仍然是。正如我所说,我之前在几个项目上做过这个(还有 ACT 插件)。碰巧这个项目不合作。 Xenocode(曾经)是高端混淆工具之一。
    • 我什至将 Xenocode 设置为不混淆任何东西,只生成一个程序集,但它仍然不起作用。
    • 您是否尝试过调试它并查看失败的原因? IE。如果您将第三方 DLL 合并到您的程序集中,它们不再工作也就不足为奇了 - 即任何反射代码都可以工作。
    • 无法调试,因为 ACT 从未加载程序集。我将 Debugger.Launch() 添加到构造函数和其他一些地方,但它不起作用。如果没有进行混淆,它可以正常工作。我试图混淆我的程序集,将其保留为多文件项目,但即使这样也行不通。
    • 如果我创建一个不引用任何内容的新程序集,插件将在混淆后正常加载。
    【解决方案2】:

    由于以下原因,您绝对不要混淆第三方组件:

    1. 您无法控制或了解代码的内部工作原理,无法知道其混淆程度会如何影响其工作。即使您这样做(例如,如果它是开源的),您是否愿意花时间处理这些程序集被混淆时可能出现的任何问题?
    2. 它不是您的 IP,因此混淆第 3 方程序集没有任何好处,但您会得到 #1 中描述的所有缺点。

    尝试Crypto Obfuscator - 它支持包含第 3 方程序集,而不会通过将它们列为“附加依赖项”来混淆它们 - 由于依赖项嵌入在主程序集中并在程序集解析期间提供,因此您最终仍然只有一个程序集。

    免责声明:我在logicnp软件(加密cofuscator的开发人员)中工作。

    【讨论】:

    • 我不需要混淆它们,只需将它们包含在单个组件输出中即可。我会试一试的。
    • @logincnp:如果你在宣传自己的产品,你应该在答案中明确说明,否则会被视为垃圾邮件。有关更多信息,请参阅 Meta 上的 this 讨论。目前,您的很多答案正在收集 @987654323 @。
    • @ho1 - 因为我的登录名是“logicnp”,所以我认为它已经足够清楚了,但如果这是必需的,我一定会说清楚!
    猜你喜欢
    • 1970-01-01
    • 2013-07-31
    • 2010-09-23
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多