产品展厅收藏该商铺

您好 登录 注册

当前位置:
上海维特锐实业发展有限公司>资料下载>三菱 PLC 解密

资料下载

三菱 PLC 解密

阅读:11033          发布时间:2012-6-28
提 供 商 上海维特锐实业发展有限公司 资料大小 1.9MB
资料图片 下载次数 3101次
资料类型 WORD 文档 浏览次数 11033次
免费下载 点击下载    

三菱 PLC 三菱PLC FX3U解密研究进展

    我是从2010年5月26日开始研究FX3U解密,查遍网络找不到只言半语,看来FX3U解密没人研究,或者研究的人怕人家学,竟然找不到一丁点有用的信息。看来只有靠自力更生了。 虽然目前已经研究成功了FX3U解密,免拆机的,读出正确程序和参数,包括禁止上载的问题也能读出正确程序和参数。但我还是想把当时研究解密的过程整理出来,供有兴趣的朋友参考,我这里所讲的过程也是我实践研究的过程,这当中也难免要走弯路的。但zui终是要通往成功的大道的。
   其实 没必要搞得这么神秘,PLC解密没那么复杂。
    1、三菱 PLC FX3U 用的编程软件必须采用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进制的字符),这样说明如果两个关键字都设定的话密码总共有16个字符。这样可以组合多少种密码呢,即16^16=18446744073709551616.这是个天文数字,有人想要用穷举法解密,那是不可能的。
    3、首先随便编个测试程序,不加密,两个关键字都不设定,写入FX3U,然后用FXWIN软件选取FX2N型号读出程式,竟然能读出正确的程序来。相信三菱FX PLC的FXWIN程软件大家应该很熟悉了。界面如下所示:
    用自编的FX三菱解密软件连线显示,FX3U PLC竟然显示成FX2N版本号为2.41,说明FX3U是FX2N的版本。
    4、继续测试,用 GX Developer 只设定第1关键字,第2关键字为空。
用自编的FX三菱解密软件(可解FX0N、1N、2N、1S、FX2),进行解密。竟然解出密码来。按FX2N型号进行下载也能下载程序,说明当只设一个关键字的时候,FX3U加密机制和FX2N的是一模一样的。
CP1H解密 FX3U解密 FX3G解密 FPX解密 CP1E解密 CJ1M解密 CP1Eusb口解密 MT6000解密 MT8000解密 GOT1000解密
看看我的FX解密软件:
    5、继续测试,用 GX Developer 同时设定第1关键字,第2关键字
这时用老的解密软件解不出来了,用老的编程软件FXGP-WIN-C,企图读入程序,显示通信错误。
    6、看来只有祭出法宝了,那就是PLC解密通用的法宝串口监控软件。
    先启用串口监控软件,设置好开始监控,然后运行编程软件。注意顺序要搞对喔。
从菜单-》在线-》传输设置,进入传输设置界面,然后“按通信测试”键,显示CPU类型为FX3U,通信成功。
此时从串口监控到的数据是:
#       Time        Function                        Data ( Hex ) 
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: 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
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_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      [00000004]  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 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]  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: 31
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
开始花大量时间来分析这些数据吧。
    上述 从串口监控到的数据是十六进制的数据,还真不好看,先转换成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       [00000002]  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                     Length: 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
