6月份去杭州入手杭州通一张,跟@苗_条_肥_仔 学习一起测试杭州通。测试过程记录如下。
1.SELECT
选择MF
C-APDU: 00A4000002 3F00
R-APDU: 6F15840E
315055422E5359532
E4444463031A503880101
9000
不知道杭州通的入口名字,直接选择MF 3F00了。
解析一下TLV结构,6F是FCI模板,84后面是DF的名字“1PUB.SYS.DDF01”(感谢@智能卡技术 纠正),上电直接使用名字选择“1PUB.SYS.DDF01”也是可以成功的。A5是FCI专用数据,88是目录基本文件的SFI。
2.READ RECORD 读一下目录下的文件
C-APDU: 00B2010C00
R-APDU: 7011610F4F09A0000000038698070150023F01 9000
解析TLV后,Tag 4F就是应用标识符AID: A00000000386980701,Tag 50是应用标签:3F01。
3.SELECT 选择AID
C-APDU: 00A4040009 A00000000386980701
R-APDU: 6F2E8409
A00000000386980701A5219F0C1E
847531000000000000003100 310000002045887820140614 206406140000
9000
响应是电子存折/钱包规范中SELECT ADF的响应,解析TLV Tag 9F0C是发卡行自定义数据,数据域用蓝色标注出来了,数据的意义没有研究。
4.GET BALANCE 先查下余额
C-APDU: 805C000204
R-APDU: 00000F44 9000
余额是F44,就是39.08元
5.READ RECORD 读交易明细
C-APDU: 00B201C417
R-APDU: 00080000000000016C093100
0102931320140614173611 9000
6.READ RECORD 继续读明细
C-APDU: 00B202C417
R-APDU: 000700000000000000093100
0102916220140614171645 9000
7.READ RECORD 继续读明细
C-APDU:
00B203C417
R-APDU: 0006000000000000B6093100
0102916620140614154024 9000
8.READ RECORD 继续读明细
C-APDU:
00B204C417
R-APDU:
000500000000000000093100
0102901320140614151910 9000
9.READ RECORD 继续读明细
C-APDU:
00B205C417
R-APDU:
0004000000000000B6093100
0102902120140614140953 9000
10.READ RECORD 继续读明细
C-APDU:
00B206C417
R-APDU:
000300000000000000093100
0102907920140614140031 9000
11.READ RECORD 继续读明细
C-APDU:
00B207C417
R-APDU:
0002000000000000B6093100
0102907220140614085525 9000
12.READ RECORD 继续读明细
C-APDU:
00B208C417
R-APDU:
000100000000000000093100
0102911420140614084815 9000
13.READ RECORD 继续读明细
C-APDU:
00B209C417
R-APDU:
6A83
5~13条指令一直在读交易记录,直到返回6A83,一共读出了8条交易记录,感谢@苗_条_肥_仔 给的日志格式,我这边还在PBOC的文档上找呢。
看数据很明显前两字节表示交易的序号(当然也许是第二字节,但是一个字节表示有些短啊)。
继续很明显的容易知道,数据域的最后7字节表示交易时间格式是YYYY-MM-DD-HH-MM-SS。
比如第12条命令的响应数据中可以知道,这张卡片的第一次交易发生在2014年6月14日8点48分15秒,这个跟我购买卡片的时间对上了,我是是差不多在那个时候在杭州地铁城站站上车的。
这8条记录,是记录了在杭州地铁的进出站信息,没有公交车乘车信息,第8~9字节是消费金额,当然出站才有金额,最后一次好像是南宋御街那边的定安路站做到杭州东站,要3块多钱,好贵啊。
后面的几个字节是终端的编号,手里小票上地铁圈存机的编号就是0108xxxx这样的格式。
14.READ BINARY 读公共应用基本数据文件
C-APDU: 00B095001E
R-APDU: 847531000000000000003100
310000002045887820140614
206406140000 9000
响应数据符合
ED
和
EP
应用的公共应用基本数据文件的格式,并且跟我的充值小票上的信息吻合。
解析一下:
84 75 31 00 00 00 00 00 00 00 31 00 31 00 00 00 20 45 88 78 20 14 06 14 20 64 06 14 00 00
84 75 31 00 00 00 00 00 是发卡方标识
00 是应用类型标识,表示保留
00 是发卡方应用版本
31 00 31 00 00 00 20 45 88 78 是应用序列号 --这个和充值小票的应用序列号相符
20 14 06 14 是应用启用日期 --这个的确是购卡日期
20 64 06 14 是应用有效日期 --50年有效期?
00 00 是 发卡文自定义FCI数据
15.READ BINARY 读0x05文件
C-APDU: 00B0850000
R-APDU: 1700002099010101E0000000 000000000000000000000000 000000000000000000000000 000000000000000000000000 9000
16.READ BINARY 读0x15文件
C-APDU: 00B0950000
R-APDU: 847531000000000000003100 310000002045887820140614 206406140000 9000