首页 / 知识
关于安全性:如何防止其他人使用我的.Net程序集?
2023-04-17 09:26:00

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,然后抛出错误或退出。。。听起来不是很好的可重用性答案,但这就是重点。 只有您自己可以使用它,并且当您进行硬编码时,将授权代码写入程序。 只是想一个想法,可能就是您想要的东西,或者可以激发您做点更好的事情。 |
最新内容
相关内容
linux生产密钥对命令?
linux生产密钥对命令?,服务,密码,工具,认证,环境,位置,生产,密钥,下来,系统,如何在Linux服务器上配置SSH密钥验证1、第一种,是用putty登陆,用putlinux命令和应用程序?
linux命令和应用程序?,软件,系统,环境,管理,基础,情况,位置,电脑,工具,中心,在linux下如何装应用程序?需要什么命令啊首先从官网下载hdf5,根据Python 打包与独立可执行文件
Python 打包与独立可执行文件,平台,工具,标准,时代,信息,培训,庞大,项目,解决方案,多种,问题:即使是在30年之后,Python仍然没能拿到理想的方法,Python可执行文件和模块
Python可执行文件和模块,标准,培训,模块,文件,属性,上面,内容,变量,函数,源码,python源代码文件按照功能可以分为两种类型:用于执行的可执行程Python可以做桌面应用程序吗
Python可以做桌面应用程序吗,平台,系统,较大,标准,培训,界面,桌面,文档,入门,开发者,python可以做桌面应用程序!目前比较主流的几个GUI平台:1关于术语:“脚本”和“应用程序”之
关于术语:“脚本”和“应用程序”之间有什么区别?,关于术语:“脚本”和“应用程序”之间有什么区别?,指的是,区别,script,application,Wh关于 c#:如何找出我的控制台应用程
关于 c#:如何找出我的控制台应用程序在哪个目录中运行?,关于 c#:如何找出我的控制台应用程序在哪个目录中运行?,运行,文件,控制台,应用关于asp.net:配置多个.Net应用程序
关于asp.net:配置多个.Net应用程序的最佳方法,关于asp.net:配置多个.Net应用程序的最佳方法,应用程序,网站,链接,服务,Best Approach F关于.net:如何获取程序集的根名称空
关于.net:如何获取程序集的根名称空间?,关于.net:如何获取程序集的根名称空间?,加载,清单,我想,给定,How do you get the root namespace关于.net:Visual Studio:检测不需要
关于.net:Visual Studio:检测不需要的程序集,关于.net:Visual Studio:检测不需要的程序集,名称空间,程序集,引用,项目,Visual Studio: De在Java Web应用程序(WAR)中存储配
在Java Web应用程序(WAR)中存储配置文件的最佳位置是什么?,在Java Web应用程序(WAR)中存储配置文件的最佳位置是什么?,应用程序,创建关于调试:嗅探Flex应用程序和ColdFu
关于调试:嗅探Flex应用程序和ColdFusion后端之间的流量,关于调试:嗅探Flex应用程序和ColdFusion后端之间的流量,运行,服务,应用程序,