保护 DLL 的源代码
Posted
技术标签:
【中文标题】保护 DLL 的源代码【英文标题】:Protecting source code of a DLL 【发布时间】:2017-09-03 18:46:09 【问题描述】:我有一个用 C# 编写的库。我想将它作为 DLL 分发。但似乎 .NET 允许对其进行轻松的反编译,因此算法很容易被窃取。
我可以用 C++ 重写它,但我是 .NET 的新手。因此,主要问题是编写 C# 的接口。库不是太大,使用线程、网络和一些数学
有没有办法构建一个只能反汇编的DLL?还是我最好只用 C++ 编写所有内容并提供 C# 接口?反编译C++比反编译C#难吗?
【问题讨论】:
您正在寻找obfuscator
。
@cubrr 这会为用 C# 编写的库提供足够的保护吗? C++ 和 obfuscator
这样的工具会更好吗?
Obfuscator 只是用奇怪的名称重命名你的类方法、变量、字段等,因此很难对其进行逆向工程。我认为您应该为您的代码申请专利并将其托管在云中。当然,您可以在云中托管一个混淆的 DLL。
【参考方案1】:
分发给最终用户的所有内容都可以进行逆向工程。您可以增加付出的努力,但这始终是可能的。如果您的算法确实是关键的、专有的和有价值的,并且您仍在进行应用程序设计,并且您的算法的结果不是性能关键或可以分块......那么也许您可以考虑使用 Web 服务方法。然后,您可以使用一些最强大的行业标准保护来访问您的计算。
【讨论】:
“分发给最终用户的所有内容都可以进行逆向工程” - 是的,我明白了。但是用 C++ 重写库值得吗? @Leonidas 你没有给我们足够的信息来帮助我们解决这个问题。一般来说,编译后的 C++ 代码比混淆的 C# 更难理解,但根据您使用的代码功能、您对 C++ 的舒适度以及算法代码的大小和要求,用 C++ 重写代码可能很简单或几乎不可能。 实际上我更喜欢 C++,但我是 .NET 新手。因此,主要问题是编写 C# 接口。库不是太大,使用线程、网络和一些数学。 也许您应该先尝试一下 .NET Native? msdn.microsoft.com/en-us/library/dn584397(v=vs.110).aspx【参考方案2】:如果您真的担心算法的知识产权,那么您有一些选择。
1) 为算法申请专利。我能听到嚎叫声,但这就是您以合法方式保护知识产权的方式。
2) 不要将带有算法的 DLL 提供给用户。将算法托管在云端,只允许客户以这种方式访问它。
其他一些我不明白。你说你会写C++,却不知道怎么写C#的接口?使用 COM。 C# 可以使用 COM 库。或者,在 C++ 中导出您的函数并编写一个使用 PInvoke 调用 C++ DLL 的 .NET 互操作库。
【讨论】:
以上是关于保护 DLL 的源代码的主要内容,如果未能解决你的问题,请参考以下文章
System.AccessViolationException”类型的未经处理的异常在 System.Data.dll 中发生。其它信息:尝试读取或写入受保护的内存。这通常指示其它内存已损坏。(代码片