0

我有一个模块,其中包含一个带有一些应该保护的私有数据的函数。如果可能的话,我不希望不断编译整个模块的麻烦。

我希望能够调用该函数并从中获取信息,但我需要将此脚本放在可以访问它的各种机器上,并且代码由不应该拥有用于派生输出的信息的人读取.

我看到了一些关于编译 PowerShell 脚本的东西。编译后,它们是否可以作为模块提供的命令包含在内?

我该怎么办?

4

2 回答 2

2

没有好的方法可以做到这一点,特别是如果您对麻烦的容忍度如此之低,以至于编译 C# 模块是不可能的。

如果您的代码在脚本中,那么即使您混淆了秘密数据(可能使用 base64 编码或其他方式),您也需要某种去混淆代码,用户当然可以看到这些代码。然后他们可以简单地自己去混淆秘密。或者在私有函数中设置一个断点,看看他们想要什么。

即使您编译 C# cmdlet,逆向工程仍然非常容易。像 Reflector 这样的工具几乎可以向您展示任何已编译程序集的源代码。

因此,除非您愿意投资构建一个完整的加密解决方案,否则用户将能够轻松查看您的秘密,如果他们愿意的话。

于 2012-09-18T21:24:58.067 回答
1

基本的答案是 PowerShell 从来都不是为混淆而设计的。没有办法开箱即用地保护您的代码。在某种程度上,这是非常有意的——我们希望人们阅读、验证和利用/扩展代码以获得最大的可重用性。

正如拉特金所建议的那样。最好的方法是使用 c# 编译代码——但即使这样也可以使用反射来查看。http://blogs.msdn.com/b/ericgu/archive/2004/02/24/79236.aspx提供了一些关于如何混淆 C# 代码的提示。

如果您的代码具有商业敏感性,那么您需要确定敏感程度并采取相应措施。将您的代码转换为 C# 并不难(假设您有 VS 并且知道 C#!),虽然建议在 C++ 中编码然后使用互操作调用它似乎很难,但这完全取决于您所保护的代码的价值. 所以如果代码真的很敏感,你有选择,但它们并不容易。

抱歉,如果这不是您想要的答案。

于 2012-09-19T09:51:44.767 回答