Main Content

pcode

コンテンツを不明瞭化した実行可能ファイルの作成

説明

pcode(item) は、検索パス上の .m ファイルまたはフォルダー内のコードを難読化し、拡張子が .p の P コード ファイルを生成します。たとえば、itemmytest.m という .m ファイルである場合、結果のファイルは mytest.p です。item がフォルダーの場合は、そのフォルダー内のすべてのスクリプト ファイルや関数ファイルが難読化され、現在のフォルダーに保存されます。P コード ファイルは、.m ファイルへの変更後でも、対応する .m ファイルより優先的に実行されます。

メモ

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

pcode(item,"-R2022a") は、より複雑な難読化アルゴリズムを使用して P コード ファイルを作成します。この方法で難読化されたファイルは、MATLAB R2022a 以降でのみ実行されます。

pcode(item,"-R2007b") は、既定のレガシ アルゴリズムを使用して P コード ファイルを作成します。

pcode(item1,item2,...,itemN) は、コンマ区切りリストで指定された各 .m ファイルまたはフォルダーから P コード ファイルを作成します。

pcode(___,"-inplace") は、入力と同じフォルダー内に P コード ファイルを作成します。前述の構文にある任意の入力引数の組み合わせの後に、"-inplace" を指定します。

すべて折りたたむ

関数ファイルを P コード ファイルに変換します。

現在のフォルダーにある myfunc.m という名前のファイルで、3 次多項式の平方根を返す関数を定義します。

function y = myfunc(x)
y = sqrt(x.^3 + x.^2 + x + 1);
end

myfunc.m から P コード ファイルを作成します。

pcode myfunc

myfunc を呼び出すと MATLAB が P コード ファイルを使用することを確認します。

a = myfunc(3);
which myfunc
c:\myMATLABfiles\myfunc.p

現在のフォルダーにある myfunc.m という名前のファイルで、3 次多項式の平方根を返す関数を定義します。

function y = myfunc(x)
y = sqrt(x.^3 + x.^2 + x + 1);
end

myfunc.m から、より複雑な難読化アルゴリズムを使用して P コード ファイルを作成します。この方法で難読化されたファイルは、MATLAB R2022a 以降でのみ実行されます。

pcode myfunc -R2022a

myfunc を呼び出すと MATLAB が P コード ファイルを使用することを確認します。

a = myfunc(3);
which myfunc
c:\myMATLABfiles\myfunc.p

sparfun フォルダーから選択したファイルを P コード ファイルに変換します。

一時フォルダーを作成し、既存のパスを .m ファイルに定義します。

tmp = tempname;
mkdir(tmp)
cd(tmp)
filename = fullfile(matlabroot,"toolbox","matlab","sparfun","spr*.m");

P コード ファイルを作成します。

pcode(filename)
dir(tmp)
.            ..           sprand.p     sprandn.p    sprandsym.p  sprank.p     

これで一時フォルダーには、エンコードされた P コード ファイルが格納されます。

クラスの一部である入力ファイルから P コード ファイルを生成します。(同じ手順をパッケージの一部であるファイルに適用できます。) この例では、既存の MATLAB サンプル クラスを使用します。

.m ファイルを含む既存のクラス フォルダーとして classfolder を定義します。

classfolder = fullfile(docroot,"techdoc","matlab_oop", ...
    "examples","@BankAccount")
dir(classfolder)
classfolder =

C:\Program Files\MATLAB\R2019a\help\techdoc\matlab_oop\examples\@BankAccount


.              ..             BankAccount.m  

一時フォルダーを作成します。このフォルダーにはこの時点ではクラス構造体は入っていません。

tmp = tempname;
mkdir(tmp)
cd(tmp)
dir(tmp)
.            .. 

パス classfolder 内のすべての .m ファイルに対して P コード ファイルを作成します。入力ファイルはクラスの一部であるため、MATLAB では出力ファイルが同じクラスに属するようにフォルダー構造を作成します。

pcode(classfolder)
dir(tmp)
.             ..            @BankAccount 

P コード ファイルは同じフォルダー構造内に置かれます。

dir("@BankAccount")
.              ..             BankAccount.p  

入力ファイルと同じフォルダー内に P コード ファイルを生成します。

複数の .m ファイルを一時フォルダーにコピーします。

filename = fullfile(matlabroot,"toolbox","matlab","sparfun","spr*.m");
tmp = tempname;
mkdir(tmp)
copyfile(filename,tmp)
dir(tmp)
.            ..           sprand.m     sprandn.m    sprandsym.m  sprank.m 

P コード ファイルを、元の .m ファイルと同じフォルダー内に作成します。

pcode(tmp,"-inplace")
dir(tmp)
.            sprand.m     sprandn.m    sprandsym.m  sprank.m     
..           sprand.p     sprandn.p    sprandsym.p  sprank.p  

入力引数

すべて折りたたむ

難読化する .m ファイルまたはフォルダー。文字ベクトルまたは string スカラーとして指定します。

  • 入力引数にファイル拡張子がなく、フォルダーの名前もない場合、関数は MATLAB パス上または現在のフォルダー内になければなりません。

  • ワイルドカード文字 * を使用すると、pcode は、.m 拡張子のないすべてのファイルを無視します。

  • 関数 pcode はライブ スクリプトやライブ関数 (.mlx) をサポートしていません。

  • item がパッケージ フォルダーまたはクラス フォルダー内にある場合、pcode は同じパッケージまたはクラスの構造を作成し、結果の P コード ファイルを収納します。

難読化する .m ファイルまたはフォルダーのリスト。文字ベクトルまたは string スカラーのコンマ区切りリストとして指定します。このリストには、ファイルとフォルダーを混在させて含めることができます。

詳細

すべて折りたたむ

関連ファイルからの P コード ファイルの作成

プログラムに加えて、プログラムが依存している関数およびスクリプトを難読化することができます。プログラムの実行に必要なファイルを判別するには、関数 matlab.codetools.requiredFilesAndProducts を使用します。

コードの難読化

P コード ファイルは、MATLAB コードを難読化した、実行のみの形式です。P コード ファイルを MATLAB エディターまたはライブ エディターで開くことはできません。

バージョン履歴

R2006a より前に導入

すべて展開する

R2007b での動作変更