JT/T 808 协议
概述
JT/T 808 是交通运输行业标准《道路运输车辆卫星定位系统 北斗兼容车载终端通讯协议》,规定了车载终端与监控平台之间的数据通信格式
协议基于 TCP 或 UDP,采用大端字节序,报文整体以 0x7E 为帧边界,内部需经过转义处理
报文封装格式
每个完整报文由标识位包裹,内部包含消息头、消息体和校验码
1 | +--------+--------+----------+--------+--------+ |
标识位:固定
0x7E,标识一帧的开始和结束消息头:固定 12 字节(无分包)或 16 字节(有分包),包含消息 ID、属性、终端手机号、流水号等
消息体:长度由消息头中的 “消息体长度” 字段决定,内容取决于消息 ID
校验码:从消息头第一个字节到消息体最后一个字节,按字节异或,再与
0x7E异或
消息头结构
消息头结构如下:
1 | Offset: 0 2 4 10 12 |
消息 ID(2 字节,u16)
标识消息类型,如:
0x0001:终端通用应答0x0100:终端注册0x0200:位置信息汇报0x8001:平台通用应答
(高位可用于区分终端/平台消息)
消息体属性(2 字节,u16)
按位域解析
1 | Bit: 15 14 13 10 9 0 |
bit 15:1 表示消息体为分包数据,此时消息头会扩展 4 字节分包信息
bit 14-13:加密方式:00=不加密,01=RSA 等
bit 12-10:保留,或部分文档定义为分包计数器
bit 9-0:消息体长度(0~1023),单位字节
若分包标志为 1,则消息头变为 16 字节,在流水号后追加
1 | +----------------+-----------------+ |
终端手机号(6 字节,u48)
BCD 码格式,长度 6 字节,存储 12 位手机号(不足高位补 0)。例如 013800123456 编码为 0x01 0x38 0x00 0x12 0x34 0x56
消息流水号(2 字节,u16)
由发送方递增,从 0 开始循环,用于匹配应答
通用解题脚本
1 | import argparse |
实战
司机的身份(JT/T808 车载终端通信协议)

打开流量包可以发现大量以 7e 开头、7e 结尾的 JT/T 808 帧

在 No.16 流量中,其中关键报文头
1 | 07 02 40 eb 01 00 00 00 00 01 77 70 64 12 11 00 72 |
解析
1 | 消息 ID:0x0702 |
0x0702 正好是驾驶员身份信息采集上报,消息体开头为
1 | 01 状态:IC 卡插入 |
取出这 180 字节发现是 UTF-16BE。每两个字节对应一个汉字
1 | 8a f8 -> 諸 |
完整取出来得到
1 | 諸隸僧降吽諸陀摩隸僧缽薩願皤耨皤眾劫阿我皤慧阿亦皤我哆兜降嚤祗愍皤迦闍眾皤陀亦聞宣咤迦劫薩囉愍聞須皤塞迦皤諦亦劫亦皤闍願皤咤修闍薩嚤宣皤我菩菩皤迦聞諦婆亦聞皤阿薩所願如空如如囑皤囑 |
用 “新约佛论禅 / 新佛曰” 解密,得到一串 Base64
1 | TVpXR0NaMzNJTlpIUzREWkdBWVhHUlRWSlo2UT09PT0= |
连续 Base 解码得到 flag{Crypy01sFuN}