根据该文章我读取了招行的IC卡号

0×00 前言

说到闪付卡,首先要从EMV开始,EMV是由Europay,MasterCard和VISA制定的基于IC卡的支付标准规范。目前基于EMV卡的非接触式支付的实现有三个:VISA的payWave,MasterCard的PayPass以及银联的闪付QuickPass。目前从外观来看,银联发行的卡面有芯片的IC卡均支持闪付,部分银行支持VISA的payWave。

0×01 闪付卡隐私泄露风险

想象一下当路人拿着巴掌大的设备靠近你的时候,你身上的银行卡的卡号、发卡行、最近十笔的交易记录等,甚至是姓名、身份证号都泄露出去将会有多恐怖。通过这些信息攻击者就可以大致刻画出卡主人的消费习惯和生活水平等等。当然,这并不是闪付卡或金融IC卡的“漏洞”,这些信息是需要在交易过程中由POS机发送给发卡行进行验证的。

0×02 闪付卡工作流程

本文所指的工作流程只局限在跟信息泄露相关的流程上,不涉及数据认证、支付、联机交易等内容。

应用选择

(2PAY.SYS.DDF01)

应用初始化

读取数据

后续流程等

应用选择

应用选择包括目录选择法 与 AID列表法。读卡器会首先使用目录选择法,如果失败,则会使用AID列表法。简单来说,目录选择法就是读卡器从卡片读取其所支持的所有应用,而AID列表法则是读卡器将其所支持的所有应用一个一个发给卡片,当有响应时则卡片支持该应用,无响应则不存在。而后构造出一个支持的列表,供读卡器或持卡人选择。以目录选择法为例:

1

2

3

SELECT的命令报文格式为为00 A4 04(通过名称选择) 00(仅有一个) + 数据长度 + DATA的ASCII码

如选择qPBOC

00 A4 04 00 0E + 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 (2PAY.SYS.DDF01的ASCII码)

应用初始化

此处与交易有关,与本文隐私泄露关系不大,但因为是中间步骤,所以做简单描述。在上一步应用选择时卡片返回了PDOL(处理选项数据对象列表,可以理解为由卡片提供的组包格式),应用初始化时,按照PDOL组包向卡片发送GPO命令,包括金额、时间、国家代码、货币代码等。进入GPO就代表着交易的开始。

读取数据

此部分是我们主要关注的位置,通过GET DATA或READ RECORD命令来读取,READ RECORD通过SFI读取数据内容,主要关注的是读取个人化数据(DGI),GET DATA读取一些标签里的内容(如货币代码、金额限制、上限、交易日志格式等)。DGI的第一个字节为01-1E,是SFI,第二个字节是记录编号。常用的DGI有0101(2磁道等价数据、持卡人姓名(不建议存储)、1磁道自定义数据) 0102(2 磁道等价数据、1磁道自定义数据),0201(数据认证数据)等,具体的DGI表可参考《中国金融集成电路(IC)卡规范》的第十部分 表1。

GET DATA的命令报文的格式为80CA + 标签 + 00

如读取电子现金余额(9F79)发送 80CA9F7900。

READ RECORD的命令报文的格式为00B2 + 记录号 + 引用控制参数 + 00

其中引用控制参数为 SFI(Bin)左移三位 + 100(Bin)

如读取DGI0101时,第一个01为SFI,第二个01为编号。计算引用控制参数如下,0000 0001左移三位得到00001 + 100 得到 0000 1100转换为Hex为 0C,得到的APDU为 00 B2 01 0C 00。

0×03 测试过程

需要准备的工具如下:

ACR122u或同类支持APDU的读卡器

读卡器驱动及应用

支持闪付的银行卡

本文使用的测试卡如下图所示:

下面操作均会以ACR122U为读卡器操作,在安装好驱动及ACR122U Tool后,插入读卡器并启动ACR122U Tool。首先连接读卡器设备,点击菜单中的Reader Commands -> New connection

连接成功后,可以使用该工具直接发送APDU,点击 Send Commands -> APDU Command

按照闪付卡的工作流程构造APDU发包,第一步是应用选择,选择qPBOC(2PAY.SYS.DDF01)

1

2

3

4

5

6

7

8

9

10

11

12

APDU:00 A4 04 00 + 0E + 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 (2PAY.SYS.DDF01的ASCII)

响应包如下

6F 30 (FCI文件控制信息)

84 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 (DF专用文件,2PAY.SYS.DDF01的ASCII)

A5 1E (FCI专用模板)

BF 0C 1B (FCI自定义数据)

61 19 (目录入口)

4F 08 A0 00 00 03 33 01 01 01 (返回的AID,下一步选择的AID)

50 0A 50 42 4F 43 20 44 45 42 49 54 (应用标签,此处为PBOC DEBIT)

87 01 01(应用优先指示器)

90 00 (状态字:正常)

得到下一步的AID:A0 00 00 03 33 01 01 01,选择该AID

1

2

3

4

5

6

7

8

9

10

11

12

13

14

APDU:00 A4 04 00 + 08 + A0 00 00 03 33 01 01 01

响应包如下

6F 54 (FCI文件控制信息)

