haspベンダーコードは暗号化/難読化されるべきですか?
-
27-12-2019 - |
質問
これはSafeNet / AlAddin Sentinel HASPキーに関するものです。私は彼らのサイトに投稿しましたが、他の誰かが答えを知っているか、私がここに投稿している答えを見つけるでしょう。
「ソフトウェア保護とライセンスGUID.pdf」のSafeNetによって提供されたドキュメントに従って、ベンダーコードを秘密にしておくと考えられています。
まあ、 "\ samples \ runtime \ csharp \"で提供されているサンプルを封筒で保護してから、JetBrains Dotpeekで包み込んだアプリを逆コンパイルして、ベンダーコード文字列が非常に簡単に表示できます。封筒はconst文字列を難読化しないようです。あるいはそれはクラスレベルの文字列です、私は知りません。
これはベンダーコードを使用する推奨される方法ですか?とても秘密のようです。ベンダーコード文字列を関数内の一時変数に入れると、難読化されます。それはそれが行われるべき方法ですか?もしそうなら、サンプルコードがそれを反映してはいけませんか?
ありがとう。
解決
私たちは同じことに気づいた。 const
文字列は難読化されていないため、const変数が時定数をコンパイルすると、コンパイラはコンパイル時に定数値自体を持つconst
変数に参照を置き換えることができます。そのため、基本的には、包み込まれたプロセスが開始される時までに難読化するconst
フィールドはありません。 (これは完全にtrueではありません - const
の定義はILに永続化されますが、ドキュメントの目的のためだけに永続化されます。任意のコードによっては参照されません。)
これに対処した方法は、static
コンストラクタで初期化されたreadonly
static
文字列を使用することによって行われます。これを実行すると、文字列値がランタイム定数として格納され、エンベローププロセスが難読化のために適切にアクセスできるようになります。 (これはあなたが言及されているように、アセンブリを分解することによって検証されます。)