使用 java 卡而不是 android 中的 SIM 卡和 SEEK
using java card instead of SIM in android with SEEK
我已经用 SEEK 为 Galaxy S3 修补了 android,经过一番努力后,我现在能够将 APDU 发送到 SIM 卡并获得正确的响应。
我想将我自己的小程序放入 SIM 卡中,但由于我们无法获得这样做的权限,我开始怀疑是否有办法发行一张 java 卡来像SIM 卡。我只需要一张 java 卡,phone 无法将其与 SIM 卡区分开来,不需要网络覆盖,而且我知道几乎不可能创建与运营商正常工作并提供网络的 SIM 卡覆盖率。
所有这一切的原因是我需要发送 APDU 并使用我的小程序,但是如果我在 GS3 中插入 java 卡而不是 SIM 卡,它根本无法访问。
所以我的问题是:
是否可以发行 java 卡,使其看起来像 phone(而不是运营商)的 SIM 卡?
或者是否可以更改 android 以便在其中有 java 卡时提供所需的访问权限,即 RIL 照常工作?
编辑
好的,我想我会尝试发行具有以下属性的 Java 卡片:
首先,它将有一个自动 selected 小程序(默认小程序),从现在开始将称为 fake-UICC。
其次,在 fake-UICC 中,我们将模拟 UICC 的文件系统(根据 http://www.in2eps.com/fo-uicc/tk-fo-uicc-mf.html)。
第三,由于不同的 class 用于 SIM APDU(0xA0
)所以所有从 RIL 发送的 APDU 将被 JCRE 定向到假 UICC,因为 class+ 指令不被正常识别Java卡。例如0xA0A4
对于 SIM 卡是 select 但 0x00A4
对于 Java 卡是 select 命令。
在最后一步中,我们将尝试向每个 APDU 发送与真实 SIM 卡完全相同的响应。
也许行不通,但我认为值得一试。
通过 SEEK 访问的 SIM 卡 (UICC) 不是您可以在手机中使用的唯一安全元素。
市场上还有其他 Java 卡解决方案:主要基于 microSD 插槽(例如由 GoTrust 或 Feitian Technologies 提供),您应该可以通过 SEEK 访问。
一些手机(不幸的是,Galaxy S3 不是这种情况)配备了一个特殊的安全元件插槽,您可以将普通智能卡(主要是 Oberthur)插入并通过 SEEK 访问(参见 http://www.nfcworld.com/technology/embedded-secure-element-ese/对于具有此功能的某些设备)。
有一篇关于 SE 选项的有趣文章:http://nelenkov.blogspot.cz/2012/08/accessing-embedded-secure-element-in.html
如果您知道其他供应商提供 microSD Java 卡产品,请在评论中写下来,我会将它们添加到我的 post 中。本回答不应该是上述公司的任何广告。
好吧,实际上我不确定这个解决方案是否有效,正如亲爱的@Vojta 在他的回答下的评论中提到的那样我想阻止人们进行以下尝试。这将是困难的、耗时的并且可能没有有用的结果。 他在这个领域比我知道的多得多。
总之,如你所愿,我发布了我的建议:
SIM/USIM卡的系统文件中的每个文件都链接到一个十六进制数作为其地址(AID)。这些 AID 在 GSM 和 ETSI 标准(例如 GSM 11.11)中定义。你可以写一些Java卡片小程序来模拟那个系统文件。
由于SIM/USIM卡的AID比Java卡的AID短,您可能需要选择支持部分AID选择的Java卡,并使用此功能将传入命令引用到其关联的小程序。
我认为您也可以在单个小程序中模拟所有系统文件,然后使该小程序成为默认选择的小程序。
如果您成功使用此解决方案,请通知我们。 :)
我已经用 SEEK 为 Galaxy S3 修补了 android,经过一番努力后,我现在能够将 APDU 发送到 SIM 卡并获得正确的响应。
我想将我自己的小程序放入 SIM 卡中,但由于我们无法获得这样做的权限,我开始怀疑是否有办法发行一张 java 卡来像SIM 卡。我只需要一张 java 卡,phone 无法将其与 SIM 卡区分开来,不需要网络覆盖,而且我知道几乎不可能创建与运营商正常工作并提供网络的 SIM 卡覆盖率。
所有这一切的原因是我需要发送 APDU 并使用我的小程序,但是如果我在 GS3 中插入 java 卡而不是 SIM 卡,它根本无法访问。
所以我的问题是: 是否可以发行 java 卡,使其看起来像 phone(而不是运营商)的 SIM 卡?
或者是否可以更改 android 以便在其中有 java 卡时提供所需的访问权限,即 RIL 照常工作?
编辑
好的,我想我会尝试发行具有以下属性的 Java 卡片:
首先,它将有一个自动 selected 小程序(默认小程序),从现在开始将称为 fake-UICC。
其次,在 fake-UICC 中,我们将模拟 UICC 的文件系统(根据 http://www.in2eps.com/fo-uicc/tk-fo-uicc-mf.html)。
第三,由于不同的 class 用于 SIM APDU(0xA0
)所以所有从 RIL 发送的 APDU 将被 JCRE 定向到假 UICC,因为 class+ 指令不被正常识别Java卡。例如0xA0A4
对于 SIM 卡是 select 但 0x00A4
对于 Java 卡是 select 命令。
在最后一步中,我们将尝试向每个 APDU 发送与真实 SIM 卡完全相同的响应。
也许行不通,但我认为值得一试。
通过 SEEK 访问的 SIM 卡 (UICC) 不是您可以在手机中使用的唯一安全元素。
市场上还有其他 Java 卡解决方案:主要基于 microSD 插槽(例如由 GoTrust 或 Feitian Technologies 提供),您应该可以通过 SEEK 访问。
一些手机(不幸的是,Galaxy S3 不是这种情况)配备了一个特殊的安全元件插槽,您可以将普通智能卡(主要是 Oberthur)插入并通过 SEEK 访问(参见 http://www.nfcworld.com/technology/embedded-secure-element-ese/对于具有此功能的某些设备)。
有一篇关于 SE 选项的有趣文章:http://nelenkov.blogspot.cz/2012/08/accessing-embedded-secure-element-in.html
如果您知道其他供应商提供 microSD Java 卡产品,请在评论中写下来,我会将它们添加到我的 post 中。本回答不应该是上述公司的任何广告。
好吧,实际上我不确定这个解决方案是否有效,正如亲爱的@Vojta 在他的回答下的评论中提到的那样我想阻止人们进行以下尝试。这将是困难的、耗时的并且可能没有有用的结果。 他在这个领域比我知道的多得多。
总之,如你所愿,我发布了我的建议:
SIM/USIM卡的系统文件中的每个文件都链接到一个十六进制数作为其地址(AID)。这些 AID 在 GSM 和 ETSI 标准(例如 GSM 11.11)中定义。你可以写一些Java卡片小程序来模拟那个系统文件。
由于SIM/USIM卡的AID比Java卡的AID短,您可能需要选择支持部分AID选择的Java卡,并使用此功能将传入命令引用到其关联的小程序。
我认为您也可以在单个小程序中模拟所有系统文件,然后使该小程序成为默认选择的小程序。
如果您成功使用此解决方案,请通知我们。 :)