使用python读取银行卡信息

2019/7/12 posted in  杂记

之前网上有所谓专家认为,NFC手机有可能成为黑客的“提款机”;也有分析认为,手机只有紧贴着银行卡才能读出有限的卡内信息,也并不能进行转账操作,因此风险并不大。看了这么多,不如自己用python读取一下,看看到底能读取到什么信息呢?

前置准备

  1. ACR122U
  2. 银行卡数张
  3. ACR122UTools
  4. EMV TLV查询分析器

银行卡能读取出什么信息?

  1. 姓名
  2. 身份证
  3. 银行卡号
  4. 银行卡有效期限
  5. 近十条消费记录
  6. 电子现金余额(不是银行卡余额)

但并不是所有的银行卡都能读出这些信息,经网友测试:

银行卡 卡号显示 卡内剩余金额 电子钱包余额 近10笔交易 身份证号
广州银行 后4位 不可读 可读 可读 不可读
建设银行 全卡号 不可读 可读 可读 开头末尾2位
交通银行 后4位 不可读 可读 可读 不可读
招商银行 全卡号 不可读 可读 可读 开头末尾2位
中国银行 全卡号 不可读 可读 可读 不可读
工商银行 全卡号 不可读 可读 可读 不可读
农业银行 全卡号 不可读 可读 可读 不可读

银行卡最多可以记录10条交易日志,这10条是循环日志,可直接读取,但网银或者网上交易NFC读不出,因为交易时芯片没有上电不会记日志。持卡人姓名卡号等如果是明文则必然可以读出,姓名卡号能否读出取决于银行的数据(姓名可以不写到卡里,卡号可以密文)。

证件号则是PBOC3.0规范新增的,读不出证件号的银行可可能是PBOC2.0。另外,电子现金余额可以100%读,卡内余额(主账户)是读不出的,电子现金账户的钱(余额上限一般为1000)是可以随便刷的,不需要密码。

怎么读取?

首先将ACR122U和电脑连接起来,Win10不需要安装驱动的。
接下来我们使用ACR122UTools使用指令去读取一下银行卡信息:
123
创建一个新的连接。
234
发送指令选择卡片,命令:

00A4040007A0000003330101


接下来获取银行卡卡号、有效期等信息,指令:

00B2011400


因为这张图里有自己的信息,所有我从网上找了张图片解析出卡号和有效期等信息:

其他的我都不截图了,这里给出指令大家尝试一下:

00B2010C00

获取最近十条交易记录:

00B2015C00
00B2025C00
00B2035C00
00B2045C00
...
00B2095C00

emmm,知道如何去获取数据之后,接下来就需要使用python脚本编写程序获取银行卡数据

python 读取

我们需要使用到pyscard这个库,安装也很简单:

pip install pyscard

接下来我们尝试一下和银行卡交互数据

>>> from smartcard.System import readers
>>> from smartcard.util import toHexString
>>>
>>> r=readers()
>>> connection = r[0].createConnection()
>>> connection.connect()
>>> SELECT = [0x00,0xA4,0x04,0x00,0x07,0xA0,0x00,0x00,0x03,0x33,0x01,0x01]
>>> data, sw1, sw2 = connection.transmit( SELECT)
>>> print data
.......data.......

我们选择卡片之后就需要发送读取信息的指令

>>> SELECT = [0x00,0xB2,0x01,0x14,0x00]
>>> data, sw1, sw2 = connection.transmit(SELECT)
>>> print data
.......data.......

通过处理ASC122U返回的数据,我们可以编写如下脚本:

工具地址:

小工具

敬请指正

本文引用了以下文章,感谢:
https://www.zhihu.com/question/24106690
https://www.cnblogs.com/zfyouxi/p/4078418.html
https://www.cnblogs.com/nightnine/p/5502753.html
http://blog.sina.com.cn/s/blog_625033800102uxwt.html