声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 8732|回复: 17

[编程技巧] 对于MATLAB M文件怎么加密呀!

[复制链接]
发表于 2008-9-5 23:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
请教:假如我有一个文件名为:fan.m的文件,怎么来对它进行加密呢?如我想让这个文件运行十次后,它就自动损坏!或者让它保存五天,它也自动损坏!有没有这方面的高手,请教一下你们呀!谢谢!
回复
分享到:

使用道具 举报

发表于 2008-9-6 00:04 | 显示全部楼层
你做的这些东西没必要加密吧:lol
 楼主| 发表于 2008-9-6 07:42 | 显示全部楼层

回复 沙发 messenger 的帖子

当然不是这个东西呀,呵呵,其实主要保密的是数学算法!所以文件也需要加密呀!呵呵
发表于 2008-9-6 08:22 | 显示全部楼层
pcode形成p文件就行了

评分

1

查看全部评分

 楼主| 发表于 2008-9-7 22:20 | 显示全部楼层

回复 地板 glise 的帖子

能不能编一个程序来控制,让它运行十次就自动损坏呀?P文件那就一定不能破解吗?想弄清楚点呀!
发表于 2008-9-7 22:50 | 显示全部楼层
两种方法:一、生成p文件;二、生成.exe文件,拿刚做好的程序试验了一下,已经验证成功,记录一下过程:

    生成p文件的方法很简单,在command wondow里面用 mcc -B pcode file.m命令转化为pcode文件,据说是不会被反编译的。他的缺点是不能够脱离Matlab单独运行,必须还在command window里面调用,可移植性不强。如果生成.exe文件就可以解决这个问题。

    生成.exe文件的方法稍微复杂点:

1、首先要保证你的程序是函数型的,而不是脚本形式的。如果是脚本形式的也不要紧,只需要在脚本文件第一行添加 function []=name()即可。

2、然后,在command window里用mcc -m -B    sgl file.m命令生成.exe文件,期间会让你选择编译器(我的是VC6.0),会发现生成了一堆文件。

3、将上步生成的那一堆文件一起拷到待运行的机器。此时仍需matlab所必需的动态连接库。将 <matlab path >/extern/lib/win32/mglinstallar.exe拷贝到到待运行机器上。
4.在待运行的机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有n个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下(我把它拷在应用程序目录下了)。而toolbox目录则必须与应用程序同一目录。
5.大功告成,双击.exe即可运行了。

评分

1

查看全部评分

发表于 2008-9-7 22:50 | 显示全部楼层
总结:两种方法都可以达到保护源代码的目的,但是各有各的优缺点。生成p文件的优点是方法简单,生成文件大小只是源代码的3倍左右,缺点是不能脱离matlab环境运行。生成.exe文件的优点是可以脱离matlab单独运行,缺点是生成的文件大小是原来的几千倍(5555555555,当然包含那些.dll文件,体积最庞大的一部分)。就拿我的程序做个比较,源码是8.34K,生成p文件22.6K,生成可执行文件(含那些.dll)共30多兆。
 楼主| 发表于 2008-9-7 22:54 | 显示全部楼层

回复 6楼 科技在线 的帖子

谢谢,我试试哈,呵呵!P文件就怕被反编译了,或者被别人看到了原代码!所以就想找个别的办法来保护一下文件!
 楼主| 发表于 2008-9-7 22:59 | 显示全部楼层

回复 7楼 科技在线 的帖子

mcc和-B,-m表示什么意思呀,谢谢!
发表于 2008-9-7 23:58 | 显示全部楼层

如果我记得没错pcode主要目的为加快运行速度 !
而且使用matlab最大优势之一, 不就是交换性容易吗 ?

[ 本帖最后由 ChaChing 于 2008-9-8 00:02 编辑 ]
 楼主| 发表于 2008-9-8 12:53 | 显示全部楼层

回复 6楼 科技在线 的帖子

mcc -m -B sgl sanquan.m
??? Undefined command/function 'mcc'.,为什么我运行的时候,总说我没有定义mcc呀
发表于 2008-9-8 12:54 | 显示全部楼层

回复 9楼 fanzhenjie 的帖子

就是一个命令而已
发表于 2008-9-8 12:57 | 显示全部楼层
有一篇文章可能对这个有引导帮助的作用

matlab中如何封装打包成exe文件

