You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用ACR122U读卡器和PyApdu工具欺骗EMV非接卡完成离线交易?

用ACR122U+PyApdu完成EMV离线非接触交易的后续指南

嘿,你已经在ACR122U模拟POS和Visa借记卡的EMV离线非接触交易上迈出了扎实的三步!我来帮你梳理剩下的关键流程,把这事儿搞定:

你已完成的APDU交互回顾

  • 步骤1:列出可用NFC应用
    C-APDU: 00 A4 04 00 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 0E
    R-APDU: 6F 47 84 0E 32 50 41 59 2E 53 59 53 2E 44 90 00

  • 步骤2:选择Visa应用(AID)
    C-APDU: 00 A4 04 00 07 A0 00 00 00 03 10 10 0E
    R-APDU: 6F 56 84 07 A0 00 00 00 03 10 10 A5 4B 50 90 00

  • 步骤3:获取处理选项(GPO)
    标准C-APDU参考:80 A8 00 00 23 83 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    (注:命令中83标签后的21字节是PDOL处理数据,需要从步骤2的R-APDU解析出PDOL字段后调整)
    收到响应后,重点解析应用交互特征(AIP)和应用文件定位器(AFL),这两个是后续步骤的核心依据。


剩余核心步骤指南

步骤4:基于AFL读取应用数据

根据GPO返回的AFL,构造读取记录的APDU命令,格式为:
00 B2 [记录号] [SFI] 00

  • 记录号:从AFL的每个条目中提取(比如AFL条目01 0C 00 02表示SFI=0C,需读取记录1到2)
  • SFI:要将AFL中的SFI值左移一位(EMV编码规则:实际SFI值<<1,比如0C对应实际SFI为06)

举个实际例子:
如果AFL包含01 0C 00 02,对应的读取命令为:

  • 读取记录1:00 B2 01 0C 00
  • 读取记录2:00 B2 02 0C 00
    需依次读取AFL中所有指定记录,获取持卡人姓名、有效期、PAN等关键应用数据。

步骤5:生成应用密文(核心交易步骤)

构造80 AE命令提交交易数据,格式大致为:
80 AE 00 00 [长度] [交易数据块]
交易数据块需严格按照EMV规范组装,核心字段包括:

  • 授权金额(12位左补零BCD码,比如100美元对应000000010000)
  • 交易日期(MMDDYY格式)
  • 终端国家代码(比如840代表美国)
  • 终端验证结果(TVR,初始设为全0)
  • 交易货币代码(比如840)
  • 其他必填字段(根据卡片AIP或DDOL确定)

发送命令后,卡片会返回应用密文(AC)、应用交易计数器(ATC)等数据,离线场景下只需验证ATC是否递增即可确认有效性。

步骤6:交易收尾

发送终止交易的命令完成流程,比如:
00 00 00 00
收到90 00响应即表示离线交易完成。


关键注意事项

  • TLV解析要准确:PyApdu工具应该自带TLV解析能力,一定要用它正确解析AIP、AFL、PDOL这些字段,差一点都会导致命令失败。
  • 交易数据格式不能错:EMV对数据编码要求极严,金额、日期等字段必须严格遵循BCD或TLV格式。
  • ACR122U固件适配:部分旧版ACR122U固件可能不支持完整EMV命令集,必要时需升级固件。

内容的提问来源于stack exchange,提问作者Osama Lazim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:32:19