C# 如何保护DLL?
我如何保护我的项目的DLL,使它们不能被其他人引用和使用C# 如何保护DLL?,c#,dll,C#,Dll,我如何保护我的项目的DLL,使它们不能被其他人引用和使用 谢谢您可以将其嵌入到可执行文件中,并在运行时提取和加载库并调用它。或者,您可以使用某种共享密钥对附带的文件进行加密/解密,并执行上述操作 我假设您已经考虑过解决方案,比如在不希望共享的情况下编译它。但是,如果有人真的想达到目的,有很多方法可以做到。看看下面的例子。它将允许您声明对程序集的访问权限。再加上一个好的代码保护工具(比如(我卖CodeVeil的免责声明)),你会非常高兴的 简单的回答是,除了显而易见的事情之外,你也无能为力 显然,
谢谢您可以将其嵌入到可执行文件中,并在运行时提取和加载库并调用它。或者,您可以使用某种共享密钥对附带的文件进行加密/解密,并执行上述操作
我假设您已经考虑过解决方案,比如在不希望共享的情况下编译它。但是,如果有人真的想达到目的,有很多方法可以做到。看看下面的例子。它将允许您声明对程序集的访问权限。再加上一个好的代码保护工具(比如(我卖CodeVeil的免责声明)),你会非常高兴的 简单的回答是,除了显而易见的事情之外,你也无能为力 显然,你可能要考虑的事情(大致上是增加难度和降低合理性)包括:
- 静态链接,因此没有可攻击的DLL
- 去掉所有符号
- 使用.DEF文件和导入库只能通过其导出ID知道匿名导出
- 将DLL保存在资源中,并仅在运行时将其暴露在文件系统中(使用一个适当的模糊名称,甚至可能在运行时生成)
- 将所有实函数隐藏在一个工厂方法后面,该工厂方法将一个秘密(更好的是,秘密的知识证明)交换为指向实方法的函数指针表
- 使用从恶意软件世界借来的反调试技术来防止反向工程。(请注意,这可能会导致AV工具出现误报。)
很大程度上取决于您的用例。如果你只是想避免随意使用,你可能会找到一个适合你的解决方案。如果你想保护有价值的商业秘密不被逆向工程和重用,你可能不会这么高兴。你面临着与DRM支持者相同的问题 如果您的程序(您希望能够运行DLL)可由某个用户帐户运行,则没有任何东西可以阻止一个有足够决心的程序员以该用户身份登录,以隔离执行解密的代码并使用该代码解密您的DLL并运行它。
当然,您可以不方便地执行此反向工程,这可能就足够了。您可能会对有关友元程序集的以下信息感兴趣:
您可以将所有“公共”类标记为“内部”或“受保护的内部”,然后使用[assembly:InternalsVisibleTo(“”)属性标记程序集,除标记的程序集外,没有人可以看到内容。您尝试过.Net reactor吗?我最近遇到了它。有些人说它很棒,但我仍在测试。在.NET中,exe文件也是程序集,可以引用。解决方案是什么?不幸的是,这是一个非常容易绕过的解决方案。一旦加载程序集,就可以很容易地从内存中转储该程序集,从而允许任何人使用“加密”程序集。反射甚至允许使用私有类型/成员。您的意思是,即使应用InternalsVisibleTo属性,Reflector.Net仍然可以公开代码?是的。有些人还可以使用反汇编程序查看其InternalsVisibleTo属性的内容,创建具有相同名称的程序集并获得访问权限。您能否提供每个步骤的示例/说明?这会很好(即如何“1)静态链接”、“2)条形符号”等)??