LSIS FEnet 协议

LSIS XGB Fast Ethernet 模块(即 FEnet I/F 模块,型号如 XGL-EFMT、XGL-EFMF 等)是 LS 电气(原 LS 产电)PLC 用于高速通信的接口模块。它使用专有的 LSIS FEnet 协议

封装与传输

LSIS FEnet 协议主要运行在以下传输层上:

用途 传输层 端口
XGT 服务(上位/主站请求) TCP 2004
Fast Ethernet 通信(主站直连) UDP 2005
DLINK(专有总线) 数据链路层 -

报文结构

LSIS FEnet 报文由 20 字节的专有头部 + 具体数据/命令体组成

偏移 长度(字节) 字段名 含义
0x00 2 LSIS_Header 协议标识符,固定为 0x4C53 ("LS")
0x02 2 Reserved1 保留(通常为 0x0000)
0x04 2 Command 命令码(详见下文)
0x06 2 DataType 数据类型(Bit/Byte/Word)
0x08 2 Reserved2 保留/填充(部分版本用作帧长)
0x0A 2 BlockNum 操作数量(读取/写入的块数)
0x0C 2 FrameLen 后续数据体的长度
0x0E 2 ErrorCode 错误码(响应时有效,请求为 0)
0x10 2 SourceCPU 源 CPU 编号/槽位
0x12 2 DestCPU 目标 CPU 编号/槽位
0x14 N Data 数据负载(具体取决于命令)

核心字段

命令码

命令码决定了此报文是读还是写,以及操作的对象类型。常见值如下:

码值 功能 方向
0x0000 连接请求/心跳 C→S
0x0011 直接变量读 C→S
0x0014 直接变量写 C→S
0x0018 连续地址读 C→S
0x0019 连续地址写 C→S
0x00A0 响应(带数据) S→C
0x00C1 连接确认 S→C

数据类型

值 含义 大小
0x0001 Bit(位) 1 bit
0x0003 Byte 1 字节
0x0004 Word 2 字节
0x0006 DWord 4 字节
0x0007 LWord 8 字节

错误码

仅在响应报文中有意义。0x0000 表示成功。常见错误码如 0x0F04(地址越界)等

数据负载结构(读取/写入)

如果命令是读写连续地址(0x0018/0x0019),数据负载结构如下

请求读取:

[起始地址]   (4 bytes, 地址格式取决于 PLC 内存区域)
[读取长度]   (2 bytes, 要读的字数/位数)

请求写入:

[起始地址]   (4 bytes)
[写入长度]   (2 bytes)
[写入数据]   (N bytes, 按 DataType 打包)

响应:

[数据字节数] (1 byte, 表示后续数据的字节长)
[结果数据]   (N bytes)

PLC 内存地址编码

在写入/读取时,地址字段需根据 PLC 内存区域进行编码。例如 XGB 系列(XBC, XBM, XGK 等)的常用地址映射:

区域 地址码 说明
P 0x5058 I/O 接触点
M 0x4D58 内部继电器
L 0x4C58 锁存继电器
K 0x4B58 保持继电器
D 0x4458 数据寄存器
U 0x5558 模拟数据寄存器

实战案例

协议精准定位分析(LSIS XGB Fast Ethernet 模块协议)

pasted_1784850075270_zndenz.png

此题与常规的 LSIS FEnet 协议不一样

查看会话只有这一组通信

pasted_1784914009843_mjyxfu.png

考察 LSIS FEnet 协议,过滤出有用的 TCP 协议

ip.src == 192.168.2.191 &&
ip.dst == 192.168.2.186 &&
tcp.dstport == 2004 &&
tcp.len > 0

pasted_1784914376192_9yykba.png

第一个包的 Data 如下

4c 53 49 53 2d 58 47 54  00 00 00 00  a0 33  00 00  16 00
03 47 58 00 14 00  00 00 01 00  06 00  25 4d 42 32 30 30
04 00  7d 00 00 00

按照 PDF 解析如下:

偏移 字节数 值 说明
0x00 10 4c 53 49 53 2d 58 47 54 00 00 Company ID / LSIS ID,ASCII 为 "LSIS-XGT\0\0"
0x0A 2 00 00 PLC Information,PLC 信息字段,本报文值为 0x0000
0x0C 1 a0 CPU Information,CPU 类型/系列标识,值为 0xA0
0x0D 1 33 Frame Direction,0x33 表示客户端发往 PLC 的请求帧
0x0E 2 00 00 Invoke ID / Frame Order No.,请求序号,本报文为 0
0x10 2 16 00 Application Data Length,小端 0x0016 = 22 字节
0x12 1 03 Position Information,模块/站点位置信息
0x13 1 47 Header Checksum,XGT 头部校验和
0x14 2 58 00 Command,写请求,协议记作 0x5800
0x16 2 14 00 Data Type,连续字节类型,协议记作 0x1400
0x18 2 00 00 Reserved,保留字段
0x1A 2 01 00 Number of Blocks,小端值 1,本次操作包含 1 个变量块
0x1C 2 06 00 Variable Name Length,变量名长度为 6 字节
0x1E 6 25 4d 42 32 30 30 变量名 ASCII:"%MB200"
0x24 2 04 00 Data Count / Data Length,后续写入数据长度为 4 字节
0x26 4 7d 00 00 00 写入 %MB200 的连续 4 字节数据

而 7d 刚好是 },所以写入的数据是倒序的,把所有数据取出来过后得到 flag

flag{c93650241853da240f9760531a79cbcf}

评论