Skip to Content
新しいバージョン 12 を公開しました 🎉
Obfuscator値の暗号化

値と配列の暗号化

コード内にインラインで宣言された定数値や配列には、データの暗号化キーなど、逆アセンブラーやリバースエンジニアリングから隠しておきたい重要なデータが含まれていることがよくあります。Babel Obfuscator には、これらの定数値と配列を暗号化する機能があり、機密情報に保護レイヤーを追加できます。

Babel Obfuscator には、int32、int64、single、double、配列など、さまざまなデータ型のインラインの値を暗号化するための構成オプションがあります。これらのオプションを使って特定の型の値を暗号化することで、コードのセキュリティを高められます。

int32 と int64 の値を暗号化すると、整数や長整数といったこれらの型の数値データが、不正なアクセスから保護されます。同様に、single と double の値を暗号化すると、小数や実数などの浮動小数点数が保護されます。これらのインラインの値を暗号化することで、コード内の機密性の高い数値データが簡単に解読されたり変更されたりするのを防げます。

さらに Babel Obfuscator では、コード内にインラインで宣言された配列も暗号化できます。配列は要素の集まりであり、暗号化することで、含まれるデータの機密性と整合性を確保しやすくなります。この暗号化のレイヤーにより、攻撃者がコードを解析またはデコンパイルできたとしても、配列の内容を把握することはできません。

このセクションでは、次の内容を説明します。

仕組み

ビルド時に、Babel はメソッド本体から定数を取り除き、参照に置き換えます。リテラルを読み込む ldc 命令は書き換えられ、値はアセンブリに埋め込まれた暗号化されたテーブルから取得されて、実行時に必要に応じて復号されます。数値定数(int32、int64、single、double)は型ごとに集められてこのテーブルに暗号化され、元の読み込みはそれぞれ、復号された値を返す小さな呼び出しになります。インラインの配列も同様に処理されます。通常はアセンブリに平文の BLOB として格納される配列の初期化データが暗号化され、実行時に再構築されます。

その結果、デコンパイラーは IL の中に実際の数値や配列の内容を見つけられなくなり、不透明な暗号化されたテーブルへのインデックスしか見えません。値はコードの実行に合わせて必要になった時点で復号されるため、動作は変わりません。

FIPS が有効なホストにデプロイする場合:暗号化された値と配列は、実行時にプラットフォームの暗号化プロバイダーを通じて復号されます。そのため、認定済みの OpenSSL FIPS プロバイダーがない FIPS が有効なホストで実行されるコンテナーは、起動に失敗することがあります。原因と対処方法については、FIPS 準拠を参照してください。

値と配列の暗号化を有効にすると、実行時の暗号化と復号の処理により、パフォーマンスにわずかなオーバーヘッドが生じることがあります。そのため、アプリケーション固有のニーズに基づいて、セキュリティとパフォーマンスのトレードオフを慎重に評価することが重要です。パフォーマンスを参照してください。

Last updated on