メインコンテンツ

P コードを使用したコンテンツ不明瞭化ファイルの作成

P コード ファイルは、生成元の MATLAB® ソースと同様に動作します。さらに、P コード ファイルはソース ファイルと同じ速度で実行されます。P コード ファイルは意図的に難読化されています。

メモ

セキュリティについての考慮事項: 関数 pcode は、独自の難読化されたコード形式で MATLAB プログラム ファイルを生成します。機密コードやデータを保護するため、複数の方法を組み合わせることを検討してください。詳細については、ソース コードを保護するためのセキュリティについての考慮事項を参照してください。

P コード ファイルの作成

P コード ファイルを生成するには、MATLAB コマンド ウィンドウで次のコマンドを入力します。

pcode file1.m file2.m

このコマンドにより、file1.pfile2.p などのファイルが生成されます。現在のフォルダーに存在するすべての .m ソース ファイルを P コード ファイルに変換するには、次のコマンドを使用します。

pcode *.m

P コード ファイルを生成するすべての構文の詳細については、関数 pcode のリファレンス ページを参照してください。

ローカル識別子の難読化

matlab.lang.obfuscateNamespcode -R2022a と組み合わせて使用すると、ローカル変数、ローカル関数、および入れ子関数の名前を一般的な名前に置き換えることによって、ソース コードをさらに難読化できます。

メモ

難読化された名前を含むコードは、ソース コードとは異なる動作をする可能性があります。matlab.lang.obfuscateNames は、x = 1if x < 5、および f(x+y)x など、コード内で直接出現する箇所のみを難読化します。eval("f(x+y)")clear x など、string、文字ベクトル、コマンド構文の引数内の出現箇所は難読化されません。

たとえば、次の関数 myfunc のソース コードがあるとします。

function outputArg = myfunc(inputArg1,inputArg2)
    sumVar = inputArg1 + inputArg2;
    prodVar = inputArg1*inputArg2;

    outputArg = sumVar/prodVar;
end

matlab.lang.obfuscateNames を使用して、ローカル名を難読化して新しいファイルに myfunc を書き込みます。

matlab.lang.obfuscateNames("SourceCode\myfunc.m","ObfuscatedCode\myfunc.m")

新しいファイルでは、ローカル識別子の名前が一般的な名前に変更されています。

function outputArg = myfunc(inputArg1,inputArg2)
    id242487092 = inputArg1 + inputArg2;
    id40037619 = inputArg1*inputArg2;

    outputArg = id242487092/id40037619;
end

入力引数と出力引数の名前は変更されていないことに注目してください。名前 ansvararginvarargout、および load 関数のリテラル引数として使用されている名前は、難読化されていません。

難読化されたコードを徹底的にテストして、意図したとおりに機能していることを確認します。MATLAB テスト フレームワークを使用して、難読化されたコードの動作を検証する自動テストを作成することを検討してください。コードが期待どおりに動作しない場合は、PreserveNames およびその他の名前と値の引数を使用して難読化プロセスを制御します。

outputFile に書き込まれるソース コードは、UTF-8 でエンコードされます。

P コード ファイルの呼び出し

生成された P コード ファイルは、生成元となった MATLAB .m ソース ファイルの呼び出しと同じ方法で呼び出すことができます。たとえばファイル myfun.p を呼び出すには、次のように入力します。

[out1,out2] = myfun(in1,in2);

スクリプト myscript.p を呼び出すには、次のように入力します。

myscript;

P コード ファイルを呼び出すと、MATLAB では、そのファイルが対応する .m ソース ファイルに優先して実行されます。これは、P コード ファイルの生成時にソース コードを変更した場合にも適用されます。コードを配布する前に、忘れずに .m ソース ファイルを削除してください。

MATLAB の新しいバージョンでの古い P コード ファイルの実行

P コード ファイルは、その作成に使用したリリースおよびそれが使用されるリリースとは関係なく機能するように設計されています (下位互換性および上位互換性)。MATLAB の新機能と非推奨の機能は、エラーの原因になる可能性がありますが、このようなエラーは元の MATLAB ソース ファイルを使用した場合にも発生します。P コード ファイルでこの種のエラーを修正するには、対応する MATLAB ソース ファイルを修正し、新しい P コード ファイルを作成します。

MATLAB Version 7.4 (R2007a) 以前を使用して作成した P コード ファイルの形式は、MATLAB の新しいバージョンで作成したものと異なります。これらの古い P コード ファイルは MATLAB V8.6 (R2015b) 以降では実行できません。MATLAB V7.4 以前でビルドされた P コード ファイルは、より新しいバージョンの MATLAB でリビルドしてから、必要に応じて再配布してください。

参考

トピック