可通过pcode对MATLAB脚本文件进行加密处理,用于分享给第三方时,保护自己核心算法文件的所有权。
加密后的文件不改变程序功能,只是将程序设置为可使用但不可查看(包括加密者本人)。
代码一旦加密便不能被反编译。因此用户一定要注意备份源文件。
加密后的文件只能在MATLAB环境下使用。
注:执行中p文件优先于同名的m文件。
1 加密方法
MATLAB中对pcode的使用作了相关说明:
>> help pcode
pcode - 创建对代码内容进行了模糊处理的可执行文件
此 MATLAB 函数 对搜索路径中 .m 文件或文件夹中的代码进行模糊处理,并生成扩展名为 .p
的 P 代码文件。例如,如果 item 是名为 mytest.m 的 .m 文件,则生成的文件是
mytest.p。如果 item 是一个文件夹,则该文件夹中的所有脚本或函数文件都经过模糊处理并保
存在当前文件夹中。在执行中 P 代码文件优先于对应的 .m 文件,即使已对 .m 文件进行了修改
也是如此。
pcode(item)
pcode(item,"-R2022a")
pcode(item,"-R2007b")
pcode(item1,item2,...,itemN)
pcode(___,"-inplace")
输入参数
item - 要模糊处理的 .m 文件或文件夹
字符向量 | 字符串标量
item1,item2,...,itemN - 要模糊处理的 .m 文件或文件夹的列表
字符向量 | 字符串标量
另请参阅 which
已在 R2006a 之前的 MATLAB 中引入
pcode 的文档
2 加密操作
2.1 加密 .m文件
将下列函数保存为times.m文件:
function [f] = times(a,b)
f = a * b ;
end
此时对文件进行加密:
>> pcode times
>>
加密后文件夹里出现p文件:
此时即使删去.m文件,p文件也能单独运行。
甚至更改p文件的名字,也能运行:
>> times3(2,3)
ans =
6
2.2 加密文件夹
pcode除了加密文件,还可以加密文件夹。
如图,在code文件夹里放置两个m文件:
将MATLAB工作目录设置为要加密文件夹的上一层:
如下加密:
>> pcode code
>>
加密之后,在加密文件夹同级目录下出现加密后的所有文件:
2.3 加密其它文件
如加密.mat文件:
>> pcode matlab
>>
2.4 加密GUI
GUI也是一种.m文件,直接对GUI的名字加密即可。加密方式同m文件。
加密之后用户只能运行GUI,但不能查看GUI后端代码。
2.5 其它加密方法
p文件被破解是可能的。使用 MATLAB Compiler 将源代码文件生成独立应用程序(.exe)会更安全。且能脱离MATLAB环境运行,但文件大小呈千倍放大。后续会介绍。
3 解密p文件
有些破解大牛提供了破解工具。
可以参考这篇博客:MATLAB .p转换为 .m文件