为什么需要删除小程序的包才能删除我的小程序?
Why do I need to delete the applet's package to delete my applet?
我有一个空的 Javacard,如下所示:
user@system$ java -jar gp.jar --list
ISD: A000000003000000 (OP_READY)
Privs: SecurityDomain, CardLock, CardTerminate, CardReset, CVMManagement
而且我在上面安装了一个奇怪的小程序:
user@system$ java -jar gp.jar --install applet.cap
CAP loaded
user@system$
好了,小程序安装成功:
user@system$ java -jar gp.jar --list
ISD: A000000003000000 (OP_READY)
Privs: SecurityDomain, CardLock, CardTerminate, CardReset, CVMManagement
APP: 01020304050601(SELECTABLE)
PKG: 010203040506(LOADED)
user@system$
但是当我尝试删除小程序时我失败了:
user@system$ java -jar gp.jar --delete 01020304050601 --debug --verbose
# Successful Mutual Authentication with Security Level = 01 (CMAC)
A>> 84F28002 0A 4F00<CMAC> 00
A<< E3114F08A0000000030000009F700101C5019E 9000
A>> 84F24002 0A 4F00<CMAC> 00
A<< E3104F07010203040506019F700107C50100 9000
A>> 84F21002 0A 4F00<CMAC> 00
A<< E30F4F060102030405069F700101C50100 9000
A>> 84F22002 0A 4F00<CMAC> 00
A<< E30C4F060102030405069F700101 9000
A>> 84E40000 11 4F0701020304050601<CMAC>
A<< 6985
Could not delete D3646467329901. Some app still active?
我也尝试过以下形式的删除命令:
user@system$ java -jar gp.jar --delete 01020304050601 --force ==> Same result
user@system$ java -jar gp.jar --delete 010203040506 ==> Same result
我可以用来删除小程序的唯一成功的形式如下:
user@system$ java -jar gp.jar --delete 010203040506 --force
# Successful Mutual Authentication with Security Level = 01 (CMAC)
A>> 84F28002 0A 4F00<CMAC> 00
A<< E3114F08A0000000030000009F700101C5019E 9000
A>> 84F24002 0A 4F00<CMAC> 00
A<< E3104F07010203040506019F700107C50100 9000
A>> 84F21002 0A 4F00<CMAC> 00
A<< E30F4F060102030405069F700101C50100 9000
A>> 84F22002 0A 4F00<CMAC> 00
A<< E30C4F060102030405069F700101 9000
A>> 84E40080 10 4F06010203040506<CMAC>
A<< 9000
小程序及其包现已消失:
user@system$ java -jar gp.jar --list
ISD: A000000003000000 (OP_READY)
Privs: SecurityDomain, CardLock, CardTerminate, CardReset, CVMManagement
问:为什么我需要删除包才能删除小程序本身?
请注意,这种情况仅针对特定的 cap 文件出现。
仅供参考:我尝试了不同的工具(包括 gpshell、pyapdu 等),但得到了相同的结果。
小程序的卸载过程没有运行成功,因此无法单独删除小程序实例,很可能您在小程序代码中声明了静态内容,如私有静态瞬态字节数组。在这种情况下,您必须通过覆盖 Applet 的 uninstall
方法将任何静态对象取消初始化为 null。检查 JCRE 中的对象所有权以了解问题
我有一个空的 Javacard,如下所示:
user@system$ java -jar gp.jar --list
ISD: A000000003000000 (OP_READY)
Privs: SecurityDomain, CardLock, CardTerminate, CardReset, CVMManagement
而且我在上面安装了一个奇怪的小程序:
user@system$ java -jar gp.jar --install applet.cap
CAP loaded
user@system$
好了,小程序安装成功:
user@system$ java -jar gp.jar --list
ISD: A000000003000000 (OP_READY)
Privs: SecurityDomain, CardLock, CardTerminate, CardReset, CVMManagement
APP: 01020304050601(SELECTABLE)
PKG: 010203040506(LOADED)
user@system$
但是当我尝试删除小程序时我失败了:
user@system$ java -jar gp.jar --delete 01020304050601 --debug --verbose
# Successful Mutual Authentication with Security Level = 01 (CMAC)
A>> 84F28002 0A 4F00<CMAC> 00
A<< E3114F08A0000000030000009F700101C5019E 9000
A>> 84F24002 0A 4F00<CMAC> 00
A<< E3104F07010203040506019F700107C50100 9000
A>> 84F21002 0A 4F00<CMAC> 00
A<< E30F4F060102030405069F700101C50100 9000
A>> 84F22002 0A 4F00<CMAC> 00
A<< E30C4F060102030405069F700101 9000
A>> 84E40000 11 4F0701020304050601<CMAC>
A<< 6985
Could not delete D3646467329901. Some app still active?
我也尝试过以下形式的删除命令:
user@system$ java -jar gp.jar --delete 01020304050601 --force ==> Same result
user@system$ java -jar gp.jar --delete 010203040506 ==> Same result
我可以用来删除小程序的唯一成功的形式如下:
user@system$ java -jar gp.jar --delete 010203040506 --force
# Successful Mutual Authentication with Security Level = 01 (CMAC)
A>> 84F28002 0A 4F00<CMAC> 00
A<< E3114F08A0000000030000009F700101C5019E 9000
A>> 84F24002 0A 4F00<CMAC> 00
A<< E3104F07010203040506019F700107C50100 9000
A>> 84F21002 0A 4F00<CMAC> 00
A<< E30F4F060102030405069F700101C50100 9000
A>> 84F22002 0A 4F00<CMAC> 00
A<< E30C4F060102030405069F700101 9000
A>> 84E40080 10 4F06010203040506<CMAC>
A<< 9000
小程序及其包现已消失:
user@system$ java -jar gp.jar --list
ISD: A000000003000000 (OP_READY)
Privs: SecurityDomain, CardLock, CardTerminate, CardReset, CVMManagement
问:为什么我需要删除包才能删除小程序本身?
请注意,这种情况仅针对特定的 cap 文件出现。
仅供参考:我尝试了不同的工具(包括 gpshell、pyapdu 等),但得到了相同的结果。
小程序的卸载过程没有运行成功,因此无法单独删除小程序实例,很可能您在小程序代码中声明了静态内容,如私有静态瞬态字节数组。在这种情况下,您必须通过覆盖 Applet 的 uninstall
方法将任何静态对象取消初始化为 null。检查 JCRE 中的对象所有权以了解问题