18      [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                    Length: 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:
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_MJ_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
从上面数据看到,其实只有四个回合的数据通信,其中还有两个回合是一模一样的重复的数据。
分析如下:
电脑发: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上载参数和上载程序采用的命令协议是什么。
这上载参数与程序的过程中有一大段是先读取D区的数据,关于这些D区数据的意思在GX-D里有说明,我也整理出来,有助于大家理解这些参数的意义。

 


   
到了这一步,我停了好长一段时间没有研究,因为解密有时是要靠灵感的,没有灵感是没办法找到解密方法的。资料请浏览:http://www.200plc.cn
 
经过大概半年左右,有个解密的同行,一起再探讨此事时说能不能用我们当时解松下FPX的方法试一下FX3U,于是又是几个不眠之夜,终于搞定了,可以上载程序和参数,可是当时只能是拆机。但是灵感一旦涌现,就会像泉水一样*,一个又一个的设想,一次又一次的测试,终于搞定FX3U解密。程序、参数、内存全部OK。
  上面的通迅数据中好好研究就有解密的命令喔。
CP1H解密 FX3U解密 FX3G解密 FPX解密 CP1E解密 CJ1M解密 CP1Eusb口解密 MT6000解密 MT8000解密 GOT1000解密
 
NEW CP1H CP1E CP1L解密:全国CP1H解密直读密码 所以不存在V1.2版本的功能块被删的问题 是目前zui安全的解密方式。网上目前还没有查到能直读密码的。
NEW FX3U FX3UC FX3G解密:通过协议解FX3U系列PLC密码 免拆机 可以在机台上直接解密 安全可靠 也是当前PLC解密界比较好的解密方法。包括的禁止上传的解密。
NEW FPX FPG解密:能原始算出密码 解决禁止上载的问题保证不破坏原程序和内存(FP-X,FPG等,包括禁止上载)。
NEW 台达EH2 ES2解密 台达EH2 ES2等高加密产品
NEW Koyo(光洋)解密 光洋SH SH1 SM SM1 SN SZ SU SR DL-305 DL-05 DL-06系列PLC 解密。
NEW 艾默生PLC解密 EC10 EC20系列等
NEW 欧姆龙PLC解密 CQM1H CJ1M CJ1G CJ1H CS1D CS1G CS1H CP1L CP1H CP1E解密
NEW 松下GT高加密屏 GT-01 GT-32等
NEW 三菱GOT1000解密 GOT1000全系列解密
NEW 维纶通触摸屏解密MT6000解密 MT8000解密 MT6056解密 MT6070解密 MT8070解密 MT6100解密 MT8100解密 MT8104解密人机界面解密
NEW 三菱Q系列解密Q00,Q01,Q00J,Q02,Q02H,Q06H,12H等 
 

欧姆龙CP1H解密、CP1E USB口解密以及OMRON CP系列PLC加密方式的交流
 
 欧姆龙CP1H解密、CP1E解密用232口进行的早就是已经是公开的秘密,USB口的解密现在还是凤毛麟角,从网上有人号称“国内*USB解密“,到我今天能用USB口解密仅用14天时间,一开始我想从*那了解相关情况,遇到的都是技术封锁,经过充分研究后,我现在透露,其实USB解密与232解密是一模一样的原理。USB发送的命令其实在232口解密研究时,我就研究过,大家先看看下面这个多年前我写的的一个软件界面,用于时序恢复的。
         因为多年前研究的sysway协议与ToolBus协议在我的软件里早就有了,校验,命令格式,早就熟悉了,现在一看USB口是同样的道理,都没有太大变化就不在活下。下面上个USB口数据的截图,内行的工控人士一看就明白了。
       USB传送的数据:
         下图是关于OMRON USB口的参数说明的截图:
        有了上面参数,你再研究一下USB原理关于URB、IRP、BLUK/INT 、STAK、SUBMIT_URB的说明。
        当然还是离不开下面这个软件:
         只要你弄清楚这些,那么USB接口解密你就不在话下了。
        CP1H、CJM1、232口解密并直读密码,是我较早发布的,还找不到其他有人声称直读密码,现在,只有USB口的PLC我先试了不要密码的解密方法已成功了,同样也能读出密码,读出密码有什么好处呢,一是可能绕过功能块,解密安全可靠,另外,当你有多台同一个编程员编的程序,那么密码相同的可能性是80%,同时触摸屏的密码也往往和PLC一样。这样搞定一台就等于搞定全部。何乐而不为呢。
        zui近经常有初学者在网上询问关于如何对OMRON CP、CJ、CS系列PLC程序加密保护的问题,下面就这个问题,我们以CP1H为例共同来探讨一下,其他型号是一样的道理的。
      首先,一个PLC的加密程度,以及破解的难易程度,已经在一定程度影响到PLC销售的*了,特别是近几年这个现象越来越明显了,特别是小型机的销售的影响,所以几大PLC品牌厂商也在玩起加密的猫捉老鼠游戏来了,比如这个CP1系统的PLC能加多少种密码呢,细细数来有5个级别的加密。而且加密的复杂程度比当年CPM系列产品成几何级别的增加。
     我们再来看看这5个级别的加密是什么呢,在CXP编程软件中这5种加密称为UM密、任务密,功能块密,禁止传送程到储存卡,禁止覆盖,其中前三个加密方式是采用密码加密,后两个加密是采用标志加密的。下面分析一下这5种密的作用以及如何操作,对一个已加密的PLC我们判定加密情况的方法。
     OMRON PLC编程软件目前要数CXP功能zui全,也是国内工控人用的zui多的软件,在这软件之前,我是从当年LLS编程软件用起的,到后来SSS编程软件,这是一个中文的界面了,再来就是CPT可能就好多人知晓了,这当中还有用过SYSWIN编程软件,是从欧洲老外那得到了,功能比国内流行的CPT好,再来就是这个CXP,CXP的全称是CX-Programer,我用到的目前版本是9.2,有没有再高版本我不晓的了。
 
闲话少说,启动CXP吧!
下面这个界面大家肯定很熟悉,这是直接点击一个CXP文件,CXP就直接关连打开到这个界面,我这里是打开了一个叫N多段速cp1h.cxp文件。默认情况下CXP左边这个窗口称工作区,右边这个窗口我不晓得,就叫它工作子区,下面的那个窗口叫输出。
在工作区窗口里有个新工程,新工程下面有个新PLC1,右击新PLC1,有个弹出菜单,弹出菜单zui下面有个"属性(o)"菜单。单击"属性(o)"菜单,在PLC属性界面,选择“保护”选项卡,我们来到了加密设置的地方。如下图。
在这里你可以设UM读取密码,密码设置是8个字符,字符可以是0-9,a-z,A-Z。
任务读保护密码,同样密码设置是8个字符,字符可以是0-9,a-z,A-Z。
禁止存入内存卡和从PLC传送程序,可以选择V或不选择。
禁止覆盖受保护程序,可以选择V或不选择。
看下图,是全部选择加密的zui高等级了。
设定好退出,必须按按CXP软件中工具栏PLC设置
 
保护到PLC还有如下几项细节必须注意。
1、设置密码有离线和在线两个情况。
离线状态下,执行 ,这时是保护程序的任务密,只在保护电脑里的文件,并没有保护到PLC里,离线状态下,按下
CPX程序中有加任务保护的程序段就被锁保护起来,看不到程序图了。没有任务保护的程序段就不加锁。如下图所示
为什么有的程序加锁有的不加锁呢,这是在CP、CJ、CS这些新型OMRON PLC中引入了任务的概念。
我们一起来看看CP1的编程手册上怎么讲的:
       在 CP1 中,可以将程序按功能、控制对象、工序、等进行划分,分割为称为「任务」的执行单位,可将用户程序结构化。因此具有以下优点。
1 .可将程序分割由多人共同开发。
2 .可将程序作为模块实现标准化。
3 .提高总体的响应性能。
4 .修正 · 调试更加简便。
5 .程序的内务处理变得容易。
6 .用户程序的理解变得容易。
CP1系列PLCzui大能管理 288 个任务程序。 其中周期执行任务32个(NO.0-31) ,中断任务256个(NO.0-255)
CPU 单元对周期执行任务按其编号由小到大的顺序执行。当发生中断原因时,中止该任务的执行改而执行中断任务。之后再执行被中止的任务。
上例中新程序1(00)就是周期执行任务0也叫循环任务0,新程序2(01)就是循环任务1,
如果要对任务加密保护就必须右击该程序名—》属性—》保护—》选定任务读保护,对于没有选定任务读保护的程序,当在离线执行 时,该程序就不加锁,选定任务读保护的程序,该程序就加锁。加锁后程序就看不到。同时PLC属性—》保护中的任务密也就成星号。保存后再打开,也看不到具体的任务密。
 在线状态下,执行 ,这时保护PLC内部程序的UM密和任务密,UM密是首先被激发的,任务密加载前提条件是PLC里面的任务必须有选定任务读保护,也就是下载过任务读保护的任务,如果下载的是没有选定任务读保护,那么在线状态下,执行 ,将提示无法加密任务密,必须重新下载有任务保护的程序。
 2、UM密码和任务密zui多可以设8位字符,包括0-9的数字,a-Z,26个字母分大小写不一样,加载了UM密,PLC里面的程序就被保护,没有解除密码,PLC程序将无法上载。加载了任务密后,PLC程序即使上载了,也会在程序中显示加锁状态,不能看到程序。
3、设置禁止存入内存卡和从PLC传送程序和禁止覆盖受保护程序,必须程序重新传送到PLC一次,才能生效。
关于禁止存入内存卡和从PLC传送程序说明,
经常有人问内存卡什么样,什么型号,装在哪里呢。
OMRON储存卡型号是:CP1W-ME05M
什么样子,我上个图,你就明白了。
CP1W-ME05M是容量为8M的储存卡。
如果没有勾选“禁止存入内存卡”,那么PLC的程序可以传送到储存卡里备份,当PLC已经设置了UM密、任务密,传送到储存卡里的程序同样会有UM密、任务密,如果勾选设置“禁止存入内存卡”,那么PLC的程序就不可以传送到卡里备份。
关于禁止覆盖受保护程序说明,
如果没有勾选“禁止覆盖受保护程序”,那么如果想清除PLC的程序,可以从PLC的菜单选择清除PLC,或者传送一个空白程序到PLC中,
当勾选“禁止覆盖受保护程序”,同时PLC又有UM密、任务密时,没有解除密码前就清除不了PLC里的程序,想用一个新的程序覆盖也不行,就是禁止写入的意思。
当采用这种“禁止覆盖受保护程序”时,如果你忘记了密码,又没有空白的储存卡,那就非常非常麻烦了,你就是想把程序清空都难。这时只有一个办法,突然灵感一动想起密码,哈哈,
用储存卡清除禁止覆盖受保护程序,是把储存卡里的程序在PLC通电一瞬间传入覆盖PLC程序,当然原程序就变没有了,储存卡里的程序是空白的,这样就清除了,如果储存卡里的程序是有密码的和禁止覆盖,那么传送后仍旧是禁止覆盖和加密的。
还有一种选择就是能够对禁止覆盖的PLC程序进行恢复,如果你想得到加密的密码,同样我们能帮你找到,至于方法嘛,我们的方法是的,解密软件也是的,不会轻易传播,请您见谅,我们只提供单次解密的服务。对于V1。2版本的功能块也不会影响。
 功能块密又是怎能回事呢,
首先,我们要理解什么是功能块,功能块就相当于我们编程中的函数,在功能块中定义好输入输出和变量,然后通过功能块编程,使的功能块具有一定的功能,在主程序中,就按需要在多处调用功能块,使之产生同样的功能,当然象函数可以给定变量不同的值,产生的输出就不同。
功能块具有很好的移植性能,为了保护功能块的程序,可以单独对每个功能块加密,密码是4个字符,加了密的功能块,就看不到功能块程序了。
下面谈谈,对于一个加密了的CP1 PLC如何判断是加了那些密码呢,CP1H操作说明书是这样说的:
我总结如下,你查一下A99的值,对照下面说明就一目了然。
A99说明:
A99=
0001表示有UM密
0002表示有任务密
0003表示有UM密+任务密
0004表示有禁止覆盖
0005表示有UM密+禁止覆盖
0006表示有任务密+禁止覆盖
0007表示有UM密+任务密+禁止覆盖
0008表示有禁止向卡传送
0009表示有UM密+禁止向卡传送
000A表示有任务密+禁止向卡传送
000B表示有UM密+任务密+禁止向卡传送
000C表示有禁止覆盖+禁止向卡传送
000D表示有UM密+禁止覆盖+禁止向卡传送
000E表示有任务密+禁止覆盖+禁止向卡传送
000F表示有UM密+任务密+禁止覆盖+禁止向卡传送
100X:X是参考上述的说明,zui高位为1表示不允许解除UM密
200X:zui高位为2表示不允许解除TK密
300X:zui高位为3表示不允许解除UM+TK密

 

 

收藏该商铺

登录 后再收藏

提示

您的留言已提交成功!我们将在第一时间回复您~

对比框

产品对比 产品对比 联系电话 二维码 意见反馈 在线交流

扫一扫访问手机商铺
021-32586636
在线留言