今天給大家分享的是:西門子02版與CN版PLC解密,老版的S7-200 PLC都被網(wǎng)友解密出來了,新出來02版和CN版的都用軟件讀不到密碼,我們也嘗試了很多種方法,對PPI協(xié)儀也進(jìn)行了深入了解,下面把我監(jiān)控的PPI協(xié)儀給大家分享。
讀命令分析:一次讀一條數(shù)據(jù)
SD LE LER SD DA SA FC DASP SSAP DU FCS ED
SD:(Start Delimiter)開始定界符(68H)
LE:(Length)報(bào)文數(shù)據(jù)長度
LER:(Repeated Length)重復(fù)數(shù)據(jù)長度
SD: (Start Delimiter)開始定界符(68H)
SA:(Source Address)目標(biāo)地址,指該地址的指針,為地址值乘以8
DA:(Destination Address)本地地址,指該地址的指針,為地址值乘以8
FC:(Function Code)功能碼
DSAP:(Destination Service Access Point)目的服務(wù)存取點(diǎn)
SSAP:(Source Service Access Point)源服務(wù)存取點(diǎn)
DU:(Data Unit)數(shù)據(jù)單元
FCS:(Frame Check Sequence)校驗(yàn)碼
ED:(End Delimiter)結(jié)束分界符(16H)
報(bào)文數(shù)據(jù)長度和重復(fù)數(shù)據(jù)長度為自DA至DU的數(shù)據(jù)長度,校驗(yàn)碼為DA至DU數(shù)據(jù)的和校驗(yàn),只取其中的末字節(jié)值關(guān)于這個(gè)校驗(yàn)碼的計(jì)算方法同上面說明。
在讀寫PLC的變量數(shù)據(jù)中,讀數(shù)據(jù)的功能碼為 6CH,寫數(shù)據(jù)的功能碼為 7CH。
對于一次讀取一個(gè)數(shù)據(jù),讀命令都是33個(gè)字節(jié)。前面的0—21字節(jié)是相同的,為 :
因?yàn)槭荘C上發(fā)的讀PLC數(shù)據(jù)的命令,SA=00,DA=02,如果有b多個(gè)站,DA要改成相應(yīng)的站號。讀命令中從DA到DU的長度為1B即27個(gè)字節(jié)。從22字節(jié)開始根據(jù)讀取數(shù)據(jù)的類型、位置不同而不同。表一是讀不同存儲(chǔ)器命令的Byte22—32。
表一讀命令的Byte22-32從表中我們可以得出以下結(jié)果:
Byte 22 讀取數(shù)據(jù)的長度
01:1 Bit 02:1 Byte
04:1 Word 06:Double Word
Byte 24數(shù)據(jù)個(gè)數(shù),這里是01 ,一次讀多個(gè)數(shù)據(jù)時(shí)見下面的說明。
Byte 26 存儲(chǔ)器類型,01:V存儲(chǔ)器 00:其它
Byte 27 存儲(chǔ)器類型
04:S 05:SM 06:AI 07:AQ 1E: C
81:I 82:Q 83:M 84:V 1F: T
Byte 28,29,30存儲(chǔ)器偏移量指針(存儲(chǔ)器地址*8),如:VB100,存儲(chǔ)器地址為100,偏移量指針為800,轉(zhuǎn)換成16進(jìn)制就是320H,則Byte 28—29這三個(gè)字節(jié)就是:00 03 20。
Byte 31 校驗(yàn)和,前面已說到這是從(DA+SA+DSAP+SSAP+DU) Mod 256 。
一次讀多條數(shù)據(jù)
對于一次讀多個(gè)數(shù)據(jù)的情況,前21Byte與上面相似只是長度LD,LDr及Byte 14不同:
Byte 14 數(shù)據(jù)塊占位字節(jié),它指明數(shù)據(jù)塊占用的字節(jié)數(shù)。與數(shù)據(jù)塊數(shù)量有關(guān),長度=4+數(shù)據(jù)塊數(shù)*10,如:一條數(shù)據(jù)時(shí)為4+10=0E(H);同時(shí)讀M,V,Q三個(gè)不同的數(shù)據(jù)塊時(shí)為4+3*10=22(H)。
Byte 22 總是02 即以Byte為單位。
Byte 24 以字節(jié)為單位,連續(xù)讀取的字節(jié)數(shù)。如讀2個(gè)VD則Byte24=8
Byte 19---30 按上述一次讀一個(gè)數(shù)據(jù)的格式依次列出,
Byte 31---42 另一類型的數(shù)據(jù),也是按上述格式給出。
以此類推,一次最多讀取222個(gè)字節(jié)的數(shù)據(jù)。
寫命令分析:一次寫一個(gè)Double Word類型的數(shù)據(jù),寫命令是40個(gè)字節(jié),其余為38個(gè)字節(jié)。寫一個(gè)Double Word類型的數(shù)據(jù),前面的0—21字節(jié)為 :
68 23 23 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
寫一個(gè)其它類型的數(shù)據(jù),前面的0—21字節(jié)為 :(與上面比較,只是長度字節(jié)發(fā)生變化)
68 21 21 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
從22字節(jié)開始根據(jù)寫入數(shù)據(jù)的值和位置不同而變化。表二是幾個(gè)寫命令的Byte22—40。表二 寫命令的Byte22—40
經(jīng)分析我們可以得出以下結(jié)果:
Byte 22-- Byte 30 寫入數(shù)據(jù)的長度、存儲(chǔ)器類型、存儲(chǔ)器偏移量與讀命令相同。T,C等不能用寫命令寫入。
Byte 32 如果寫入的是位數(shù)據(jù)這一字節(jié)為03,其它則為04
Byte 34 寫入數(shù)據(jù)的位數(shù)
01: 1 Bit 08: 1 Byte 10H: 1 Word 20H: 1 Double Word
Byte 35--40值、校驗(yàn)碼、結(jié)束符
如果寫入的是位、字節(jié)數(shù)據(jù),Byte35就是寫入的值,Byte36=00,Byte37=檢驗(yàn)碼,Byte38=16H,結(jié)束。如果寫個(gè)的是字?jǐn)?shù)據(jù)(雙字節(jié)),Byte35,Byte36就是寫入的值, Byte37=檢驗(yàn)碼,Byte38=16H,結(jié)束。如果寫個(gè)的是雙字?jǐn)?shù)據(jù)(四字節(jié)),Byte35—38就是寫入的值, Byte39=檢驗(yàn)碼,Byte40=16H,結(jié)束。
看完上面的指令分析我們現(xiàn)在就舉例幾個(gè)常用的PPI協(xié)議來分析一下:
PC尋呼:10 02 00 49 4B 16
PLC返回:10 00 02 02 04 16
PC發(fā)送:10 02 00 5C 5E 16
PLC返回: E5
我們先來看看西門子S7-200PLC的讀取密碼指令:
請用串口軟件以16進(jìn)制發(fā)送,端口設(shè)置9600;e;8;1
發(fā)送:68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 08 00 00 03 00 05 E0 D2 16 意思:要求傳送系統(tǒng)存儲(chǔ)區(qū)05E0位開始的8個(gè)字符(這就是8個(gè)密碼數(shù)值)。
如果通訊無誤,PLC會(huì)返回 E5,意思:已經(jīng)收到
那么這時(shí)上位機(jī)再次發(fā)送指令 10 02 00 5C 5E 16 意思:請執(zhí)行命令。(說到這里打住一下,PLC返回E5指令后上位機(jī)PC要在很短的時(shí)間內(nèi)發(fā)送確認(rèn)指令,晚了剛才的指令就無效了具體多長時(shí)間我也沒測準(zhǔn),反正1 2秒時(shí)間是沒有問題的。)
那么這時(shí)PLC就真的執(zhí)行命令了返回如下字符:68 1D 1D 68 00 02 08 32 03 00 00 00 00 00 02 00 0C 00 00 04 01 FF 04 00 40 9B 98 02 06 9D 9A 00 76 7D 16
好了,說到這里就此停止,大家看看密碼是多少?。∧闳绻嬲靼琢薖PI協(xié)議就不難看出密碼了,你多做實(shí)驗(yàn)一定能得出結(jié)果的。
下面再看一個(gè)讀取PLC版本號的指令:
我們在解密中首先要確定的是PLC的版本號。就是要看看是老版本還是02版的,也好做出加解密方案。他的通訊源碼是這樣的:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
68 1B 1B 68 02 00 7C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 14 00 00 03 00 00 00 09 16
發(fā)送完上面數(shù)據(jù)PLC返回E5.
再次發(fā)送確認(rèn)指令:10 02 00 5C 5E 16
這時(shí)plc的版本號就返回來了。看下面:
68 29 29 68 00 02 08 32 03 00 00 00 00 00 02 00 18 00 00 04 01 FF 04 00 A0 43 50 55 20 32 32 36 20 43 4E
20 20 20 20 20 20 30 32 30 31 D7 16
你看這一段:43 50 55 20 32 32 36 20 43 4E 20 20 20 20 20 20 30 32 30 31 就是plc版本號的ASCII碼。用ASC方式顯示就會(huì)看的更明白上面數(shù)據(jù)是:C P U SP 2 2 6 SP C N 0 2 0 1 (sp就是空格)
再一個(gè)就是讀TD200密碼指令:
68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 02 00 01 84 00 00 50 B9 16
(VW10)
通過對上面協(xié)儀分析,成功找到西門子S7-200CN解密方法,好了,今天的西門子02版與CN版PLC解密經(jīng)驗(yàn)分享就到這里了,希望大家多支持,我們將繼續(xù)突破更多更復(fù)雜的PLC解密技術(shù)。