我有一张智能卡(在法国使用的 Carte Vitale),我需要知道出生日期的存储位置。但我似乎没有找到有关文件结构的任何信息。
对于比利时的 eID 卡,我也这样做了,我可以使用 APDU 命令轻松读取出生日期。但是比利时政府提供了有关卡上文件结构的不错信息。
有没有一种方法可以“浏览”带有 APDU 的智能卡的文件结构,以查看它在什么地址上的内容,而不知道它的任何内容?
编辑: 我发现了更多关于从 Carte Vitale 阅读信息的信息:这里和这里。
第一个链接的一部分,“API 还是不是 API?这就是问题......”。由 Google 翻译...并不完美,但您明白了:
*众所周知,BC C0 00 00 08 确定存储卡的最后一个地址,第一个总是0200h命令。通常(ADMAX = 2188h),我们发现,从 2128h 到 2180h,一个“生产区域”包含指向所有感兴趣区域的指针(在我们的例子中,空闲空间读数将从 0288h 扩展到 2180h)。话虽如此,BC 02 88 04 B0 命令将返回第一个 32 位字的内容,而 BC B0 21 80 04 将返回最后一个字的内容。两者之间,有很多东西要发现!就在制造区之前,有几句话让人想起规范 V1.40 负载第 20 页中提到的“组件映射”。想象一下,BC B0 20 18 F8 命令返回以下数据:
3F FF 88 C3
3F 20 C3 50
20 80 02 F0
00 3F C2 B8
2D 3F C2 A0
2C FF 98 C2
在“指针”(?)中,在 C388h C298h 中,02F0h 引起了人们的注意。因此,让我们 BC B0 02 14 F0,并将我们交付给前两个单词的简单解码:
3F FF F5 40 0011 1111 1111 1111 1111 0101 0100 0000
24 08 43 FF 0010 0100 0000 1000 0100 0011 1111 1111
3F FF FF FF
3F FF FF FF
3F FF FF F8
忽略每个字的前两位,然后形成四位一组,可以很容易地提取 BCD 数字 54 09 02,具体而言,唯一受益人的出生日期是 09.02.1954!*
我的 ADMAX 不同:它是 21 20。这是否意味着我可以编写一个执行 BC B0 02 00 08 的程序来读取前 8 个字节,然后将 8 个字节添加到地址 02 00,然后再次读取,等等,一直到 ADMAX 21 20?然后我会阅读卡上所有可读的日期吗?还是我看得太简单了?
再次感谢!