我正在研究 Javacard 和智能卡的用途 不同的 ATR。我想通过 python 将这些卡的 ATR 更改为 与这些卡上默认的 OEM ATR 不同。我 找到了一种改变卡的 ATR 的方法,但是,它正在利用 在线脚本 - 这真的没有帮助。
下面是我发现使用 PyResMan 更改 ATR 的脚本 脚本模式,但是,它只设置为一个atr,这是一个银行,我 没有用处。
我在网上找到的脚本:{ (开头数字显示行号)
00A4040010************************************
00F00000
C0D6029A02F807
C0D601240108
C0D601470108
C0D601260403600000
C0D601490403600000
C0D6012201FE
C0D601360E0D80318065B0893501F183009000
C0D601590E0D80318065B0893501F183009000
C0D603010101
C0D6030510404142434445464748494A4B4C4D4E4F
C0D6031d0101
C0D6032110404142434445464748494A4B4C4D4E4F
C0D603390101
C0D6033D10404142434445464748494A4B4C4D4E4F
}
这个脚本的问题是我只知道前 2 个是什么 行确实如此,并且第 9 行和第 10 行是实际包含 ATR 变化过程的数据。我需要知道如何改变 ATR 使用正则表达式形式的 ATR。
如果有人知道解码此脚本并能够编辑它的方法, 或者知道更简单的方法来更改未融合或非融合的 ATR 预预定制的 javacard,请告诉我!我一直在研究 这些已经一个多月了,但找不到实际的答案 有效。
为智能卡设置 ATR 主要不是 Javacard 规范的领域。目前,没有通用规范或方法来为所有智能卡设置 ATR,因为没有通用方法来初始化或个性化智能卡本身,而这主要是特定于供应商的。
您在网上找到的脚本属于NXP Javacard,该信息不是标准化的,据我所知也不适合公众使用,因此删除了一些合理的信息。请联系您的卡供应商以获取有关如何更改 ATR 的信息(这可能不可能或不容易)。
我刚刚发现这篇文章,因为不久前我遇到了同样的问题,我设法理解了脚本的作用。
更改卡的 ATR 可能会使其无法被读卡器识别,从而有效地使其变砖。更改 ATR 的历史字节应该是安全的,但在尝试更改其任何其他部分时要小心。
正如 Paul Bastian 指出的那样,这不是标准程序,并且仅适用于特定的 NXP Javacard。我为我的 NXP J2A040 Javacard 使用了类似的脚本。
您的示例中卡的 ATR 为:
3B 6D 00 00 80 31 80 65 B0 89 35 01 F1 83 00 90 00
我不确定 12 14 16 的顺序。
示例中:
C0D601260403600000
04 是提供的数据的长度,而 03 是 ATR 的十六进制字节长度。 60 是 T0 字节。具体来说,6(二进制为 0110)表示存在 T0 之后的四个字节中的哪一个。在这种情况下,TA1和TD1不存在(0),而TB1和TC1为(1)。 你应该像这样构建你的命令。
C0D60126{ATRLength+1}{ATRLength}{T0}{Rest of the ATR}
历史字节也类似:
C0D60136{ATRLength+1}{ATRLength}{ATR}