How to prevent others from using my .Net assembly?我有一个程序集,除了指定的可执行文件之外,任何其他应用程序都不应使用该程序集。请给我一些说明。 您可以使用相同的密钥对程序集和可执行文件进行签名,然后在要保护的类的构造函数中进行检查:
在.Net 2.0或更高版本中,将所有内容置于内部,然后使用Friend程序集 http://msdn.microsoft.com/zh-cn/library/0tke9fxk.aspx 这不会停止反射。我想从下面合并一些信息。如果您绝对需要阻止任何人打电话,最好的解决方案是: 您还可以检查调用堆栈并获取每个调用方的程序集,并确保它们均使用与程序集相同的密钥签名。 100%完全不可能不跳铁环。 使用.NET的好处之一是可以使用反射,即加载程序集并对其进行检查,动态调用方法等。这使得VB.NET与F#之间的互操作成为可能。 > 但是,由于您的代码位于托管程序集中,这意味着任何人都可以添加对您代码的引用,并调用其公共方法,或者使用反射和调用私有方法加载它。即使您"混淆"了您的代码,人们仍然可以使用反射并调用您的代码。但是,由于所有名称都将被屏蔽,所以做任何事情都非常困难。 如果必须以防止其他人执行.NET的方式发布.NET代码,则可以使用NGEN二进制文件(将其编译为x86)并交付这些二进制文件。 我不知道您的情况的具体细节,但混淆应该足够。 您也可以看看使用Netz可执行打包程序和压缩程序。 这会将您的程序集和您的.exe文件打包到一个可执行文件中,这样一经挖掘,它们就不会对外界可见。 我的猜测是,这足以阻止大多数.net程序员进行访问。 .netz方法的一大优点是它不需要您更改代码。另一个好处是,它确实简化了安装过程。 我不确定这是否对您有用,但是也许您可以使用WCF或ASP.NET Web服务托管程序集,并使用某种身份验证方案(LDAP,公共/伪造密钥对等)。 ),以确保只有允许的客户端可以连接。这将使程序集在物理上不受任何其他人的控制,并且您可以控制与它连接的人员。只是一个想法。 就像某些人提到的那样,使用InternalsVisibleTo属性并将所有内容标记为内部。这当然不能防止反射。 还没有提到的一件事是将程序集不合并到主.exe / .dll /中,这将增加一点输入的障碍(人们无法通过独自询问看到组件)被引用),但不会停止反射路径。. 更新:另外,IIRC,ilmerge具有一项功能,可以自动内部化合并的程序集,这意味着您根本不需要使用InternalsVisibleTo @Charles Graham提到的"代码访问安全性"属性是StrongNameIdentityPermissionAttribute 您应该能够使所有内容都在内部范围内,然后使用InternalsVisibleTo属性将仅一个程序集访问权限授予内部方法。 听起来您正在寻找保护或混淆工具。虽然没有灵丹妙药,但我推荐的保护工具是smartassembly。替代品包括Sal混淆器,dotfuscator和Xenocode。 不幸的是,如果您将字节交给某人读取...如果他们有足够的时间和精力,他们可以找到加载和调用您的代码的方法。要抢先回答评论,我经常看到您问:Salamander将阻止您的代码直接加载到Reflector工具中,但是我在smartassembly中拥有更好的体验(即:更可靠)。 希望这会有所帮助。 :) 您可以使用混淆处理。 那将变成:
变成类似以下内容的不可读内容:
其他人仍然可以使用您的程序集,但是很难使任何明智的选择。 您可以在程序集的"代码访问安全性"策略中进行设置。 例如,如果程序集是Web服务,则可以确保指定的可执行文件在SOAP消息中传递了秘密值。 只需要求使用函数调用发送密码,如果未授权,则没有任何效果,例如.setAuthorizeCode('123456'),然后在可以使用的每个位置中检查其authorizeCode = 123456,然后抛出错误或退出。。。听起来不是很好的可重用性答案,但这就是重点。 只有您自己可以使用它,并且当您进行硬编码时,将授权代码写入程序。 只是想一个想法,可能就是您想要的东西,或者可以激发您做点更好的事情。 |