我把 mcc 编译的 MATLAB EXE 丢进 IDA Pro 后,发现了这些恐怖的东西

0 阅读2分钟

如果你是 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 文件修改/注入✅ 可以❌ 完整性校验,修改后拒绝运行

对正常用户来说,加固前后运行体验完全一致——没有额外的启动延迟,没有性能损耗,没有界面变化。但对逆向分析来说,各层防护会依次触发。

操作步骤

  1. mcc -m 正常打包 EXE
  2. 打开 MatLock,选择"EXE 加固"
  3. 导入 EXE,选择加固等级
  4. 执行加固,生成加固版 EXE
  5. 交付加固版

就这么简单。

👉 免费体验:matlock.open2ai.cn