1. 项目背景与需求解析
三菱FX3U系列PLC作为工业自动化领域的经典机型,其程序保护机制一直存在明显缺陷。官方提供的密码保护功能在实际应用中形同虚设,通过GX Works2等编程软件可以轻易绕过密码读取程序。这个问题在设备维护、二手设备流通等场景下造成了严重的信息安全隐患。
我在实际工程中遇到过多次案例:某食品厂的生产线程序被竞争对手完整复制,某污水处理站的工艺参数被离职员工恶意篡改。这些事件促使我深入研究FX3U的底层通信协议,最终在V10.5版本源码基础上开发出了真正有效的禁止上传功能。
2. 技术实现原理
2.1 三菱MC协议分析
FX3U通过内置的MC协议(MELSEC Communication Protocol)实现程序上传下载。该协议采用端口5002/TCP,通信过程包含三个关键阶段:
- 握手阶段:发送固定格式的握手帧(A5FF03000000)
- 指令传输:包含操作类型(读/写)、起始地址、数据长度等参数
- 数据交换:实际程序代码或寄存器的传输
2.2 关键寄存器拦截
通过逆向工程发现,D8251寄存器控制着通信协议的响应行为。当该寄存器值为82时,PLC会正常响应上传请求;其他值时则拒绝响应。源码修改的核心就是在通信初始化阶段强制改写该寄存器值:
assembly复制; 修改后的通信初始化代码片段
MOV D8251, K0 ; 默认设置为0禁止上传
2.3 动态验证机制
为增强安全性,我们设计了动态验证方案:
- 在PLC启动时读取特定存储器的预设值(如D1000)
- 只有当D1000=8251时才临时开放上传权限
- 上传完成后自动重置D8251为0
3. 完整实现步骤
3.1 开发环境准备
- 三菱GX Works2 V1.91以上版本
- FX3U PLC硬件(确认固件版本≥V10.5)
- USB-SC09编程电缆
- 十六进制编辑器(推荐HxD)
3.2 源码修改流程
- 使用GX Works2导出原始工程文件
- 在STL编辑器中定位到通信初始化模块(地址0040H)
- 插入寄存器修改指令:
assembly复制LD M8002 ; 运行初始脉冲 MOV K0 D8251
