无法识别智能卡上的 AFL

Err*_*ena 0 payment apdu smartcard emv

我正在努力使用我陷入困境的 AID 列表从 VISA(例如 PAN、到期日...)信用卡获取有用数据。

\n\n

我已经能够手动访问所有数据。使用下一个教程:http://www.openscdp.org/scripts/tutorial/emv/reademv.html

\n\n
>>00 A4 04 00 07 A0 00 00 00 03 10 10 00\n
Run Code Online (Sandbox Code Playgroud)\n\n

在 ASCII 中:

\n\n
<<o<EM>\xe2\x80\x9e<BEL>\xc2\xa0<0><0><0><ETX><DLE><DLE>\xc2\xa5<SO>P<EOT>VISA\xc2\xbf<FF><ENQ>\xc5\xb8M<STX><VT><LF><0>\n
Run Code Online (Sandbox Code Playgroud)\n\n

十六进制:

\n\n
<<6F 19 84 07 A0 00 00 00 03 10 10 A5 0E 50 04 56 49 53 41 BF 0C 05 9F 4D 02 0B 0A 90 00\n
Run Code Online (Sandbox Code Playgroud)\n\n

之后我用了:

\n\n
>>33 00 B2 01 0C 00 //sfi1, rec1\n...\n...\n>>33 00 B2 10 FC 00 //sfi31, rec16\n
Run Code Online (Sandbox Code Playgroud)\n\n

我继续学习教程并了解到获取数据的正确方法是使用 GPO(获取处理选项)命令。接下来尝试了:

\n\n
>>80 A8 00 00 0D 83 0B 00 00 00 00 00 00 00 00 00 00 00 00 // pdo = 83 0B 00 00 00 00 00 00 00 00 00 00 00 which suposse to be the correct one for VISA.\n<< 69 85\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以不满足使用条件。

\n\n
>> 80 A8 00 00 02 83 00 00 //pdo= 83 00 that should work with every non visa card\n<< 80 0E 3C 00 08 01 01 00 10 01 04 00 18 01 03 01 90 00\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果这个响应是正确的,并且对我来说看起来很好,因为它以 80 开始,以 90 00 结束,我无法识别 AFL,我认为这将使我能够确定 PAN、到期日期...有人可以吗帮我?

\n

Mic*_*and 5

您收到的响应选择命令 ( 00 A4 0400 07 A0000000031010 00) 的 FCI 解码为

6F 19(文件控制信息 (FCI) 模板)
    84 07(专用文件(DF)名称)
        A0000000031010
    A5 0E(文件控制信息 (FCI) 专有模板)
        50 04(应用标签)
            56495341(“签证”)
        BF0C 05(文件控制信息 (FCI) 发行人任意数据)
            9F4D 02(日志条目)
                0B0A(SFI = 11;记录数 = 10)

该FCI不包括任何PDOL(处理选项数据列表)。因此,您需要假设 PDOL 的默认值(对于您的卡类型来说这是一个空列表)。因此,GET PROCESSING OPTIONS 命令中与 PDOL 相关的数据字段必须为空:

83 00

其中0x83是PDOL相关数据的标签,0x00是零字节的长度。

因此,正确的 GPO 命令是(正如您已经发现的):

80 A8 0000 02 8300 00

你得到了回应

800E3C00080101001001040018010301 9000

这解码为

80 0E(响应消息模板格式1)
    3C00(应用交换配置文件)
    08010100 10010400 18010301(应用程序文件定位器)

因此,应用程序文件定位器包含以下三个条目:

  • 08010100:SFI=1,第一条记录=1,最后一条记录=1,离线数据认证涉及的记录=0
  • 10010400:SFI=2,第一条记录=1,最后一条记录=4,离线数据认证涉及的记录=0
  • 18010301:SFI=3,第一条记录=1,最后一条记录=3,离线数据认证涉及的记录=1

因此,您可以使用 READ RECORD 命令读取这些记录:

00 B2 010C 00
00 B2 0114 00
00 B2 0214 00
00 B2 0314 00
00 B2 0414 00
00 B2 011C 00
00 B2 021C 00
00 B2 031C 00