第二章:JCOP卡片物理特性与通信协议

做JCOP固件逆向,第一步不是拿示波器去抓信号,而是先搞清楚这张卡到底长什么样、怎么跟它说话。我见过不少新手上来就怼着7816接口猛测,结果发现卡片其实是非接触式的——白忙活一场。所以这一章,咱们先把物理层和通信协议捋清楚。

2.1 接触式接口:ISO/IEC 7816

接触式智能卡,说白了就是那张插进读卡器里的塑料片。它的物理接口由ISO/IEC 7816-2定义,标准触点有8个,编号C1到C8。但实际用的通常只有6个:VCC(电源)、GND(地)、RST(复位)、CLK(时钟)、I/O(数据线),还有VPP(编程电压,现在基本废弃了)。

我个人习惯,拿到一张卡先看触点氧化程度。如果触点发黑或者有划痕,大概率是频繁插拔导致的接触不良。我曾经遇到过一张卡,怎么复位都不应答,换了台读卡器就好了——就是触点脏了。

触点编号 信号名称 说明
C1 VCC 供电电压,通常5V或3V
C2 RST 复位信号,低电平有效
C3 CLK 时钟信号,频率通常1-5MHz
C4 RFU 保留未用
C5 GND
C6 VPP 编程电压,现代卡片已废弃
C7 I/O 半双工数据线
C8 RFU 保留未用

通信协议方面,7816-3定义了T=0(字符传输)和T=1(块传输)两种协议。T=0是字节级传输,每次发一个字节带奇偶校验;T=1是块级传输,有更完善的差错控制。JCOP卡片通常支持T=1,但有些老卡只支持T=0。你想想看,如果固件里只实现了T=0,你用T=1去通信,卡片根本不理你。

我的经验:逆向分析时,先用T=0发一个复位应答(ATR),从ATR的TD1字节就能看出卡片支持哪些协议。如果TD1=0x01,说明支持T=1;如果TD1=0x00,那就只有T=0。

2.2 非接触式接口:ISO/IEC 14443

非接触式卡,就是那种靠近读卡器就能刷的卡。它靠电磁感应供电,工作频率13.56MHz。ISO/IEC 14443定义了两种类型:Type A和Type B。JCOP卡片通常支持Type A,也就是NXP的MIFARE系列用的那种。

14443的通信过程分几步:首先是PCD(读卡器)发送REQA命令,PICC(卡片)应答ATQA。然后进行防冲突和选卡,最后进入激活状态。嗯,这里要注意,非接触式通信的速率比接触式慢不少,而且容易受电磁干扰。我曾经在实验室里测一张卡,怎么都读不到ATQA,后来发现旁边放了个手机充电器——干扰太强了。

核心区别:接触式通信是物理连接,稳定可靠;非接触式通信是无线连接,方便但容易受干扰。做逆向时,如果条件允许,优先用接触式接口抓数据。

2.3 APDU命令结构

APDU(Application Protocol Data Unit)是智能卡通信的基本单位。不管是接触式还是非接触式,最终都是通过APDU来交换数据。APDU分两种:命令APDU(C-APDU)和响应APDU(R-APDU)。

命令APDU的结构是这样的:

CLA INS P1 P2 [Lc] [Data] [Le]

CLA: 指令类别,通常0x00表示ISO标准指令
INS: 指令代码,比如0xA4表示SELECT
P1, P2: 参数,具体含义看指令
Lc: 数据域长度(可选)
Data: 发送的数据(可选)
Le: 期望返回的数据长度(可选)

响应APDU的结构:

[Data] SW1 SW2

Data: 返回的数据(可选)
SW1, SW2: 状态字,比如0x90 0x00表示成功

举个例子,SELECT命令选择文件:

发送: 00 A4 04 00 02 3F 00
解释: CLA=00, INS=A4, P1=04(按名称选择), P2=00, Lc=02, Data=3F00(MF文件ID), Le=00

响应: 90 00
解释: 成功

我个人习惯,逆向分析时先抓一组正常的APDU交互,搞清楚卡片支持哪些指令。比如SELECT、READ BINARY、UPDATE BINARY这些基本指令。如果卡片返回6A 82(文件未找到),说明你选的路径不对;如果返回69 85(安全条件不满足),说明需要先验证PIN。

避坑指南:我曾经遇到过一张卡,发送SELECT命令后返回6E 00(指令不支持)。查了半天才发现,这张卡的CLA不是0x00,而是0x80。所以别想当然,先看ATR里的历史字节,那里可能藏着CLA的取值。

2.4 知识体系总览

下面这张图,是我自己总结的JCOP卡片物理与协议层知识结构。你可以把它当作一个快速索引,遇到问题先看这张图,定位到具体环节再深挖。

JCOP卡片物理特性与通信协议知识体系 物理接口 接触式 非接触式 7816触点(C1-C8) 14443 Type A/B 通信协议 T=0协议 T=1协议 APDU命令/响应 数据单元 ATR 状态字 核心:所有通信最终都通过APDU交换数据 典型复位流程 1. 上电/场激活 → 2. 卡片复位(RST) → 3. 发送ATR → 4. PPS协商(可选) → 5. APDU通信 ATR关键字节:TS(起始符)、TD0(协议类型)、TA1(时钟因子)、历史字节(厂商信息)

这张图把物理接口、通信协议、数据单元三个维度串起来了。你从物理层开始,一路走到APDU层,就能理解整张卡的工作流程。我建议你把这张图打印出来贴在工位上,做逆向时随时对照。

总结一下:接触式接口稳定但麻烦,非接触式方便但干扰多。不管哪种方式,最终都是通过APDU对话。ATR是卡片的自我介绍,读懂ATR就等于拿到了卡片的身份证。状态字是卡片的情绪表达,6A 82是生气,69 85是委屈,90 00才是开心。
专注资料整理