2021-10-07 02:27:55 +08:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
2021-07-07 19:39:52 +08:00
|
|
|
"""
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Salvador Mendoza (salmg.net), 2021
|
|
|
|
//
|
|
|
|
// This code is licensed to you under the terms of the GNU GPL, version 2 or,
|
|
|
|
// at your option, any later version. See the LICENSE.txt file for the text of
|
|
|
|
// the license.
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Code to test Proxmark3 Standalone mode aka reblay by Salvador Mendoza
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
"""
|
|
|
|
|
|
|
|
import serial
|
|
|
|
from smartcard.util import toHexString
|
|
|
|
|
|
|
|
ser = serial.Serial('/dev/rfcomm0') # open Proxmark3 Bluetooth port
|
|
|
|
|
|
|
|
def pd(data):
|
|
|
|
rapdu = map(ord, data)
|
|
|
|
return rapdu
|
|
|
|
|
|
|
|
apdu = [
|
|
|
|
[0x00, 0xA4, 0x04, 0x00, 0x0e, 0x32, 0x50, 0x41, 0x59, 0x2e, 0x53, 0x59, 0x53, 0x2e, 0x44, 0x44, 0x46, 0x30, 0x31, 0x00], # PPSE
|
|
|
|
[0x00, 0xA4, 0x04, 0x00, 0x07, 0xa0, 0x00, 0x00, 0x00, 0x03, 0x10, 0x10, 0x00], # Visa card
|
|
|
|
[0x80, 0xA8, 0x00, 0x00, 0x02, 0x83, 0x00, 0x00], # GET PROCESSING
|
|
|
|
[0x00, 0xb2, 0x01, 0x0c, 0x00] # SFI
|
|
|
|
]
|
|
|
|
|
|
|
|
print('Testing code: bluetooth has to be connected with the right rfcomm port!')
|
|
|
|
print('Waiting for data...')
|
|
|
|
initd = ser.read(1)
|
|
|
|
|
|
|
|
bufferlen = pd(initd)[0]
|
|
|
|
rping = ser.read(bufferlen)
|
|
|
|
|
|
|
|
ping = pd(rping)
|
|
|
|
if (len(ping) == 7):
|
|
|
|
print('UID:'),
|
|
|
|
print(toHexString(ping[:4]))
|
|
|
|
print('ATQA:'),
|
|
|
|
print(toHexString(ping[4:-1]))
|
|
|
|
print('SAK:'),
|
|
|
|
print(toHexString(ping[-1:]))
|
|
|
|
elif (len(ping) == 10):
|
|
|
|
print('UID:'),
|
|
|
|
print(toHexString(ping[:7]))
|
|
|
|
print('ATQA:'),
|
|
|
|
print(toHexString(ping[7:-1]))
|
|
|
|
print('SAK:'),
|
|
|
|
print(toHexString(ping[-1:]))
|
|
|
|
else:
|
|
|
|
print('got ping, no sure what it means: '),
|
|
|
|
print(ping)
|
|
|
|
|
|
|
|
for x in apdu:
|
|
|
|
print('Sending cmd: '),
|
|
|
|
ser.write(x)
|
|
|
|
print(toHexString(x))
|
|
|
|
|
2021-07-08 15:53:50 +08:00
|
|
|
lenpk = ser.read(1) #first byte is the buffer length
|
|
|
|
bufferlen = pd(lenpk)[0]
|
2021-07-07 19:39:52 +08:00
|
|
|
|
2021-07-08 15:53:50 +08:00
|
|
|
buffer = pd(ser.read(bufferlen))
|
2021-07-07 19:39:52 +08:00
|
|
|
print('Card Response:'),
|
|
|
|
print(toHexString(buffer))
|
|
|
|
print('--')
|
|
|
|
|
|
|
|
ser.write(b'1') #tell Proxmark3 that we finish the communication
|
|
|
|
ser.close()
|