Skip to Content
新しいバージョン 12 を公開しました 🎉
Obfuscatorコード暗号化外部コードファイル

外部コードファイル

メソッドにコード暗号化を適用すると、Babel Obfuscator はそのメソッドの暗号化されたコードを抽出し、ターゲットアセンブリの外部に独立したバイナリファイルとして保存できます。このバイナリファイルにはメソッドの暗号化された MSIL コードが含まれ、メソッドが呼び出されたときに、BVM が実行時にメモリへ読み込みます。

暗号化されたコードはメインの実行可能ファイルに含まれないため、アプリケーションとは別に配布できます。これにより、暗号化されたコードを含む外部ファイルをライセンスと一緒に配布する、機能ベースのライセンスの作成など、さまざまなシナリオが可能になります。

特定のメソッドについて暗号化されたファイルを生成するには、「msil encryption」機能の Source プロパティを使って、暗号化するメソッドにタグを付ける必要があります。これにより、どのメソッドを暗号化して別のファイルに取り出すかを Babel に指示します。Source プロパティは、Cache、MinInstructionCount、MaxInstructionCount と並んで、「msil encryption」機能で使用できる XML プロパティの 1 つです(XML ルールを参照)。Source プロパティに一意の名前を設定すると、ルールに一致したすべてのメソッドにその名前を関連付け、それらのメソッドの暗号化されたデータを含む独立したファイルを生成できます。

<Rule name="encrypt algorithms" feature="msil encryption" exclude="false"> <Target>Methods</Target> <Pattern>ACME.Algorithms::*</Pattern> <Properties> <Source>algorithms</Source> </Properties> <Description>Encrypt code in Algorithms class.</Description> </Rule>

msil encryption 機能のこのルールは、Algorithm 内のすべてのメソッドを暗号化するように Babel Obfuscator に指示します。また、Source プロパティを「algorithms」に設定しているため、Babel は暗号化されたバイトコードを「algorithms.eil」という名前の外部ファイルに保存します。

実行時に Algorithms クラスのいずれかのメソッドが呼び出されると、BVM は外部ファイル algorithms.eil に保存された暗号化済みのバイトコードを取得する必要があります。そのために、BVM は次のシグネチャを持つメソッドを探します。

[Obfuscation(Feature="msil encryption get stream")] internal static Stream GetSourceStream(string source)

このメソッドには、System.Reflection.ObfuscationAttribute 属性と「msil encryption get stream」機能を指定する必要があります。BVM はこのメソッドを見つけると、暗号化されたメソッドに関連付けられた暗号化データソースの名前(この場合は「algorithms」)を渡して呼び出します。GetSourceStream メソッドは、要求されたデータソースの暗号化されたバイトコードを含む Stream オブジェクトを返す必要があります。これで、BVM は要求されたメソッドを復号して実行できます。

Last updated on