2011-02-19 84 views
1

我想阻止程序集从另一个应用程序加载。所以它只能从我的应用程序加载。防止在c中加载程序集#

Rigth现在我正在使用Assambly.LoadFrom加载程序集。

回答

1

您可以尝试在“受保护”程序集中的某个位置验证入口程序集(Assembly.GetEntryAssembly)。

+0

谢谢,这是最简单的方法。这是工作。 – Gabriel

1

您可以在程序集中使用InternalsVisibleToAttribute,并将应用程序集指定为“朋友”。这将阻止使用类型的其他程序集,只要它们被标记为internal,但将允许您的应用程序仍使用这些类型。

从MSDN:

通常,类型和与 内部范围(在C#)和朋友 范围(在Visual Basic)成员都是可见 仅在组件,其中,它们被定义 。 InternalsVisibleToAttribute属性 使它们对指定程序集中的类型 也可见。

该属性应用于组装级别的 。这意味着它可以包含在 源代码文件的开头,也可以是 ,包含在 Visual Studio项目的AssemblyInfo文件中。您可以使用 属性指定可访问当前程序集的内部类型和 成员的单个程序集 。若要 使组件的内部类型和 成员对其他 组件可见,则必须为每个组件包含一个 单独的InternalsVisibleToAttribute 属性。

不,这不会阻止任何人装载您的装配,它只是使用内部类型的组件(至少在没有一些重大的努力中,到底谁能只是拆卸阻止他们你的代码并以这种方式使用它)。

+0

和仅使用内部类,可能在某一时刻 – Snowbear

+1

应该强调的是,这仅梳妆打扮很随意滥用是困难的。 –

+1

@Marc:同意 - 只要你的代码/程序集在用户手中,就没有安全措施,如果有人愿意付出足够的努力打破它(Schneier会批准),那么这个安全措施将永远持续下去。 – BrokenGlass

1

不能阻止人们使用技术方法使用您的DLL。您可以尝试使其更加困难,但足够熟练的用户将能够修改程序集,以便他们可以使用它。

您可以尝试合法的方法。您可以在许可协议中包含一条禁止用户在其他应用程序中使用您的程序集的条款。但它不会阻止每个人。

3

最终,没有。这听起来像你正在部署一个DLL,但你想保留它的使用方式的唯一控制。这只是一场军备竞赛;最终如果有人真的,真的想(AB)使用它,他们可以。即使这意味着需要对您添加的任何预防性代码进行反汇编,消除混淆和解除武装。

阻止的唯一方法:不要给它们。考虑为某些功能使用Web服务。然后他们没有组装。

0

混淆它并保留文档的秘密。还包括关键在: http://www.codeguru.com/columns/experts/article.php/c4643

+0

组件的SN在组件中可见。它只是减轻了程序集的篡改(例如添加了“源代码信任”) - 它不控制对内部解析和加载检查之外的程序集的访问。我给了一个+1,因为有工具(不是SN)来加密一个程序集并在运行时/加载时对它进行解密,我相信如果它更多地探索这条路径,这个问题会变得更好。但是,它仍然存在问题:如果程序X可以访问它,那么程序Y也可以 - 例如它被黑客检查如何加载组件:-) – 2011-02-19 19:16:06