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, 二进制发布, 云资产清单, 信号解调, 公交票卡, 公共交通, 内存转储, 协议解码, 客户端加密, 开源工具, 弱耦合, 时间戳解析, 有效次数, 直接内存访问, 硬件破解, 票务分析, 纸质票, 芯片读取, 逆向工程