使用APDU UPDATE BINARY命令修改IMSI失败(响应98 04)求助
解决SIM卡IMSI修改返回
98 04的问题 首先,98 04这个响应码的核心指向是权限验证不通过——不管是CHV(PIN码)未验证、验证失败,还是认证权限不足,本质都是SIM卡没授予你修改IMSI的操作权限。下面是一步步排查和解决的方案:
1. 先完成CHV1(PIN1)的验证
SIM卡中存储IMSI的EF_IMSI文件几乎都是受CHV1保护的,必须先通过PIN1验证获得操作权限,后续的修改命令才会被接受。
- 执行
VERIFY CHV命令验证PIN1,APDU格式为:
比如你的PIN1是00 20 00 01 <PIN长度> <PIN的十六进制值>1234(4位),对应的APDU就是:
(注:PIN的十六进制是ASCII码转换,比如数字'1'对应00 20 00 01 04 31 32 33 3431) - 验证成功会返回
90 00,这时候再执行UPDATE BINARY命令才有可能通过。
2. 准确定位IMSI所在的EF文件并确认权限
不同SIM卡的文件路径可能略有差异,必须先定位到EF_IMSI并确认它的访问条件:
- 先选择MF(主文件):
00 A4 00 00 02 3F 00 - 再选择DF GSM(GSM应用目录):
00 A4 00 00 02 7F 20 - 最后选择
EF_IMSI:
每一步都要返回00 A4 00 00 02 6F 0790 00才算定位成功。 - 可以通过
READ BINARY读取文件头,确认EF_IMSI的访问条件是CHV1验证通过,如果是需要ADM(管理员密码)权限,那普通用户一般无法获取这个密码,只能放弃或者使用可写的测试SIM卡。
3. 检查UPDATE BINARY命令的格式正确性
IMSI的修改命令必须严格符合APDU规范,尤其是数据格式和偏移量:
- UPDATE BINARY的标准格式:
00 D6 <P1> <P2> <Lc> <IMSI的BCD编码数据>- P1/P2是写入的起始偏移量,IMSI从文件开头写入的话填
00 00 - IMSI是15位数字,用BCD编码存储(占8字节,最后一位如果是奇数会补
F)
比如要修改的IMSI是460011234567890,转成BCD码是46 00 11 23 45 67 89 0F,对应的APDU就是:
注意:数据长度必须和00 D6 00 00 08 46 00 11 23 45 67 89 0FLc(这里是08)一致,否则命令会被拒绝。 - P1/P2是写入的起始偏移量,IMSI从文件开头写入的话填
4. 排除SIM卡锁死或硬件限制问题
- 如果CHV1验证多次失败,会导致SIM卡锁死,此时需要PUK码解锁,不要继续尝试,否则会永久锁卡。
- 部分运营商的正式SIM卡是硬件级禁止修改IMSI的,即使你完成了CHV1验证,也无法修改,这种情况下只能更换可写的测试SIM卡(比如白卡、专用测试卡)。
内容的提问来源于stack exchange,提问作者José Sarmiento
相关产品推荐
相关产品推荐

