You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Global Platform Pro可选择小程序却无法执行指令的问题

问题

我有一个AID为23 03 20 00 00 00的小程序,使用Global Platform Pro(GPP)时可以选中它,但无法运行任何代码。而使用PyAPDU时,我能够正常选择该小程序并执行代码/指令,这表明问题出在GPP的使用方式而非小程序本身。

我执行的步骤:

  • 使用命令 gp --install AppletName.cap 将小程序安装到卡片上
  • 使用命令 gp --apdu 00 A4 04 00 06 23 03 20 00 00 00 --debug 选择小程序
  • 收到响应 90 00
  • 尝试使用命令 gp --apdu 00 14 00 00 --debug 执行指令(我的INS字节为11、12、14、15)
  • 收到响应:6D 00(无效INS)
  • 尝试所有其他INS字节,结果相同。

PyAPDU 日志

Connect successful.
Send: 00 A4 04 00 06 23 02 20 00 00 00
Recv: 90 00
Time used: 43.000 ms
Send: 00 14 00 00
Recv: 90 00
Time used: 3606.000 ms
Send: 00 15 00 00 41
Recv: 04 31 A3 4A 4E 32 53 46 73 7F E4 53 40 9C 87 5E 04 BD A0 B6 99 98 45 86 63 5E 29 4B 47 EC 58 08 FD C7 AB 80 8F 3A 1D 46 89 C3 EB D4 C3 6A 9C C6 E6 58 B0 91 FE 16 1C CA 56 B7 C9 D2 DE D1 3D C5 C5 90 00
Time used: 339.000 ms 

Global Platform Pro 日志

C:\File Location>gp --apdu 00A4040006230220000000 --debug
GlobalPlatformPro v20.01.23-0-g5ad373b
Running on Windows 7 6.1 amd64, Java 1.8.0_191 by Oracle Corporation
# Detected readers from JNA2PCSC
[*] Alcor Micro USB Smart Card Reader 0
[ ] JAVACOS Virtual Contact Reader 0
[ ] JAVACOS Virtual Contactless Reader 1
SCardConnect("Alcor Micro USB Smart Card Reader 0", T=*) -> T=0, 3B69000241434F5
34A76313031
SCardBeginTransaction("Alcor Micro USB Smart Card Reader 0")
A>> T=0 (4+0006) 00A40400 06 230220000000
A<< (0000+2) (42ms) 9000
A>> T=0 (4+0000) 00A40400 00
A<< (0094+2) (167ms) 6F5C8408A000000151000000A550734A06072A864886FC6B01600C060A2
A864886FC6B02020201630906072A864886FC6B03640B06092A864886FC6B040255650B06092A864
886FC6B020103660C060A2B060104012A026E01039F6501FF 9000
[TRACE] GPSession -  [6F]
[TRACE] GPSession -      [84] A000000151000000
[TRACE] GPSession -      [A5]
[TRACE] GPSession -          [73]
[TRACE] GPSession -              [06] 2A864886FC6B01
[TRACE] GPSession -              [60]
[TRACE] GPSession -                  [06] 2A864886FC6B02020201
[TRACE] GPSession -              [63]
[TRACE] GPSession -                  [06] 2A864886FC6B03
[TRACE] GPSession -              [64]
[TRACE] GPSession -                  [06] 2A864886FC6B040255
[TRACE] GPSession -              [65]
[TRACE] GPSession -                  [06] 2A864886FC6B020103
[TRACE] GPSession -              [66]
[TRACE] GPSession -                  [06] 2B060104012A026E0103
[TRACE] GPSession -          [9F65] FF
[DEBUG] GPSession - Auto-detected ISD: A000000151000000
SCardEndTransaction("Alcor Micro USB Smart Card Reader 0")
SCardDisconnect("Alcor Micro USB Smart Card Reader 0", true) tx:16/rx:98

C:\File Location>gp --apdu 00140000 --debug
GlobalPlatformPro v20.01.23-0-g5ad373b
Running on Windows 7 6.1 amd64, Java 1.8.0_191 by Oracle Corporation
# Detected readers from JNA2PCSC
[*] Alcor Micro USB Smart Card Reader 0
[ ] JAVACOS Virtual Contact Reader 0
[ ] JAVACOS Virtual Contactless Reader 1
SCardConnect("Alcor Micro USB Smart Card Reader 0", T=*) -> T=0, 3B69000241434F5
34A76313031
SCardBeginTransaction("Alcor Micro USB Smart Card Reader 0")
A>> T=0 (4+0000) 00140000
A<< (0000+2) (25ms) 6D00
A>> T=0 (4+0000) 00A40400 00
A<< (0094+2) (172ms) 6F5C8408A000000151000000A550734A06072A864886FC6B01600C060A2
A864886FC6B02020201630906072A864886FC6B03640B06092A864886FC6B040255650B06092A864
886FC6B020103660C060A2B060104012A026E01039F6501FF 9000
[TRACE] GPSession -  [6F]
[TRACE] GPSession -      [84] A000000151000000
[TRACE] GPSession -      [A5]
[TRACE] GPSession -          [73]
[TRACE] GPSession -              [06] 2A864886FC6B01
[TRACE] GPSession -              [60]
[TRACE] GPSession -                  [06] 2A864886FC6B02020201
[TRACE] GPSession -              [63]
[TRACE] GPSession -                  [06] 2A864886FC6B03
[TRACE] GPSession -              [64]
[TRACE] GPSession -                  [06] 2A864886FC6B040255
[TRACE] GPSession -              [65]
[TRACE] GPSession -                  [06] 2A864886FC6B020103
[TRACE] GPSession -              [66]
[TRACE] GPSession -                  [06] 2B060104012A026E0103
[TRACE] GPSession -          [9F65] FF
[DEBUG] GPSession - Auto-detected ISD: A000000151000000
SCardEndTransaction("Alcor Micro USB Smart Card Reader 0")
SCardDisconnect("Alcor Micro USB Smart Card Reader 0", true) tx:9/rx:98 

使用这些完全相同的APDU在PyAPDU中可以正常工作,请问我哪里操作错误了?

解答

问题出在Global Platform Pro的--apdu参数工作机制上:每次执行gp --apdu命令都是一个独立的卡片会话。

你执行选择小程序的APDU命令时,确实成功选中了目标小程序,但会话结束后卡片会自动回到默认选中ISD(发行安全域)的状态。当你单独执行业务指令的APDU命令时,这条指令是直接发给ISD的,而ISD并不识别你的小程序定义的INS字节(11、12、14、15),所以返回6D00(无效指令)。

而PyAPDU是在同一个会话中连续执行APDU指令:连接卡片后先选中小程序,接着直接发送业务指令,全程保持会话,所以能正常执行。

解决方法:把选择小程序和执行指令的APDU放在同一个--apdu命令里,用分号分隔,这样GPP会在同一个会话中依次执行这些APDU:

gp --apdu "00 A4 04 00 06 23 03 20 00 00 00;00 14 00 00" --debug

如果需要执行多个指令,继续用分号追加即可,比如:

gp --apdu "00 A4 04 00 06 23 03 20 00 00 00;00 14 00 00;00 15 00 00 41" --debug

内容的提问来源于stack exchange,提问作者LozCodes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 18:45:54