Skip to Content
新しいバージョン 12 を公開しました 🎉
Obfuscatorコード暗号化アルゴリズムの保護

コード暗号化によるアルゴリズムの保護

独自のアルゴリズムは、多くの場合アセンブリの中で最も価値のあるものです。同時に、デコンパイラーでそのまま抜き出すのが最も簡単なものでもあります。このサンプルでは、Babel Obfuscator の NuGet パッケージを使い、MSBuild プロパティ 1 つでスコアリングエンジンに MSIL コード暗号化を適用します。これは最も単純なコード暗号化の構成で、Babel Licensing も実行時のライセンスも必要ありません。既定のコード暗号化はキーをバイナリに埋め込むため、保護されたアプリケーションは単独で動作します。

このサンプルを使用するには、Babel Obfuscator のサイトライセンス(Ultimate、Server、Data Center のいずれかのエディション)が必要です。ソースコードは GitHub で公開しています。

git clone https://github.com/babelfornet/code-encryption-nuget-example.git

保護するコードは、独自のスコアリングアルゴリズム(src/AlgorithmApp/ScoringEngine.cs)です。競合他社にデコンパイラーで抜き出されたくない種類の知的財産です。

internal static class ScoringEngine { public static int Score(int recency, int frequency, int monetary) { int r = Bucket(recency, 3, 12, 30); int f = Bucket(frequency, 2, 5, 12); int m = Bucket(monetary, 50, 250, 1000); return Normalize(r * 25 + f * 17 + m * 11); // vendor's secret weighting } // Bucket / Normalize … }

暗号化後、Score、Bucket、Normalize の本体は IL から消え、実行時に Babel Virtual Machine だけが再構築します。AlgorithmApp コンソールプロジェクトは、Release で機密性の高い型を暗号化します。

<ItemGroup Condition="'$(Configuration)' == 'Release'"> <PackageReference Include="Babel.Obfuscator" Version="12.0.0"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> </ItemGroup> <PropertyGroup Condition="'$(Configuration)' == 'Release'"> <MsilEncryption>AlgorithmApp\.ScoringEngine::.*</MsilEncryption> <BabelWarningsAsErrors>W00000</BabelWarningsAsErrors> </PropertyGroup>

MsilEncryption は、暗号化するメソッドを選択する正規表現です。ここでは ScoringEngine 型のすべてのメソッドを選択しています。Babel はこれらのメソッド本体を、Babel Virtual Machine だけが実行できる独自の暗号化された命令に書き換えます。これは既定の(<Source> を指定しない)コード暗号化であるため、Babel のライセンスが必要なのはビルド時だけで、保護されたアプリケーションは単独で動作します。

サンプルを Release でビルドすると、プログラムの出力は変わらないまま 3 つのスコアリングメソッドが暗号化され、アルゴリズムの IL はアセンブリに存在しなくなります。暗号化されたコードのロックを有効なライセンスでのみ解除できるようにし、ライセンスチェックを取り除くだけでは不十分にするには、この後に続くライセンスを使ったサンプルを参照してください。

Last updated on