今天給大家分享的是:西門子02版與CN版PLC解密,老版的S7-200 PLC都被網(wǎng)友解密出來(lái)了,新出來(lái)02版和CN版的都用軟件讀不到密碼,我們也嘗試了很多種方法,對(duì)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)開(kāi)始定界符(68H)
LE:(Length)報(bào)文數(shù)據(jù)長(zhǎng)度
LER:(Repeated Length)重復(fù)數(shù)據(jù)長(zhǎng)度
SD: (Start Delimiter)開(kāi)始定界符(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ù)長(zhǎng)度和重復(fù)數(shù)據(jù)長(zhǎng)度為自DA至DU的數(shù)據(jù)長(zhǎng)度,校驗(yàn)碼為DA至DU數(shù)據(jù)的和校驗(yàn),只取其中的末字節(jié)值關(guān)于這個(gè)校驗(yàn)碼的計(jì)算方法同上面說(shuō)明。
在讀寫(xiě)PLC的變量數(shù)據(jù)中,讀數(shù)據(jù)的功能碼為 6CH,寫(xiě)數(shù)據(jù)的功能碼為 7CH。
對(duì)于一次讀取一個(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)的站號(hào)。讀命令中從DA到DU的長(zhǎng)度為1B即27個(gè)字節(jié)。從22字節(jié)開(kāi)始根據(jù)讀取數(shù)據(jù)的類型、位置不同而不同。表一是讀不同存儲(chǔ)器命令的Byte22—32。
表一讀命令的Byte22-32從表中我們可以得出以下結(jié)果:
Byte 22 讀取數(shù)據(jù)的長(zhǎng)度
01:1 Bit 02:1 Byte
04:1 Word 06:Double Word
Byte 24數(shù)據(jù)個(gè)數(shù),這里是01 ,一次讀多個(gè)數(shù)據(jù)時(shí)見(jiàn)下面的說(shuō)明。
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)和,前面已說(shuō)到這是從(DA+SA+DSAP+SSAP+DU) Mod 256 。
一次讀多條數(shù)據(jù)
對(duì)于一次讀多個(gè)數(shù)據(jù)的情況,前21Byte與上面相似只是長(zhǎng)度LD,LDr及Byte 14不同:
Byte 14 數(shù)據(jù)塊占位字節(jié),它指明數(shù)據(jù)塊占用的字節(jié)數(shù)。與數(shù)據(jù)塊數(shù)量有關(guān),長(zhǎng)度=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ù)。
寫(xiě)命令分析:一次寫(xiě)一個(gè)Double Word類型的數(shù)據(jù),寫(xiě)命令是40個(gè)字節(jié),其余為38個(gè)字節(jié)。寫(xiě)一個(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
寫(xiě)一個(gè)其它類型的數(shù)據(jù),前面的0—21字節(jié)為 :(與上面比較,只是長(zhǎng)度字節(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é)開(kāi)始根據(jù)寫(xiě)入數(shù)據(jù)的值和位置不同而變化。表二是幾個(gè)寫(xiě)命令的Byte22—40。表二 寫(xiě)命令的Byte22—40
經(jīng)分析我們可以得出以下結(jié)果:
Byte 22-- Byte 30 寫(xiě)入數(shù)據(jù)的長(zhǎng)度、存儲(chǔ)器類型、存儲(chǔ)器偏移量與讀命令相同。T,C等不能用寫(xiě)命令寫(xiě)入。
Byte 32 如果寫(xiě)入的是位數(shù)據(jù)這一字節(jié)為03,其它則為04
Byte 34 寫(xiě)入數(shù)據(jù)的位數(shù)
01: 1 Bit 08: 1 Byte 10H: 1 Word 20H: 1 Double Word
Byte 35--40值、校驗(yàn)碼、結(jié)束符
如果寫(xiě)入的是位、字節(jié)數(shù)據(jù),Byte35就是寫(xiě)入的值,Byte36=00,Byte37=檢驗(yàn)碼,Byte38=16H,結(jié)束。如果寫(xiě)個(gè)的是字?jǐn)?shù)據(jù)(雙字節(jié)),Byte35,Byte36就是寫(xiě)入的值, Byte37=檢驗(yàn)碼,Byte38=16H,結(jié)束。如果寫(xiě)個(gè)的是雙字?jǐn)?shù)據(jù)(四字節(jié)),Byte35—38就是寫(xiě)入的值, Byte39=檢驗(yàn)碼,Byte40=16H,結(jié)束。
看完上面的指令分析我們現(xiàn)在就舉例幾個(gè)常用的PPI協(xié)議來(lái)分析一下:
PC尋呼:10 02 00 49 4B 16
PLC返回:10 00 02 02 04 16
PC發(fā)送:10 02 00 5C 5E 16
PLC返回: E5
我們先來(lái)看看西門子S7-200PLC的讀取密碼指令:
請(qǐng)用串口軟件以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位開(kāi)始的8個(gè)字符(這就是8個(gè)密碼數(shù)值)。
如果通訊無(wú)誤,PLC會(huì)返回 E5,意思:已經(jīng)收到
那么這時(shí)上位機(jī)再次發(fā)送指令 10 02 00 5C 5E 16 意思:請(qǐng)執(zhí)行命令。(說(shuō)到這里打住一下,PLC返回E5指令后上位機(jī)PC要在很短的時(shí)間內(nèi)發(fā)送確認(rèn)指令,晚了剛才的指令就無(wú)效了具體多長(zhǎng)時(shí)間我也沒(méi)測(cè)準(zhǔn),反正1 2秒時(shí)間是沒(méi)有問(wèn)題的。)
那么這時(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
好了,說(shuō)到這里就此停止,大家看看密碼是多少!你如果真正明白了PPI協(xié)議就不難看出密碼了,你多做實(shí)驗(yàn)一定能得出結(jié)果的。
下面再看一個(gè)讀取PLC版本號(hào)的指令:
我們?cè)诮饷苤惺紫纫_定的是PLC的版本號(hào)。就是要看看是老版本還是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的版本號(hào)就返回來(lái)了?聪旅妫
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版本號(hào)的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)
通過(guò)對(duì)上面協(xié)儀分析,成功找到西門子S7-200CN解密方法,好了,今天的西門子02版與CN版PLC解密經(jīng)驗(yàn)分享就到這里了,希望大家多支持,我們將繼續(xù)突破更多更復(fù)雜的PLC解密技術(shù)。