动态解密和编译源代码

时间:2014-01-30 06:19:43

标签: c# .net security encryption dynamic-compilation

我遇到以下情况: 我需要在客户机上动态编译程序集,所以目前我正在部署该程序集的源代码和我的主可执行文件,然后使用MSBuild将源动态编译为程序集。
由于我不想公开发布我的源代码和应用程​​序,我想在运行加密的源文件,然后在构建之前在客户端机器上解密它。但即使在这里,任何人都可以在解密点之后停止执行,并且在编译和源删除之前我的源将在那里未加密。
有没有办法保护我的源码,同时在客户端编译它?

PS:我知道最好不要担心盗窃源代码,但我也不想让它像脚本小子一样容易获得。


编辑:我可能需要一个混淆工具,将源代码转换为混淆代码(不是混淆程序集)。然后,我可以将这个混淆的代码与我的应用程序一起发送并即时编译。

2 个答案:

答案 0 :(得分:1)

您可以使用ObfuscationObfuscation in .NET),这实际上会让您的代码难以理解为人类读者。

如果仍然没有为您削减它,那么您可以考虑将您的逻辑创建为Web服务,然后您只需公开您的API而不是整个解决方案。话虽如此,由于您必须创建一个将使用您的Web服务的客户端应用程序,这很可能最终会成为更多工作​​。

编辑: 根据您的评论,您可能需要查看this MSDN页面,其中显示了如何通过调用Dotfuscator来自动化混淆过程。这应该随你的IDE自由发货。就我而言,我有一个位于此处的MSI文件(我认为您需要先安装它):{VS2010 ISO}\WCU\Dotfuscator\DotfuscatorCE.msi

答案 1 :(得分:1)

随机建议:

对于稍微隐藏的代码,您可以将其作为资源嵌入到程序集中,然后在编译之前保存。

作为额外的步骤,你可以保存为IL而不是C# - 可能更难以阅读但更难阅读(特别是如果你使用IL的混淆代码)。

或者使用CodeDOM或IL构建器直接从代码创建程序集。

确实,重新组织代码可能会更好,因此您根本不需要包含代码,只需添加客户端代码......