银行卡虽是CPU卡 但是我们可以通过原始指令的方式与卡片交互
这里使用python对银行闪付卡进行了读取。
以下为程序流程介绍
启动Proxmark3,此处自行设置proxmark3客户端所在的路径以及设备名
pm3 = subprocess.Popen("/home/satan/Program/proxmark3-iceman/client/proxmark3 /dev/ttyACM0", shell=True, stdout=subprocess.PIPE,stdin=subprocess.PIPE,stderr=subprocess.PIPE)
选择支付系统PSE-1PAY.SYS.DDF01,并建立连接
pm3.stdin.write('hf 14a raw -c -s -p 0200A404000E315041592E5359532E4444463031\n')
借记卡最后一位为1贷记卡为2
pm3.stdin.write('hf 14a raw -c 0300A4040008A000000333010101 -p\n')
发送银行卡信息查询命令
pm3.stdin.write('hf 14a raw -c 0200B2010C -p\n')
发送卡主信息查询指令
pm3.stdin.write(‘hf 14a raw -c 0300B2020C -p\n’)
循环发送消费记录查询命令
for i in range(1, 11):
head = '02'
if i % 2 == 0: head = '03'
if i != 10: i = "0" + str(i)
pm3.stdin.write('hf 14a raw -c ' + head + '00B2'+ str(i) +'5C00 -p\n')
断开银行卡连接
pm3.stdin.write('hf 14a raw -a\n')
out = pm3.communicate()[0]
最后我们将其显示出来
for i in range(5,15):
history.append(outarray[i].split('\n')[2].replace(' ','')[2:100])
print '----------------------------------------------------------------------------------------'
print ' 银行闪付卡信息显示 '
print '----------------------------------------------------------------------------------------'
if len(idnumber) >= 90:
print u'姓 名:' + binascii.a2b_hex(idnumber[60:-8]).decode('gbk')
print u'卡主身份证:' + binascii.a2b_hex(idnumber[12:48]).decode('gbk')
print u'银行卡卡号:' + cardnumber
print u'银行卡类型:' + getCardType(cardnumber)
print '----------------------------------------------------------------------------------------'
print u'编号 交易时间 交易金额 交易地点'
for i in range(len(history)):
print '----------------------------------------------------------------------------------------'
print getHistory(history[i],i+1)
这样我们就完成了银行卡的读取。
此脚本需要再linux下执行
完整程序见附件。
PBOC
PBOC目录下的主程序为PBOC_Reader.py,该程序可以读取带有银联标志的所有闪付卡的信息和交易记录,目前可读取借记卡。
TravelCard
TravelCard目录下的主程序为TravelCard_Reader.py,该程序用于读取交通卡的余额以及交易记录,目前只测试了上海的卡,其他城市如有需要可issue提交。
源网站:
转载请注明:Proxmark 实验室 » 使用PM3读取银行闪付卡