S7 COM 功能碼介紹 - 懂了就能任意操控西門子PLC

1. 連線與會話管理 (Connection & Session Management)

這是在進行任何其他操作之前,建立通訊所必需的功能。

功能碼 (Hex)功能名稱說明
0xF0Setup Communication設定通訊。這是三階段交握的最後一步,用於客戶端 (Client) 與 PLC 之間協商通訊參數,例如 PDU (協定資料單元) 的最大長度和可同時處理的任務數量。

2. 核心資料讀寫 (Core Data Access)

這是最基本也是最常用的功能,用於與 PLC 的記憶體區域進行互動。

功能碼 (Hex)功能名稱說明
0x04Read Variable讀取變數。從指定的記憶體區域讀取一個或多個變數的值,例如輸入 (I)、輸出 (Q)、旗標 (M)、資料塊 (DB) 等。
**0x05Write Variable寫入變數。將一個或多個值寫入到指定的記憶體區域。

3. PLC 狀態控制 (PLC State Control)

這些功能用於改變 CPU 的運行模式。

功能碼 (Hex)功能名稱說明
0x28PLC ControlPLC 控制。這是一個多功能命令,透過不同的參數可以實現:<br>- Start (啟動)<br>- Hot Restart (熱啟動)<br>- Cold Restart (冷啟動)
0x29PLC StopPLC 停止。將 CPU 的模式從 RUN 切換到 STOP,停止使用者程式的執行。

4. 程式區塊操作 (Program Block Operations)

這些功能主要由 TIA Portal 或 STEP 7 等工程軟體使用,用於程式的上傳和下載。

功能碼 (Hex)功能名稱說明
0x1ARequest Download請求下載。開始一個下載流程,客戶端通知 PLC 準備接收一個程式區塊。
0x1BDownload Block下載區塊。傳輸程式區塊 (如 OB, FB, FC, DB) 的資料。
0x1CDownload Ended下載結束。通知 PLC 一個程式區塊已傳輸完畢。
0x1DStart Upload開始上傳。客戶端請求從 PLC 上傳一個程式區塊。
0x1EUpload上傳。傳輸從 PLC 讀取出的程式區塊資料。
0x1FEnd Upload上傳結束。一個程式區塊已成功從 PLC 傳輸到客戶端。

5. 進階系統與診斷功能 (Advanced System & Diagnostic Functions)

許多更複雜的功能被封裝在一個通用的 PDU 類型 Userdata (ROSCTR 類型為 0x07) 中。客戶端透過 Userdata 請求,並在其中指定具體的子功能。

主要透過 Userdata 實現的功能包括:

功能領域說明
Read SZL (讀取系統狀態列表)這是最重要的診斷功能。透過指定不同的 SZL ID,可以讀取極其豐富的系統資訊,例如:<br>- CPU 硬體資訊、韌體版本、序列號 (ID: 0x001C)<br>- CPU 運行狀態、掃描時間<br>- 診斷緩衝區 (Diagnostic Buffer) 的內容<br>- 通訊連接的狀態
Time Functions (時間功能)讀取或設定 PLC 的內部時鐘。
Security Functions (安全功能)處理與 PLC 存取保護相關的操作,例如密碼驗證或 session 金鑰處理 (在較新的 S7-1200/1500 中更為複雜)。
Alarm/Message Functions (警報與訊息功能)用於訂閱、接收和確認來自 PLC 的程式警報或系統事件。

總結來說,S7 CPU 的功能遠不止簡單的讀寫,它提供了一套完整的、層次分明的命令系統,既能滿足基本的數據監控需求,也支援複雜的程式管理和深度系統診斷。

聯絡作者

歡迎透過以上方式與我交流資安技術與 CTF 心得!