84 08 A0 00 00 03 33 01 01 01 (DF名称)

A5 48 (FCI专用模板)

50 0A 50 42 4F 43 20 44 45 42 49 54 (应用标签,此处为PBOC DEBIT)

87 01 01 (应用优先指示器)

9F 38 18 9F 66 04 9F 02 06 9F 03 06 9F 1A 02 95 05 5F 2A 02 9A 03 9C 01 9F 37 04 (PDOL)

5F 2D 02 7A 68 (首选语言,zh)

9F 11 01 01 (发卡行代码索引)

9F 12 0A 50 42 4F 43 20 44 45 42 49 54 (应用首选名称,PBOC DEBIT)

BF 0C 05 9F 4D 02 0B 0A (发卡行自定义数据,9F4D为交易日志入口标签)

90 00 (状态字)

接下来可以进行读取数据的部分了,首先读取DGI0201里存储的数据。其数据定义如下表:

要读取DGI0201,计算APDU如下,0000 0010 左移三位 得到 00010 加 100 得到 0001 0100 即 14(Hex)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

APDU:00 B2 01 14 00

响应包如下

70 46 (模板)

5F 24 03 25 12 31 (25年12月31日失效日期)

5F 25 03 15 05 14 (15年05月14日生效日期)

5A 08 62 26 xx xx xx xx 45 00 (卡号)

9F 07 02 FF 00 (应用使用控制)

8E 0C 00 00 00 00 00 00 00 00 02 03 1F 00

9F 0D 05 D8 60 04 A8 00

9F 0E 05 00 10 98 00 00

9F 0F 05 D8 68 04 F8 00

5F 28 02 01 56 (0156中国)

90 00 (状态字:成功)

此处可以获取卡的生效日期、失效日期、卡号等内容,接下来尝试读取磁条2和持卡人信息的数据,需要读取DGI0101和DGI0102,,经过上述方法计算需要发送的APDU为:

1

2

3

4

5

6

7

8

APDU:00 B2 01 0C 00

响应包如下

70 15 (模板)

57 13 62 26 22 10 06 40 45 00 (2磁道卡号)

D2 51 2 (有效期 25/12)

2 20 00 98 78 32 00 00 0F (补足)

90 00 (状态字:成功)

1

2

3

4

5

6

7

8

APDU:00 B2 02 0C 00

响应包如下

70 36 (模板)

9F 61 12 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 (证件号,此处为空)

9F 62 01 05 (证件类型)

5F 20 1A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 (姓名ASCII,此处为空)

90 00 (状态字:成功)

接下来尝试读取一下交易记录,这里要注意首先要获取交易记录的格式,银联给出了推荐格式:

但是注意这里只是推荐格式,每个银行的卡片实现不一定相同,所以读取交易记录时应先获取交易记录的格式,使用GET DATA命令读取9F4F标签(交易日志格式),根据该格式结合READ RECORD读取出的交易日志解析。首先读取交易日志格式:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

APDU:80 CA  9F4F  00

响应包如下

9F 4F 19

9A 03

9F 21 03

9F 02 06

9F 03 06

9F 1A 02

5F 2A 02

9F 4E 14

9C 01

9F 36 02

90 00

经过比对发现与推荐格式相同,之后可以通过READ RECORD命令读取从1-10读取交易日志。首先要找到在选择AID的时候的回包,9F4D指出了交易日志入口,通常为0B,根据上文计算其SFI为 0101 1100即5C。之后再构造APDU循环读取其十条交易记录

1

2

3

4

5

6

7

8

9

10

11

12

13

APDU:00 B2 01 5C 00:

响应包如下

17 09 13 (17年9月13号)

16 45 38 (16:45:38)

00 00 00 35 00 00 (3500.00元)

00 00 00 00 00 00 (其他金额)

01 56 (中国)

01 56 (人民币)

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0A (空)

21 (交易类型)

00 31 (应用交易计数器)

90 00 (状态字:成功)

下表为使用手里现有的银行卡的测试情况。

0×04 脚本

我们已经可以使用APDU发送的工具,获取想要获得的信息,剩下的工作就是脚本化。可以使用ACR122U的SDK,其提供了Delphi,Java,VB,C#,C++等语言,但个人更愿意通过Python来实现,通过使用Python的pyscard库,可以实现该功能。

0×05 防护方式

防护的措施可以考虑与读卡器保持足够的距离、使用铝箔包裹卡片、专业的Pacsafe下属的RFIDSafe系列或简单便捷的屏蔽卡套等措施。原理都是通过金属或液体屏蔽来屏蔽高频信号。

原文地址:

https://www.cnblogs.com/k1two2/p/8133932.html

