需求

好多之前师兄师姐或其他前辈留下的matlab p代码,但是运行到现有研究中出现各种报错,师兄师姐也联系不上了,但是研究还得继续,但又不想重新来写,导师要求又很急,因此想到matlab简单加密的P代码能不能转换为m源代码,然后在这个基础上进一步研究新的课题

当初编译为P代码的出发点,可能也是为了保护知识产权,防止一些不怀好意的人侵权。

加密为P代码操作

P文件是对应M文件的一种预解析版本(preparsed version)。因为当你第一次执行M文件时,Matlab需要将其解析(parse)一次(第一次执行后的已解析内容会放入内存作第二次执行时使用,即第二次执行时无需再解析),这无形中增加了执行时间。所以我们就预先作解释,那么以后再使用该M文件时,便会直接执行对应的已解析版本,即P文件。但又因为Matlab的解析速度非常快,一般不用自己作预解析。只有当一些程序要调用到非常多的M文件时,如GUI应用程序时,才会作预解析,以增加以后的调用速度。
P文件可以用来作保密代码之用,如果你给别人一个M文件,别人可以打开来看到你所有的代码和算法。如果你的代码不想被别人看到,那可以给他P文件。

m代码到p代码的转换是通过调用pcode函数实现。

pcode(fun)

]对 fun.m 中的代码进行模糊处理并生成名为 fun.p 的文件,即所谓的p文件。如果fun是一个文件夹,则该文件夹中的所有脚本或函数文件都在p文件中进行模糊处理。MATLAB 在当前文件夹中创建p文件。原始的 .m 文件或文件夹可以位于搜索路径上的任何位置。

pcode(fun1,...,funN)

从列出的文件创建p文件。如果输入了任意个文件夹,则 MATLAB 为各文件夹所包含的每个 .m 文件创建一个p文件。

pcode(fun,'-inplace')

在脚本或函数文件所在的同一个文件夹中创建p文件。

将P解密为m文件的操作

调用自编python代码,批量解密为m文件。
例如,OpenSeesNavigator 2.5.8为P文件。
Matlab P代码加密与解密-编程之家
Matlab P代码加密与解密-编程之家

解密后的m文件:
Matlab P代码加密与解密-编程之家
欢迎交流。有需要可以联系,idealzeng@qq.com。