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 个字符(字符只能是 0-F共 16 个 16 进
3、制的字符),这样说明如果两个关键字都设定的话密码总共有 16 个字符。这样可以组合多少种密码呢,即 1616=18446744073709551616.这是个天文数字,有人想要用穷举法解密,那是不可能的。3、首先随便编个测试程序,不加密,两个关键字都不设定,写入 FX3U,然后用 FXWIN软件选取 FX2N 型号读出程式,竟然能读出正确的程序来。相信三菱 FX PLC 的 FXWIN 程软件大家应该很熟悉了。界面如下所示:用自编的 FX 三菱解密软件连线显示,FX3U PLC 竟然显示成 FX2N 版本号为 2.41,说明FX3U 是 FX2N 的高级版本。4、继续测试,用 GX Devel
4、oper 只设定第 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 Developer 同时设定第 1 关键字,第 2 关键字。 这时用老的解密软件解
5、不出来了,用老的编程软件 FXGP-WIN-C,企图读入程序,显示通信错误。6、看来只有祭出法宝了,那就是 PLC 解密通用的法宝串口监控软件。先启用串口监控软件,设置好开始监控,然后运行编程软件。注意顺序要搞对喔。从菜单-在线-传输设置,进入传输设置界面,然后“按通信测试”键,显示 CPU 类型为 FX3U,通信成功。此时从串口监控到的数据是:# Time Function Data ( Hex ) 1 00000000 IRP_MJ_CREATE Port Opened - Gppw.exe2 00000000 IOCTL_SERIAL_SET_BAUD_RATE Baud Rate: 1
6、152003 00000000 IOCTL_SERIAL_SET_LINE_CONTROL StopBits: 1, Parity: Even, DataBits: 74 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 43 7 00000003 IRP_MJ_READ Length: 0001, Data: 02
7、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_READ Length: 0001, Data: 46 14 00000003 IRP_MJ_R
8、EAD 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 00000004 IRP_MJ_READ Length: 0001, Data: 33 20 0000
9、0004 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 36 43 25 00000006 IRP_MJ_READ Length: 0001, Dat
10、a: 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 IRP_MJ_READ Length: 0001, Data: 46 32 00000006
11、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: 31 37 00000007 IRP_MJ_READ Length: 0001, Data: 33
12、 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开始花大量时间来分析这些数据吧。上述 从串口监控到的数据是十六进制的数据,还真不好看,先转换成 ASC 码,就好看多了。# Time Function
13、 Data ( String ) 1 00000000 IRP_MJ_CREATE Port Opened - Gppw.exe2 00000000 IOCTL_SERIAL_SET_BAUD_RATE Baud Rate: 1152003 00000000 IOCTL_SERIAL_SET_LINE_CONTROL StopBits: 1, Parity: Even, DataBits: 74 00000001 IRP_MJ_WRITE Length: 0001, Data: 5 00000002 IRP_MJ_READ Length: 0001, Data: 6 00000002 IRP_
14、MJ_WRITE Length: 0011, Data: 00E02026C7 00000003 IRP_MJ_READ Length: 0001, Data: 8 00000003 IRP_MJ_READ Length: 0001, Data: B9 00000003 IRP_MJ_READ Length: 0001, Data: 110 00000003 IRP_MJ_READ Length: 0001, Data: 511 00000003 IRP_MJ_READ Length: 0001, Data: E12 00000003 IRP_MJ_READ Length: 0001, Dat
15、a: 13 00000003 IRP_MJ_READ Length: 0001, Data: F14 00000003 IRP_MJ_READ Length: 0001, Data: 015 00000004 IRP_MJ_WRITE Length: 0011, Data: 00ECA028E16 00000004 IRP_MJ_READ Length: 0001, Data: 17 00000004 IRP_MJ_READ Length: 0001, Data: 718 00000004 IRP_MJ_READ Length: 0001, Data: 119 00000004 IRP_MJ_
16、READ Length: 0001, Data: 320 00000004 IRP_MJ_READ Length: 0001, Data: F21 00000004 IRP_MJ_READ Length: 0001, Data: 22 00000004 IRP_MJ_READ Length: 0001, Data: E23 00000004 IRP_MJ_READ Length: 0001, Data: 424 00000005 IRP_MJ_WRITE Length: 0011, Data: 00E02026C25 00000006 IRP_MJ_READ Length: 0001, Dat
17、a: 26 00000006 IRP_MJ_READ Length: 0001, Data: B27 00000006 IRP_MJ_READ Length: 0001, Data: 128 00000006 IRP_MJ_READ Length: 0001, Data: 529 00000006 IRP_MJ_READ Length: 0001, Data: E30 00000006 IRP_MJ_READ Length: 0001, Data: 31 00000006 IRP_MJ_READ Length: 0001, Data: F32 00000006 IRP_MJ_READ Leng
18、th: 0001, Data: 033 00000006 IRP_MJ_WRITE Length: 0011, Data: 00ECA028E34 00000007 IRP_MJ_READ Length: 0001, Data: 35 00000007 IRP_MJ_READ Length: 0001, Data: 736 00000007 IRP_MJ_READ Length: 0001, Data: 137 00000007 IRP_MJ_READ Length: 0001, Data: 338 00000007 IRP_MJ_READ Length: 0001, Data: F39 00
19、000007 IRP_MJ_READ Length: 0001, Data: 40 00000007 IRP_MJ_READ Length: 0001, Data: E41 00000007 IRP_MJ_READ Length: 0001, Data: 442 00000015 IRP_MJ_CLOSE Port Closed从上面数据看到,其实只有四个回合的数据通信,其中还有两个回合是一模一样的重复的数据。分析如下:电脑发:00E0202 查询 D8001 的值PLC 回:B15E 回复为 5EB1,回复的数据高位在后、低位在前,所以要对调个位,5EB1 转为 10 进数据值为:24241
20、,24 表示PLC 型号 FX2N 或 3U,241 表示版本号电脑发:00ECA02 码 查询 D8101 的值PLC 回:713F 回复为 3F71 转为 10 进数据值为:16241,16 表示 PLC 型号为FX3U,241 表示版本号以上这一大段数据也就是编程软件查询一下 PLC 的型号,以便接下来按相应的通迅协议进行通迅。7、接下来就编个简单的程序,从 PLC 上载程序,对上载过程的数据交换进行监控,现抄录如下:一次完整的 FX3U 上载程序的数据这上面我标明了通迅协议的注释,明眼人一看就明白PLC 上载参数和上载程序采用的命令协议是什么。这上载参数与程序的过程中有一大段是先读取 D 区的数据,关于这些 D 区数据的意思在GX-D 里有说明,我也整理出来,有助于大家理解这些参数的意义。到了这一步,我停了好长一段时间没有研究,因为解密有时是要靠灵感的,没有灵感是没办法找到解密方法的。最新资料请浏览:http:/