因业务需要对USIM卡进行操作,因此前没有接触过读卡方面的操作,跌跌撞撞两个月后才能大概的对卡进行一些操作。
不同业务
对读卡操作可能有手机方面的读卡,Android手机对读卡可能有封装好的模块进行读取
有的是原生读卡器进行的读卡操作
有的是通过某种协议链接插入卡的卡池(卡池内有很多卡) 读卡操作
我介绍的是第三种, 不过不包括硬件开发层次 仅仅是APUD命令操作
读卡前的准备
认真阅读IOS7816协议 如果还想要硬件开发 不仅仅是读取卡的话 需要认真阅读第一部分卡片的基本操作
仅仅视为了读卡的话 阅读行业间交换命令
3GPP 也是必不可少的读前阅读的文件
弄清楚自己想要读取什么卡
以上 五个黄色的则是不需要激活应用就能读取到的 不属于激活应用范围内
命令示例(读取ICCID,线性文件)
发送命令 00A4000402
00 逻辑信道 A4 select flie(7816协议) 04P1 02P2
返回命令 01a4
有些设备可能前面没有01 只有a4 有a4的话就是证明卡已接收进入文件指令
发送命令 2FE2
这里没什么好说的就是进入文件 2FE2
接收命令 611e
61 SW2 任然是有效字节, 通俗的讲的话就是 我还有1E个字节可以回复给你 所以你需要接收看看
发送命令 00C000001e
00 逻辑信道 C0 GET RESPONSE(IOS7816) P1:00 P2:00 1E: 我想接收到的数据
接收命令 c0621c8202412183022fe2a5038001718a01058b032f06048002000a8801109000
C0 刚刚你发出的指令 621C 62 文件控制样板 然后回复的这么多按照IOS7816开始分化
82标记 02后面两个字节 分开也就是82024121
83标记 02后面两个字节 分开也就是83022fe2
a5标记 03后面三个字节 分开也就是03800171
8a标记 01后面一个字节 分开也就是0105
8b标记 03后面三个字节 分开也就是032f0604
80标记 02后面两个字节 分开也就是02000a
88标记 01后面一个字节 分开也就是0110
通过分析 这个是线形文件82共两个字节 所以长度的话在80最后一个字节0a
发送命令 00b000000A
00逻辑信道 b0 READ BINARY P100 P200 Le 0A 带读取字段
接受命令 b098684027511209107780
这就是ICCID
命令实例(激活应用)
发送命令 00A4000402
上面已经赘述
接受命令 01a4
....
发送命令 2F00
2F00 是AID的地址
接受命令 6121
.....
发送命令 00C0000021
.....
接受命令 c0621f8205422100260183022f00a5038001718a01058b032f0604800200268801f0
这个也需要分解
82 05 42 21 00 26 01
83 02 2f 00
a5 03 80 01 71
8a 01 05
8b 03 2f 06 04
80 02 00 26
88 01 f0
这次82为五个字节 可以认为是环形文件 需要用B2去读取环形文件
发送命令 AA66010500B2010426
其中 B2 READ RECORD(IOS7816) P1 01 第一页 P2 04 26 每次读取26个
需要注意的是 当82为五个字节的时候 最后一位为页数 这次看的是01 当比如为02 的时候就是两页可读 命令为
AA66010500B2020426
三页可读的时候
AA66010500B2030426
26是不变的 变的是P1
接受命令 b261244f10a0000000871002ff86ffff89ffffffff5010434d43434248444d533076322e302020
其中F最多的是补充字节 前面则是应用地址 a0000000871002ff86ffff89ffffffff
应用下的文件
我就一次性说了 ,如果有啥不懂得可以私信我(前提别啥都不知道问我来,必须了解IOS7816 3GPP)
发送命令00A4000402
接受命令01a4
发送命令2F00
接受命令6121
发送命令00C0000021
接受命令c0621f8205422100260183022f00a5038001718a01058b032f0604800200268801f0
发送命令00B2010426
接受命令b261244f10a0000000871002ff86ffff89ffffffff5010434d43434248444d533076322e3020209000
发送命令00A4040410
接受命令a4
发送命令a0000000871002ff86ffff89ffffffff
接受命令6140
发送命令00A4080404
接受命令01a4
发送命令7FFF6f07
接受命令6119
发送命令 00 C0 00 00 19
接受命令c062178202412183026f078a01058b036f0606800200098801389000
发送命令 00 B0 00 00 09
接受命令b00849064064110871329000
总结
大概整理就是这个样子 我已经大白话讲了,仔细看看能看懂
实在不行就套用