如何隐藏PowerShell模块中的单个函数?

时间:2012-09-18 19:26:20

标签: security powershell code-access-security

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

我希望能够调用该函数并从中获取信息,但是我需要将此脚本放在可能被访问的各种计算机上,并且由不应该使用该信息的人读取代码得出输出。

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

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

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

如果您的代码是脚本,那么即使您对秘密数据进行模糊处理(可能使用base64编码等),您也需要某种去混淆代码,当然用户可以看到。然后,他们可以简单地对秘密进行去混淆。或者在私有函数中设置断点并查看他们想要的内容。

即使您编译C#cmdlet,它仍然很容易进行逆向工程。像Reflector这样的工具几乎会向你展示任何已编译汇编的源代码。

因此,除非您愿意投资组建全级加密解决方案,否则用户将能够以最小的努力查看您的秘密。

答案 1 :(得分:1)

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

Latkin建议。最好的方法是使用c#编译代码 - 但即便如此也可以使用反射来查看。 http://blogs.msdn.com/b/ericgu/archive/2004/02/24/79236.aspx给出了一些关于如何模糊C#代码的提示。

如果您的代码具有商业敏感性,那么您需要弄清楚其敏感程度并采取相应措施。将代码转换为C#并不困难(假设你有VS并且知道C#!),虽然在C ++中使用interop来调用它的建议似乎很难,但这一切都取决于你要保护的代码的价值。因此,如果代码真的很敏感,你可以选择,但它们并不容易。

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