Nour833/CTS_STRASBOURG_READER
GitHub: Nour833/CTS_STRASBOURG_READER
一个轻量级 C 工具,利用 libnfc 读取并解码斯特拉斯堡 CTS 纸质车票的 ISO 14443-B 原始内存。
Stars: 0 | Forks: 0
# CTS Strasbourg 票务阅读器 / 解码器
一个轻量级的 C 语言工具,用于读取、倾倒和解码斯特拉斯堡 CTS(Compagnie des Transports Strasbourgeois)一次性纸质车票的原始内存。
这些车票采用 **ST Microelectronics SRx (ISO 14443-B)** 芯片协议,由于特定的调制要求(`ISO14443B2SR`)和较弱的天线耦合,使用标准 NFC 工具读取非常困难。
## 🚀 功能
* **原始内存倾倒:** 绕过标准驱动程序,直接读取 SRI512 芯片的全部 512 位(64 字节)内存。
* **自动解码:** 解析十六进制数据以揭示:
* **车票类型**(例如:24 小时通票)。
* **有效计数**(剩余乘车次数/验证次数)。
* **时间戳**(解码上次验证的确切日期和时间)。
* **UID**(硬件序列号)。
* **Libnfc 实现:** 使用直接硬件寻址来修复 USB 阅读器常见的“耦合”问题。
## 🛠 硬件要求
* **NFC 阅读器:** ACS ACR122U(或任何兼容 `libnfc` 的阅读器)。
* **车票:** 斯特拉斯堡 CTS “Billet Sans Contact”(带方形天线的纸质车票)。
* **操作系统:** Linux(Ubuntu/Debian/Kali)。
## 📦 先决条件
您需要在系统中安装 `libnfc` 和 `gcc`。
```
sudo apt update
sudo apt install libnfc-bin libnfc-dev gcc
```
## ⚙️ 编译
克隆本仓库并编译 `dump_ticket.c` 文件:
```
gcc -o dump_ticket dump_ticket.c -lnfc
```
## 📖 使用说明
### 1\. 终止冲突驱动程序
Linux 默认的智能卡驱动程序(`pcscd` 和 `pn533`)通常会干扰这些芯片所需的原始访问。**在运行工具之前必须停止它们。**
```
sudo systemctl stop pcscd
sudo systemctl stop pcscd.socket
sudo modprobe -r pn533_usb pn533 nfc
```
### 2\. 运行解码工具
以 root 权限运行可执行文件(硬件访问需要):
```
sudo ./dump_ticket
```
### 3\. “边缘悬停”技巧
这些纸质车票的天线非常小。**不要将车票放在阅读器的中心位置。**
1. 将车票放置在阅读器的**外侧塑料边缘**。
2. 缓慢移动,直到文本出现。
3. 该工具会持续扫描特定的 `ISO14443B2SR` 协议。
## 🖥️ 示例输出
当车票成功读取时,工具会输出原始十六进制表格,随后是解码后的报告:
```
--- STRASBOURG TICKET RIPPER ---
[*] Reader opened: ACS / ACR122U PICC Interface
[*] Place ticket on the RIM/EDGE now...
[+] TICKET DETECTED! (UID: 80 XX XX XX XX XX XX XX)
Reading memory...
Blk 00 | 59 00 00 00 Y...
Blk 01 | 40 91 00 25 @..%
Blk 02 | AA BB CC DD .... <-- Ticket ID (Anonymized)
Blk 03 | 11 22 33 44 ."3D
Blk 04 | 00 00 00 40 ...@
Blk 05 | 38 0a 00 fe 8...
Blk 06 | fd ff ff 00 ....
...
Blk 10 | fd 24 00 00 .$..
Blk 11 | 09 a8 19 fb ....
Blk 12 | 00 00 b6 02 ....
Blk 13 | 6a 16 02 00 j... <-- Validated on Day 22 @ 12:50
Blk 14 | DE AD BE EF ....
Blk 15 | CA FE BA BE ....
========================================
TICKET FORENSICS REPORT
========================================
[*] TICKET TYPE: 24 HOUR PASS (Detected)
[*] COUNTER VALUE: 10 (Raw Hex: 0A)
[*] LAST RIDE: Day 22 of the month
[*] TIME STAMP: 12:50 (Calculated)
========================================
```
## 🧠 内存映射(取证分析)
基于逆向工程,以下是 CTS 车票(ST SRI512 芯片)的结构:
| 块 | 原始十六进制示例 | 描述 |
| :--- | :--- | :--- |
| **UID** | `80 XX ...` | **序列号**(打印在背面)。只读硬件 ID。 |
| **00-01** | `59 00 ...` | **系统/锁定位**(芯片配置)。 |
| **02-03** | `AA BB ...` | **购买 ID**。静态交易编号(例如:车票 #68,062,930)。 |
| **05** | `38 0A ...` | **计数器**。`0A` = 10。递减或在使用时锁定。 |
| **10** | `fd 24 ...` | **产品 ID**。`24` = 24 小时通票。 |
| **11-12** | `09 a8 ...` | **验证器 ID**。使用的公交车/电车设备的序列号。 |
| **13** | `6a 16 ...` | **时间戳**。字节 0 = 时间(从凌晨 4 点起的 5 分钟单位),字节 1 = 月份中的日期。 |
| **14-15** | `dd ca ...` | **签名**。用于防止篡改的 UID + 时间戳的 HMAC/校验和。 |
## ⚠️ 免责声明
本工具仅用于**教育和研究目的**。它允许您读取自己的数据以了解系统的工作原理。它不支持克隆或逃票(反重放签名和一次性计数器可防止此类行为)。
**作者不对本软件的任何误用承担责任。**
标签:24小时票, ACR122U, ISO 14443-B, libnfc, NFC, NFC读取器, Ruby on Rails, SRI512, ST Microelectronics, UID, 二进制发布, 云资产清单, 信号解调, 公交票卡, 公共交通, 内存转储, 协议解码, 客户端加密, 开源工具, 弱耦合, 时间戳解析, 有效次数, 直接内存访问, 硬件破解, 票务分析, 纸质票, 芯片读取, 逆向工程