1、 三菱 PLC 三菱 PLC FX3U 解密研究最新进展 我是从 2010 年 5 月 26 日开始研究 FX3U 解密,查遍网络找不到只言半语,看来 FX3U解密没人研究,或者研究的人怕人家学,竟然找不到一丁点有用的信息。看来只有靠自力更生了。 虽然目前已经研究成功了 FX3U 解密,免拆机的,读出正确程序和参数,包括禁止上载的问题也能读出正确程序和参数。但我还是想把当时研究解密的过程整理出来,供有兴趣的朋友参考,我这里所讲的过 程也是我实践研究的过程,这当中也难免要走弯路的。但最终是要通往成功的大道的。 其实 没必要搞得这么神秘, PLC 解密没那么复杂。 1、三菱 PLC FX3U 用的
2、编程软件必须采用 GX Developer8.10 以上的版本,我是从网上下载个 GX Developer Version8.52E 就可以支持 FX3U 的编程。启动 GX Developer,从帮助菜单就可以看到编程软件的版本号,如下图所示。 从工程菜单,创建新工程, PLC 系列中选择 FXCPU, PLC 类型中选 FX3U( C)就可以对 FX3U 进行编程的各种操作。 2、 FX3U 的加密方法是:打开 GX Developer 后从菜单 “在线 登录关键字 新建登录,改变 .“进入 ,显示如下界面: FX3U 可以设置两个密码,即关键字和第 2 关键字,每个有 8 个 字符(字符
3、只能是0-F 共 16个 16 进制的字符),这样说明如果两个关键字都设定的话密码总共有 16 个字符。这样可以组合多少种密码呢,即 1616=18446744073709551616.这是个天文数字,有人想要用穷举法解密,那是不可能的。 3、首先随便编个测试程序,不加密,两个关键字都不设定,写入 FX3U,然后用 FXWIN软件选取 FX2N 型号读出程式,竟然能读出正确的程序来。相信三菱 FX PLC的 FXWIN 程软件大家应该很熟悉了。界面如下所示: 用自编的 FX 三菱解密软件连线显示, FX3U PLC 竟然显示成 FX2N 版本号为 2.41,说明 FX3U 是 FX2N 的高级
4、版本。 4、继续测试,用 GX Developer 只 设定第 1 关键字 ,第 2 关键字为空。 用自编的 FX 三菱解密软件(可解 FX0N、 1N、 2N、 1S、 FX2),进行解密。竟然解出密 码来。按 FX2N 型号进行下载也能下载程序,说明当只设一个关键字的时候, FX3U 加密机制和 FX2N的是一模一样的。 CP1H 解密 FX3U 解密 FX3G 解密 FPX 解密 CP1E 解密 13682291256 CJ1M 解密 CP1Eusb 口解密 MT6000 解密 MT8000 解密 GOT1000 解密 看看我的 FX 解密软件: 5、继续测试,用 GX Develope
5、r 同时 设定第 1 关键字,第 2 关键字 。 这时用老的解密软件解不出来了,用老的编程软件 FXGP-WIN-C,企图读入程序,显示通信错误。 6、看来只有祭出法宝了,那就是 PLC 解密通用的法宝串口监控软件。 先启用串口监控软件,设置好开始监控,然后运行编程软件。注意顺序要搞对喔。 从菜单 -在线 -传输设置,进入传输设置界面,然后 “ 按通信测试 ” 键,显示 CPU 类型为FX3U,通信成功。 此时从串口监控到的数据是: # Time Function Data ( Hex ) 1 00000000 IRP_MJ_CREATE Port Opened - Gppw.exe 2 00
6、000000 IOCTL_SERIAL_SET_BAUD_RATE Baud Rate: 115200 3 00000000 IOCTL_SERIAL_SET_LINE_CONTROL StopBits: 1, Parity: Even, DataBits: 7 4 00000001 IRP_MJ_WRITE Length: 0001, Data: 05 5 00000002 IRP_MJ_READ Length: 0001, Data: 06 6 00000002 IRP_MJ_WRITE Length: 0011, Data: 02 30 30 45 30 32 30 32 03 36 4
7、3 7 00000003 IRP_MJ_READ Length: 0001, Data: 02 8 00000003 IRP_MJ_READ Length: 0001, Data: 42 9 00000003 IRP_MJ_READ Length: 0001, Data: 31 10 00000003 IRP_MJ_READ Length: 0001, Data: 35 11 00000003 IRP_MJ_READ Length: 0001, Data: 45 12 00000003 IRP_MJ_READ Length: 0001, Data: 03 13 00000003 IRP_MJ_
8、READ Length: 0001, Data: 46 14 00000003 IRP_MJ_READ Length: 0001, Data: 30 15 00000004 IRP_MJ_WRITE Length: 0011, Data: 02 30 30 45 43 41 30 32 03 38 45 16 00000004 IRP_MJ_READ Length: 0001, Data: 02 17 00000004 IRP_MJ_READ Length: 0001, Data: 37 18 00000004 IRP_MJ_READ Length: 0001, Data: 31 19 000
9、00004 IRP_MJ_READ Length: 0001, Data: 33 20 00000004 IRP_MJ_READ Length: 0001, Data: 46 21 00000004 IRP_MJ_READ Length: 0001, Data: 03 22 00000004 IRP_MJ_READ Length: 0001, Data: 45 23 00000004 IRP_MJ_READ Length: 0001, Data: 34 24 00000005 IRP_MJ_WRITE Length: 0011, Data: 02 30 30 45 30 32 30 32 03
10、 36 43 25 00000006 IRP_MJ_READ Length: 0001, Data: 02 26 00000006 IRP_MJ_READ Length: 0001, Data: 42 27 00000006 IRP_MJ_READ Length: 0001, Data: 31 28 00000006 IRP_MJ_READ Length: 0001, Data: 35 29 00000006 IRP_MJ_READ Length: 0001, Data: 45 30 00000006 IRP_MJ_READ Length: 0001, Data: 03 31 00000006
11、 IRP_MJ_READ Length: 0001, Data: 46 32 00000006 IRP_MJ_READ Length: 0001, Data: 30 33 00000006 IRP_MJ_WRITE Length: 0011, Data: 02 30 30 45 43 41 30 32 03 38 45 34 00000007 IRP_MJ_READ Length: 0001, Data: 02 35 00000007 IRP_MJ_READ Length: 0001, Data: 37 36 00000007 IRP_MJ_READ Length: 0001, Data: 3
12、1 37 00000007 IRP_MJ_READ Length: 0001, Data: 33 38 00000007 IRP_MJ_READ Length: 0001, Data: 46 39 00000007 IRP_MJ_READ Length: 0001, Data: 03 40 00000007 IRP_MJ_READ Length: 0001, Data: 45 41 00000007 IRP_MJ_READ Length: 0001, Data: 34 42 00000015 IRP_MJ_CLOSE Port Closed 开始花大量时间来分析这些数据吧。 上述 从串口监控到
13、的数据是十六进制的数据,还真不好看,先转换成 ASC 码,就好看多了。 # Time Function Data ( String ) 1 00000000 IRP_MJ_CREATE Port Opened - Gppw.exe 2 00000000 IOCTL_SERIAL_SET_BAUD_RATE Baud Rate: 115200 3 00000000 IOCTL_SERIAL_SET_LINE_CONTROL StopBits: 1, Parity: Even, DataBits: 7 4 00000001 IRP_MJ_WRITE Length: 0001, Data: 5 00
14、000002 IRP_MJ_READ Length: 0001, Data: 6 00000002 IRP_MJ_WRITE Length: 0011, Data: 00E02026C 7 00000003 IRP_MJ_READ Length: 0001, Data: 8 00000003 IRP_MJ_READ Length: 0001, Data: B 9 00000003 IRP_MJ_READ Length: 0001, Data: 1 10 00000003 IRP_MJ_READ Length: 0001, Data: 5 11 00000003 IRP_MJ_READ Leng
15、th: 0001, Data: E 12 00000003 IRP_MJ_READ Length: 0001, Data: 13 00000003 IRP_MJ_READ Length: 0001, Data: F 14 00000003 IRP_MJ_READ Length: 0001, Data: 0 15 00000004 IRP_MJ_WRITE Length: 0011, Data: 00ECA028E 16 00000004 IRP_MJ_READ Length: 0001, Data: 17 00000004 IRP_MJ_READ Length: 0001, Data: 7 1
16、8 00000004 IRP_MJ_READ Length: 0001, Data: 1 19 00000004 IRP_MJ_READ Length: 0001, Data: 3 20 00000004 IRP_MJ_READ Length: 0001, Data: F 21 00000004 IRP_MJ_READ Length: 0001, Data: 22 00000004 IRP_MJ_READ Length: 0001, Data: E 23 00000004 IRP_MJ_READ Length: 0001, Data: 4 24 00000005 IRP_MJ_WRITE Le
17、ngth: 0011, Data: 00E02026C 25 00000006 IRP_MJ_READ Length: 0001, Data: 26 00000006 IRP_MJ_READ Length: 0001, Data: B 27 00000006 IRP_MJ_READ Length: 0001, Data: 1 28 00000006 IRP_MJ_READ Length: 0001, Data: 5 29 00000006 IRP_MJ_READ Length: 0001, Data: E 30 00000006 IRP_MJ_READ Length: 0001, Data:
18、31 00000006 IRP_MJ_READ Length: 0001, Data: F 32 00000006 IRP_MJ_READ Length: 0001, Data: 0 33 00000006 IRP_MJ_WRITE Length: 0011, Data: 00ECA028E 34 00000007 IRP_MJ_READ Length: 0001, Data: 35 00000007 IRP_MJ_READ Length: 0001, Data: 7 36 00000007 IRP_MJ_READ Length: 0001, Data: 1 37 00000007 IRP_M
19、J_READ Length: 0001, Data: 3 38 00000007 IRP_MJ_READ Length: 0001, Data: F 39 00000007 IRP_MJ_READ Length: 0001, Data: 40 00000007 IRP_MJ_READ Length: 0001, Data: E 41 00000007 IRP_MJ_READ Length: 0001, Data: 4 42 00000015 IRP_MJ_CLOSE Port Closed 从上面数据看到,其实只有四个回合的数据通信,其中还有两个回合是一模一样的重复的数据。 分析如下: 电脑发
20、: 00E0202 查询 D8001 的值 PLC 回: B15E 回复为 5EB1,回复的数据高位在后、低位在前,所以要对调个位, 5EB1 转为 10 进数据值为: 24241, 24 表示 PLC 型号 FX2N或 3U, 241表示版本号 电脑发: 00ECA02 码 查询 D8101 的值 PLC 回: 713F 回复为 3F71 转为 10 进数据值为: 16241, 16 表示PLC 型号为 FX3U, 241 表示版本号 以上这一大段数据也就是编程软件查询一下 PLC 的型号,以便接下来按相应的通迅协议进行通迅。 7、接下来就编个简单的程序,从 PLC 上载程序,对上载过程的数据交换进行监控,现抄录如下: 一次完整的 FX3U 上载程序的数据 这上面我标明了通迅协议的注释,明眼人一看就明白 PLC 上载参数和上载程序采用的命令协议是什么。