支持SWP的USIM卡下载HCI小程序失败,求排查问题及前置条件
我之前折腾过SWP USIM卡的HCI小程序加载,用PyApduTool时也踩过不少坑,结合经验给你梳理下可能的问题和检查点:
先确认前置条件是否满足
USIM卡的权限与兼容性:
- 首先得确认你的USIM卡支持GlobalPlatform(GP)规范——HCI小程序本质是Java Card applet,需要卡开放GP加载权限。你可以先手动发送一条APDU命令
00A4040008A000000003000000(GP的SELECT命令),如果返回6A82(文件未找到),大概率是运营商锁了卡的加载权限,得换开发测试卡或者联系运营商解锁。 - 确认SWP通道已激活:部分手机默认关闭SIM卡的NFC功能,你需要在手机NFC设置里找到“SIM卡NFC”或“eSE/SWP相关选项”并开启;同时要保证手机和USIM卡的SWP协议版本匹配(比如ISO 7816-14或ETSI TS 102 613)。
- 首先得确认你的USIM卡支持GlobalPlatform(GP)规范——HCI小程序本质是Java Card applet,需要卡开放GP加载权限。你可以先手动发送一条APDU命令
PyApduTool环境配置:
- 确保使用的PyApduTool版本适配你的小程序目标Java Card版本,旧版本可能不支持新的GP命令集。
- 检查NFC读卡器识别:如果是通过手机USB连接当读卡器,先运行
pyapdutool --list-readers(部分版本支持),看看能不能识别到手机的NFC设备;要是识别不到,得安装对应手机的USB NFC驱动,或者开启开发者选项里的NFC调试模式。
PyApduTool操作中的常见错误点
小程序包格式问题:
- 你编译的小程序必须是CAP格式(Java Card applet的标准分发格式),不能直接传class或jar文件。确认编译流程:用javac编译.java文件后,用Java Card Converter工具转换成CAP文件,且CAP文件的AID(应用ID)要符合GP规范(长度5-16字节)。
- 版本兼容要匹配:比如你的USIM卡是Java Card 2.2.2,而你编译的CAP是3.0版本,会出现兼容性错误,下载时返回
6A80(数据域参数错误)。
命令参数与流程错误:
- GP密钥错误:默认测试密钥是
404142434445464748494A4B4C4D4E4F,但运营商的USIM卡几乎都会修改密钥,用默认密钥会返回6982(安全状态不满足)。你需要获取对应卡的GP加密密钥(KIC、KID、KCV),在命令行指定:pyapdutool -d -i your_app.cap -k 404142434445464748494A4B4C4D4E4F -r <你的读卡器名称> - 不要跳过INSTALL步骤:GP规范要求先LOAD(传输CAP文件块)再INSTALL(激活小程序)。PyApduTool的
-i参数一般会自动处理两步,但如果是手动分步执行,必须保证顺序正确。
- GP密钥错误:默认测试密钥是
NFC连接稳定性问题:
- 下载时手机和USIM卡的NFC连接不能中断,晃动或距离过远会导致
6F00(未知错误)或超时。建议把手机放在稳定平面,对齐NFC天线和USIM卡位置(通常在手机顶部/底部)。 - 关闭手机省电模式:部分省电模式会限制NFC供电,导致连接不稳定。
- 下载时手机和USIM卡的NFC连接不能中断,晃动或距离过远会导致
额外排查技巧
- 开启PyApduTool调试模式:加上
-d参数运行,会输出每一条APDU命令和响应,根据响应码查GP或ISO 7816错误码表定位问题,比如:6A82:AID未找到(卡不支持GP或LOAD路径错误)6982:密钥错误或未完成认证6A80:CAP格式错误或参数不匹配
- 用其他工具验证:比如用GlobalPlatformPro(gp.jar)尝试下载,若同样报错则是卡或CAP文件问题;若成功则是PyApduTool的配置问题。
内容的提问来源于stack exchange,提问作者MJay
相关产品推荐
相关产品推荐

