如果你是 MATLAB 开发者,而且用 mcc -m 打包过独立程序,这篇文章可能会让你不安。
实验环境
- MATLAB R2024a
- mcc 编译一个包含核心算法的独立 EXE(约 800MB,含 MCR)
- IDA Pro 8.3
- ILSpy 7.2
实验过程
步骤 1:用 ILSpy 打开 EXE
直接拖入 ILSpy,在 .NET 程序集中找到了 MATLAB 编译后的程序集。展开命名空间后,看到了什么?
MyAlgorithm.main()
MyAlgorithm.processData()
MyAlgorithm.calculateResult()
函数名完整保留。
步骤 2:查看函数内部
反编译后发现,MATLAB Compiler 打包后的代码结构非常清晰:
- 函数调用链完整
- 变量名大部分保留(局部变量可能被重命名,但参数名和全局变量名都在)
- 字符串常量(路径、文件名、错误信息)全部明文
- 注释可能被移除,但代码逻辑完全可以还原
步骤 3:用 IDA Pro 分析
IDA Pro 打开后,可以在 Strings 窗口中直接搜索到所有字符串常量,包括:
- 文件读写路径
- 算法参数名
- 错误提示信息
- 甚至 MATLAB 函数调用痕迹
结论:mcc 打包的 EXE 对逆向工程几乎不设防。
如何加固?
如果你有商业价值的 MATLAB EXE 需要保护,建议在 mcc 打包之后、交付之前做一层加固。推荐使用 MatLock 的 EXE 加固功能:
加固后的效果对比:
| 测试项 | 加固前 | 加固后 |
|---|---|---|
| ILSpy 反编译 | ✅ 完整还原源码 | ❌ 程序集无法解析 |
| IDA Pro 静态分析 | ✅ 字符串/函数名可见 | ❌ 字符串加密、函数表混淆 |
| x64dbg 动态调试 | ✅ 可附加调试 | ❌ 检测到调试器后立即退出 |
| Process Dump 内存转储 | ✅ 可提取代码段 | ❌ 内存保护,关键段动态解密 |
| PE 文件修改/注入 | ✅ 可以 | ❌ 完整性校验,修改后拒绝运行 |
对正常用户来说,加固前后运行体验完全一致——没有额外的启动延迟,没有性能损耗,没有界面变化。但对逆向分析来说,各层防护会依次触发。
操作步骤
mcc -m正常打包 EXE- 打开 MatLock,选择"EXE 加固"
- 导入 EXE,选择加固等级
- 执行加固,生成加固版 EXE
- 交付加固版
就这么简单。
👉 免费体验:matlock.open2ai.cn