mitm.py: using new ccid_raw.py functions

This commit is contained in:
Christina Quast 2015-04-06 00:35:03 +02:00
parent 5149cd6e78
commit 88c7fa1bad
1 changed files with 40 additions and 30 deletions

View File

@ -1,9 +1,12 @@
import usb.core
import usb.util
import ccid_raw
from ccid_raw import SmartcardConnection
import phone
from contextlib import closing
def find_dev():
dev = usb.core.find(idVendor=0x03eb, idProduct=0x6004)
if dev is None:
@ -12,6 +15,14 @@ def find_dev():
print("Found device")
return dev
def pattern_match(inpt):
print("Matching inpt", inpt)
if (inpt == ATR_SYSMOCOM1):
return NEW_ATR
elif (inpt == CMD_SEL_FILE):
return CMD_SEL_ROOT
else:
return inpt
SIM_WR = 0x1
SIM_RD = 0x82
@ -21,39 +32,38 @@ PHONE_WR = 0x4
PHONE_RD = 0x85
PHONE_INT = 0x86
def check_msg_phone():
cmd = dev.read(PHONE_RD, 64, 100)
if cmd is not None:
print("Phone sent: " + cmd)
return cmd
cmd = dev.read(PHONE_INT, 64, 100)
if cmd is not None:
print("Phone sent int")
return cmd
ERR_TIMEOUT = 110
def write_phone(resp):
dev.write(PHONE_WR, resp, 100)
def poll_ep(dev, ep):
try:
return dev.read(ep, 64, 1000)
except usb.core.USBError as e:
if e.errno != ERR_TIMEOUT:
raise
return None
def write_sim(data):
return do_intercept(data, dwActiveProtocol)
def write_phone(dev, resp):
dev.write(PHONE_WR, resp, 1000)
def reset_sim(sm_con):
sm_con.disconnect_card()
sm_con.connect_card()
def do_mitm():
dev = find_dev()
hcard, hcontext, dwActiveProtocol = ccid_raw.ccid_raw_init()
with closing(SmartcardConnection()) as sm_con:
try:
try:
while True:
cmd = check_msg_phone()
if (cmd is not None):
resp = write_sim(cmd, dwActiveProtocol)
if (resp is not None):
write_phone(resp)
else:
print("No responses.")
finally:
ccid_raw.ccid_raw_exit(hcard, hcontext)
while True:
cmd = poll_ep(dev, PHONE_INT)
if cmd is not None:
print(cmd)
assert cmd[0] == ord('R')
reset_sim(sm_con)
except usb.USBError as e:
print(e)
pass
cmd = poll_ep(dev, PHONE_RD)
if cmd is not None:
print(cmd)
sim_data = sm_con.send_receive_cmd(cmd)
if sim_data is None:
continue
write_phone(dev, sim_data)