方法一:
已有gui.m文件和gui.fig文件
1 在matlab的command窗口中输入
mcc -B sgl GUI.m
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器


此时仍需matlab所必需的动态连接库。
3. 将 <matlab path >/extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在将在指定目录下解压缩出bin和toolbox两个子目录,
其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共
有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。
而toolbox目录则必须与应用程序同一目录。
方法二:matlab编程很方便,强大的矩阵运算功能,很多好用的工具箱,但是一般程序都要在matlab环境中运行,能否脱离这个环境打包发布呢,matlab也提供了这样的工具。

1. 转化为c/c++程序并编译为.exe
先验证mcc是否可用,用matlab中的example验证即可
建议不用matlab默认的lcc 编译器(可能有问题),可使用VC6编译器(按默认路径安装)
由于带有界面,需要图像库支持,编译时应使用命令: mcc -B sglcpp pressure
编译生成若干c/c++源码,以及.exe文件、bin目录中figure菜单条/工具条文件(.fig)等
程序发布需要.exe、bin\、.fig

2. 在未装matlab的电脑上运行程序需要数学 运行时库、图像运行时库以及用到的工具箱mex文件
前两者已经在\matlab\extern\lib\win32mglinstaller.exe压缩包中,将其解压,并在环境变量path中添加解压到的路径
另外若程序中还用到其他工具箱的东西,那么需要将此工具箱中需要的mex文件也一并放在解压到的路径,子文件夹位置与matlab中的位置相同

3. 在确保.exe程序可以运行的情况下 可以用setup factory打包发布
以下通过注册表自动添加path路径
%--------------------------------------------------------------------------------------
Screen.Next(); -- 进入下一个屏幕
resultDialog = Dialog.Message("注意", "向环境变量中加入matlab数学库及图象库的安装路径?", MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1);
if (resultDialog == IDYES) then --加入安装路径
strPath = Registry.Get(HKEY_CURRENT_USER, "Environment", "path", true);
if strPath ~= "" then
   strPath = String.Concat(strPath, ";");
end   
strPathToAdd = SessionVar.Expand("%AppFolder%");
strPathToAdd = String.Concat(strPathToAdd,"//MATLAB6p5//bin//win32");  
-- 如果路径中无该位置,则加入
if String.Find(strPath,strPathToAdd) == -1 then  
   strPath = String.Concat(strPath, strPathToAdd);
   Registry.Set(HKEY_CURRENT_USER, "Environment", "path", strPath, REG_SZ);
end
end
%--------------------------------------------------------------------------------------

方法三:在网上搜了一个方法,还没有用过, 贴在这里仅供参考:
一、 完全可以,而且生成的.exe文件可以在没有安装matlab的机器上使用,方法吗---
首先,使用mcc编译得到.exe文件,具体参数见帮助文件;
其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件
第三,在MATLAB环境,执行命令
mcc   -m   -B    sgl   file.m  
或者     mcc -p   -B   sglcpp   file.m  
请键入help   mcc看帮助。
mcc是在“command    windows”    用的吗?
只要“mglinstaller.exe”,与.exe文件及相关资源文件就可以了吗.
还有“添加环境变量path”是path到.exe文件的环境中是吧?

二、 在matlab下的workspace里打comtool,点file-open project将我们先前建好的comtest.cbl工程文件打开,再点component--package component就实现了打包,此时到comtest\distrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的_install.bat就可以实现安装
三、 如何将gui生成exe ?
已有gui.m文件和gui.fig文件
1 在matlab的command窗口中输入
mcc -B sgl GUI.m
2.将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器
此时仍需matlab所必需的动态连接库。
3. 将 <matlab path >/extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上
4.在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在bin\win32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。
发表于 2008-9-8 14:35 | 显示全部楼层
hehe,受教了,谢谢科技在线
 楼主| 发表于 2008-9-8 17:42 | 显示全部楼层

回复 13楼 科技在线 的帖子

谢谢科技在线的耐心指导,可是我的电脑为什么我按照你的方法,第一步我在命令窗口输入的时候,就出现错误呢,好像没mcc: mcc -B sgl sanquan.m
??? Undefined command/function 'mcc'.

>> help mcc

mcc.m not found.

Use the Help browser Search tab to search the documentation, or
type "help help" for help command options, such as help for methods.
,就出现这种错误了呀,不知道为什么!帮助里面也没有mcc呀
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-3 01:30 , Processed in 0.071221 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表