信捷PLC的解密方法 — 轉載僅供參考
信捷PLC的解密具有一定的難度,很多人特別是新入門(mén)者,會(huì )覺(jué)得很難解。下面就分享一下筆者的一些經(jīng)驗,供大家參考。經(jīng)筆者試驗,信捷PLC在設計方面有幾個(gè)漏洞,可以用于PLC解密。
先說(shuō)軟件方面的兩個(gè)漏洞:
第一, 在PLC已加密的情況下,如果最后一次PLC與電腦連接時(shí),曾向PLC輸入密碼,在
退出軟件前PLC是在線(xiàn)狀態(tài)的,那么通過(guò)串口向PLC發(fā)送如下十六進(jìn)制代碼: 先發(fā),
01 01 74 02 00 01 47 FA
再發(fā),
01 03 44 54 00 01 D1 2A 最后發(fā),
01 03 44 0A 00 03 31 39
這時(shí)PLC就會(huì )直接返回11個(gè)字節: 01 03 06 313233343536 C5 5C
在這11個(gè)字節中,前3字節是地址和命令代碼,最后2字節是CRC校驗的高字節和低字節;從第4字節到第9字節,這6位就是密碼了,可以直接對應ASCII碼表翻譯出來(lái),如上面的31-36就是十進(jìn)制的1-6,所以返回的密碼就是123456。
第二, 除了上面的漏洞,還有一個(gè)就是,可以通過(guò)試錯來(lái)得到,
信捷的密碼解除指令為: 01 03 40 0A 00 01 B1 CB
發(fā)出這個(gè)指令與01 01 74 02 00 01 47 FA
都會(huì )訪(fǎng)問(wèn)密碼,不過(guò)后者在返回密碼后還會(huì )上傳程序,前者只是單純的解除密碼。 在發(fā)出這個(gè)指令后,再發(fā)如下指令 01 10 44 2C 00 03 06 * * * * * *# $ *表示十六進(jìn)制的密碼,#表示CRC校驗的高字節,$表示CRC校驗的低字節,這串代碼需要用計算機自動(dòng)發(fā)送,運氣好的情況下,很快會(huì )返回密碼。這個(gè)方法同樣適用于三菱等PLC。
再談?wù)動(dòng)布矫娴穆┒矗?nbsp;
先發(fā)張圖看看,下面的圖是信捷XC3-24RT-E的PLC的拆機照片,

說(shuō)說(shuō)這個(gè)板子上的東西吧,下面介紹其中的芯片:
1. 圖中最上方的PLCC封裝的芯片,是PLC的控制芯片。我們知道,在軟件上PLC的組成
由系統程序和用戶(hù)程序組成。系統程序有的也稱(chēng)自舉程序,用戶(hù)程序是用戶(hù)也就是PLC使用者編寫(xiě)的程序。該塊芯片內存放的,就是系統程序。
2. 圖中下方右側是一片單片機,它的作用是輔助主芯片進(jìn)行系統方面的控制。
3. 圖中下方左側的一大一小兩片芯片是存儲用戶(hù)程序的內存芯片,也就是說(shuō)我們編寫(xiě)的
PLC控制程序都是存放在這里面的。
4. 其他的芯片,包括驅動(dòng)芯片,通信芯片,運放等等與我們破解無(wú)關(guān),就不細述了。 在了解了以上內容后,大家會(huì )有疑惑了,PLC程序我們知道在哪里了,問(wèn)題是密碼在哪里呀?其實(shí)這個(gè)問(wèn)題很簡(jiǎn)單,密碼一般是放在內存中的,當然也有存放在主控芯片中的。但是無(wú)論哪種情況,主控芯片在初始化掃描程序的時(shí)候,一定會(huì )掃描自身的某個(gè)寄存器,這個(gè)寄存器存放的是一個(gè)標志,即程序有無(wú)加密的標志。如果該寄存器被置位(表示程序已加密),那么在運行上位機軟件登錄時(shí)就調用密碼輸入程序,反之則不進(jìn)行密碼輸入程序的調用,直接調用用戶(hù)程序。因此,一切的玄機都在這個(gè)神奇的寄存器中!
我們在無(wú)法改變這個(gè)特殊寄存器的值的情況下怎么辦呢?怎么才能繞過(guò)密碼讀取程序呢?或者直接得到密碼呢? 方法有兩個(gè):一,更換控制芯片,內存芯片不變,這時(shí)PLC的程序就可以直接讀出來(lái)了;二,更換內存芯片,將內存芯片更換到另一塊沒(méi)有密碼的板子上,亦可以直接讀出程序。 以上就是此次介紹的利用漏洞破解信捷PLC密碼的全部方法了! 除了以上的,當然還有一些其他的漏洞,在此就不分享了。
最后給諸位分享一組萬(wàn)能代碼:51 51 31 35 30 35 39 37 39 31 36 33 32 使用串口工具發(fā)送模式,輸入萬(wàn)能代碼,然后在HEX/ASCII中切換至ASCII形式,將代碼發(fā)送即可。
技術(shù)需要交流才能進(jìn)步,望諸位不吝門(mén)戶(hù)之見(jiàn),坦誠交流。