使用强名称dll功能限制

时间:2009-08-27 08:05:44

标签: c# assemblies

我正试图想办法阻止其他人使用你发布的dll。例如,假设你创建了一个很酷的轻量级WinUI照片处理工具,它被分成几个组件。其中一个是你珍贵的filters.dll程序集,它基本上完成了所有的核心过滤工作。发布应用程序后,如何防止其他人使用此filters.dll并在其他项目中使用它?

我已经尝试查看StrongNameIdentityPermissionAttribute,它有一个很好的示例here,但它似乎对我不起作用,代码只是工作而不会抛出任何安全异常..

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

强名称与防止或抑制逆向工程无关。它们仅用于阻止人们用黑客版本替换程序集 - 并且只有在人们没有关闭强名称验证的情况下才会这样做。没有什么能阻止人们在他们认为合适的情况下接受您的代码,ILDASMing或Reflectoring以及重新ILASMing。

InternalsVisibleTo和朋友们在编译器级别也处于荣誉系统中,因此对于你正在寻找的内容没有太多用处(尽管对于某些混淆器,内部组件在默认情况下会比公共场所更加激烈地混淆 - 尽管通常可以克服这种情况)。我在这里主要关注的是指出jsut是因为某些东西是“内部的”并没有赋予它任何魔法代码保护小精灵尘埃阻止逆向工程。

Most of this stuff re why these sort of approaches arent a solution for code protection is summarised very well in this article

市场上还有一些代码保护产品,它们超越了混淆,这听起来像是你描述的工作的工具。

答案 1 :(得分:0)

可能对您有用的一种方法是将过滤器程序集中的方法和类声明为内部,并明确指定可以作为“朋友”访问它的程序集。

使用程序集声明(通常在assemblyinfo中)执行此操作,如:

[assembly:InternalsVisibleTo("cs_friend_assemblies_2")]

请参阅Friend Assemblies了解详情。

另外,请确保您对程序集进行模糊处理,否则人们可以使用反射器挖掘代码。

答案 2 :(得分:0)

不要过于担心保护.NET代码。如果您将其部署到别人的计算机上,并且该人想要使用或阅读您的代码,他们就会。

如果您的代码足够有价值,则需要将其保存在您控制的计算机上(例如Web服务器)并防止未经授权的访问。

混淆只会减慢已确定的人的速度。强大的命名和签名不用于保护您的代码,而是确保用户可以确认代码来自他们期望的来源(即确保它没有被篡改)。