在过去的一周里,我正在为一个奇怪的情况而苦苦挣扎。我正在尝试删除一个小程序,但响应删除命令时0x6985。
场景:
- SIM卡中存在小程序X。
- SIM卡插入手机。
- 安卓应用程序将从服务器接收命令,并通过电话管理器将这些命令发送到SIM卡。
- 服务器控制所有命令,并具有身份验证所需的所有密钥,并且所有 AID 都是已知的。
- Android应用程序充当桥梁,将命令引导到SIM卡并将响应发送回服务器。
在我的生态系统中,小程序是如何相互连接的?
还有一个小程序,即Y,它保存了一个小程序的引用,- 即X.[我知道在Y释放X小程序的引用之前删除将不起作用] 在 X 小程序的
- uninstall((方法中,我调用了 Y 小程序(通过共享接口(,在那里我释放了 X 小程序的引用。
问题场景:
- 在离线模式下,当我为 X 小程序发送删除命令时,任何时候通过阅读器。它被成功删除。 为了验证 Y 小程序
- 是否正在从 X 小程序接收调用,我在 Y 小程序中的一个缓冲区中设置了一些数据。[这证实了 Y 小程序接到了电话,并且以这种方式成功发布了参考。我通过一些内部设计的命令获得此缓冲区数据,这证实了是否发生了。
手机中的SIM卡的情况
当服务器为 X 小程序发送删除命令时,作为响应,我得到0x6985。
我调用 Y 小程序并检查 Y 的缓冲区中存在哪些数据,该缓冲区对 X 收到的呼叫负责。在那里,永远不会收到来自 X 的呼叫。
使用读卡器不在移动设备中完成的情况
使用PCSC阅读器,当删除命令发送到X时,小程序X成功删除。
Y 小程序的缓冲区数据确认从 X 小程序接收到调用。
我的观察:
我尝试了各种可能的方法来完成这项工作,但每次都失败了。小程序X和Y的上限文件相同,即用于手机和读卡器。我觉得电话管理器
存在一些问题,因为我在这里找不到任何其他罪魁祸首,但我缺乏电话管理器的经验。
非常感谢有关此主题的任何帮助。
如果使用不同的卡,则可能会有实现差异。通常,仅当另一个小程序没有引用一个小程序时,才应删除该小程序。即使在删除时删除引用是一个有效的选择,我也想知道操作系统制造商是否总是会正确处理该部分:您仅在选择删除后调用uninstall
,并且仅在您知道没有更多引用时才删除 - 一个相当完美的第 22 条。
问题也可能是正在使用Applet X(甚至可能是Y(的实例之一。如果是这种情况,则删除也不可用。我不确定拥有两个上下文是否是您的卡实现的一种选择;这些不是多核野兽。
最后调试6985很难。ISO 7816状态词更多的是关于语法而不是语义;他们只给你最低限度的信息。6985 相当于"运行时错误",所以是的,恐怕你可以花很多时间调试。