SIM卡ADM认证实现IMSI修改的APDU构造及操作问题咨询
ADM权限认证及IMSI更新解决方案
核心思路梳理
- ADM权限认证本质上是验证卡内预置的管理类密钥,99%的消费级SIM/USIM卡使用标准
VERIFY指令(INS=0x20)完成,而非AUTHENTICATE指令。AUTHENTICATE通常用于GSM/3G鉴权、安全通道建立等场景,不用于普通ADM权限校验 - 网上找到的通用APDU无效,大概率是密钥引用参数(P2)或者ADM码编码格式和你使用的卡不匹配
标准ADM认证APDU构造规则
完整指令结构如下:
| 字段 | 取值说明 |
|---|---|
| CLA | 固定为0x00(标准GSM/USIM卡)或0xA0(老版本SIM卡) |
| INS | 固定为0x20(VERIFY指令) |
| P1 | 固定为0x00 |
| P2 | ADM密钥对应的引用ID,常见取值为0x0A`0x0F`对应ADM1ADM6级别,具体值需要从你卡的文件访问控制条件中读取 |
| Lc | ADM码的字节长度,8位ADM码对应0x08 |
| Data | ADM码的编码值,90%以上运营商采用ASCII编码,如8位ADM码12345678对应的十六进制为0x3132333435363738,部分特殊卡采用BCD编码,对应值为0x12345678 |
| Le | 不需要返回数据时可省略 |
示例:你的ADM码为
12345678,卡的ADM1对应P2为0x0A,则完整APDU为:00 20 00 0A 08 31 32 33 34 35 36 37 38
认证成功时卡返回状态码9000,即可正常更新IMSI文件
必要前置排查步骤
- 先确认ADM密钥对应的P2值:选中IMSI所在的DF目录,读取文件的FCP参数,访问控制字段中会标记更新IMSI所需的密钥ID,该ID就是你需要填到P2的取值
- 避免锁卡:在输入ADM码前,先发送不带数据的VERIFY指令查询剩余重试次数,指令格式为
00 20 00 [P2值] 00,返回63 CX时X即为剩余重试次数,次数为0时卡会永久锁死 - 确认路径:ADM密钥通常存储在MF根目录下,认证前请先选择MF(指令
00 A4 00 00 02 3F00),不要在子DF下发送ADM认证指令
特殊情况处理
如果是支持安全通道的eUICC/运营商定制卡,确实需要用AUTHENTICATE指令(INS=0x88)完成ADM认证,此时需要构造TLV格式的请求数据:
- Tag
0x81:1字节,值为ADM密钥的ID - Tag
0x80:N字节,值为ADM码的编码值
示例指令格式:00 88 00 00 0A 81 01 0A 80 08 3132333435363738
内容的提问来源于stack exchange,提问作者Nesca
相关产品推荐
相关产品推荐