闪付卡(QuickPass)隐私泄露原理(重要文章)相关推荐

  1. 云闪付怎么设置不跳华为支付_【教程】华为Pay用闪付券撸京东E卡!

    所有支持闪付使用的白条券都可以撸E卡,比如下面这张,以下教程以这张券为例进行说明. 先到京东有礼小程序内任意选一个卡面点进去,自定义面额买1元,点"送给朋友"就会调起微信支付,不要 ...

  2. android版本60支持云闪付,云闪付app下载-云闪付 安卓版v8.0.5-PC6安卓网

    云闪付app是一款以非接触支付技术为核心的银联移动支付新标志,涵盖NFC.HCE.TSM和Token等各类支付创新技术应用,只需一部具备NFC功能的手机,持卡人可直接在手机银行APP中生成一张即云闪付 ...

  3. 移动支付战火连绵,支付宝、微信支付、云闪付APP或将三足鼎立?

    近日,移动支付领域中的"国家队"云闪付APP迎来了自己的一岁生日,身为中国银联的掌声明珠,云闪付在这一年的发展中出尽了风头.在移动支付市场环境逐渐成熟.寡头局面日益形成的格局之下, ...

  4. 银联“闪付”和“电子现金”介绍(QuickPass UPCash)

    关于"闪付"."电子现金".UPcash和QuickPass标记的用途和区别,相信普通用户并不容易分清.本文由博主对相关概念略做整理,并根据用卡经验综合而成,相 ...

  5. 2 华为云闪付_教你区分信用卡刷卡、挥卡、插卡、云闪付等支付方式!

    信用卡交易的N种方式总有很多小伙伴分不清 刷卡?挥卡?插卡?闪付?云闪付等等......啥啥啥?这都是啥?? 在区别这几种刷卡方式之前,首先我们区分"持卡"交易和"无卡& ...

  6. 陕西高速多措并举落实ETC卡安全使用问题 工行建行带闪付

    侯维科技针对近期媒体报道ETC用户被POS机盗刷事件,陕西高速公路电子收费有限公司迅速成立安全隐患排查小组,紧急联系10家合作银行有关责任人,安排相关部门对10家银行发行三秦通业务卡片进行隐患排查,了 ...

  7. 一指闪付,Huawei Pay让钱包、银行卡和公交卡统统下岗

    人们的出行将越来越便捷,带一部手机就能乘坐交通工具.只要你拥有一部华为Mate 9手机,搭配Huawei Pay使用,就能甩掉经常被忘带的钱包,让现金.银行卡和公交卡统统"下岗". ...

  8. 第三方移动支付类产品竞品分析:支付宝VS微信支付VS云闪付

    第三方移动支付类产品竞品分析:支付宝VS微信支付VS云闪付 文章目录 第三方移动支付类产品竞品分析:支付宝VS微信支付VS云闪付 一.分析背景与竞品选择 1.竞品分析目的 2.行业研究与市场趋势分析 ...

  9. 全面认识电子现金、电子钱包、qPBOC、闪付、UPCash

    最近,小编所在的一个金融大咖群里出现了一场关于电子钱包.电子现金.非接小额.脱机交易等等方面的讨论,小编入行不久关于技术知识了解甚微,看着这些专业名词.英文缩写有点像丈二的和尚.为了能大致弄懂这些大咖 ...

  10. 银联:闪付小额免密免签将可一键关闭 设置盗刷补偿金

    作者:吴秋余 人民日报客户端4月3日消息,为充分保障持卡人权益,进一步优化持卡人服务,提升持卡人用卡体验,近日,中国银联联合商业银行共同开展新一轮告知服务,提供小额双免一键开关功能,并从硬件支持保障. ...

最新文章

  1. libtool: link: `dftables.lo' is not a valid libtool object
  2. 浅说《测试用例》----给测试新手的
  3. 史上最烧脑的学习方法,看完瞬间涨姿势!
  4. jvm 性能_JVM性能魔术
  5. 枚举求解单词方阵(洛谷P1101题题解,Java语言描述)
  6. java.util.concurrent.RejectedExecutionException: event executor terminated 错误分析
  7. ant vue 树形菜单横向显示_快速实现一个简单可复用可扩展的Vue树组件
  8. scrapy FormRequest
  9. VM安装windows server 2008
  10. JavaScript 案例综合提升
  11. 高级气泡图——R语言简单实现
  12. 华为发布折叠屏官方适配方案
  13. 计算机网络实验1·**路由器基本配置**
  14. win10下禁用全角半角Kill-Shift-Space
  15. 模块“XXX.dll”加载失败
  16. 管桩的弹性模量计算公式_弹性模量法测定桩身应力分析
  17. K210学习笔记(五)——MAIX BIT(K210)与STM32串口通讯
  18. Shogun网站上的关于主流机器学习工具包的比较
  19. android4.3 打包成image,DCloud 离线打包之Android Studio
  20. JS 异步编程六种方案

热门文章

  1. asp.net中调用javascript函数实现多功能日期控件示例
  2. 双非本科的大厂暑假实习之旅
  3. ranhcer添加Longhorn存储
  4. 在哪里写博客比较好?不同写作平台的横向对比
  5. 三菱Q系列PLC数据采集随笔
  6. 如何连接不在同一个网段中的Linux服务器
  7. php gtk不更新了,[新人求助] gtk控件动态更新
  8. SwiftUI Swift 内功之如何在 Swift 中进行自动三角函数计算
  9. Android jetpack Room数据库(一)基本使用
  10. [渝粤教育] 西南科技大学 计算机网络应用基础 在线考试复习资料2021版