0

保護する必要のあるプライベートデータを含む関数を含むモジュールがあります。可能であれば、モジュール全体を絶えずコンパイルする手間をかけたくありません。

関数を呼び出して情報を取得できるようにしたいのですが、このスクリプトをさまざまなマシンに配置して、アクセスしたり、出力の取得に使用する情報を持っていない人がコードを読み取ったりする必要があります。 。

PowerShellスクリプトのコンパイルについて何かを見ました。コンパイル時に、モジュールによって提供されるコマンドとして含めることができますか?

どうすればこれに取り組むことができますか?

4

2 に答える 2

2

これを行うための良い方法はありません。特に、面倒に対する許容度が非常に低く、C#モジュールのコンパイルが不要な場合はそうです。

コードがスクリプト内にある場合は、シークレットデータを難読化したとしても(おそらくbase64エンコーディングなどを使用して)、ある種の難読化解除コードが必要です。もちろん、ユーザーはそれを見ることができます。その後、彼らは自分たちで秘密を簡単に難読化することができます。または、プライベート関数にブレークポイントを設定して、必要なものを確認します。

C#コマンドレットをコンパイルした場合でも、リバースエンジニアリングは非常に簡単です。Reflectorのようなツールは、コンパイルされたアセンブリのソースコードをほとんど表示します。

したがって、フルグレードの暗号化ソリューションの構築に投資する意思がない限り、ユーザーは必要に応じて最小限の労力であなたの秘密を見ることができます。

于 2012-09-18T21:24:58.067 に答える
1

基本的な答えは、PowerShellは難読化のために設計されたものではないということです。箱から出して、コードを保護する方法はありません。ある程度、これは非常に意図的なものです。コードを読んで検証し、活用/拡張して、最大限の再利用性を実現してもらいたいのです。

Latkinが示唆するように。最善の方法は、c#を使用してコードをコンパイルすることですが、それでもリフレクションを使用して表示できます。http://blogs.msdn.com/b/ericgu/archive/2004/02/24/79236.aspxには、C#コードを難読化する方法に関するヒントがいくつか記載されています。

コードが商業的に機密である場合は、機密性を把握し、それに応じてアクションを実行する必要があります。コードをC#に変換することはそれほど難しくありません(VSがあり、C#を知っていると仮定します!)。C++でコーディングしてから相互運用機能を使用して呼び出すことを提案するのは大変な作業のようですが、保護するコードの値によって異なります。 。したがって、コードが本当に機密性の高いものである場合、オプションはありますが、簡単なものではありません。

これがあなたが望んでいた答えではない場合は申し訳ありません。

于 2012-09-19T09:51:44.767 に答える