blob: 48fd73a40bdae1324e0f9b5c2dbd0d9ef9865471 [file] [log] [blame]
Christina Quastf2582fc2015-03-06 19:09:35 +01001#!/usr/bin/env python
2
3import argparse
4import sniffer
5import ccid
Christina Quast31b5b4e2015-03-09 17:15:13 +01006import ccid_select
Christina Quast80050a52015-04-04 20:00:15 +02007import mitm
Christina Quastf2582fc2015-03-06 19:09:35 +01008
9import usb.core
10import usb.util
Christina Quast158c1dd2015-04-17 20:19:29 +020011import sys
Christina Quast362a4da2015-04-09 13:39:38 +020012import time
Christina Quastf2582fc2015-03-06 19:09:35 +010013
Christina Quast4bcc0232015-03-24 21:59:32 +010014def find_dev():
Harald Welte844db572015-11-07 18:37:24 +010015 dev = usb.core.find(idVendor=0x1d50, idProduct=0x60e3)
Christina Quast4bcc0232015-03-24 21:59:32 +010016 if dev is None:
17 raise ValueError("Device not found")
18 else:
19 print("Found device")
20 return dev
Christina Quastf2582fc2015-03-06 19:09:35 +010021
22# main code
23def main():
24 parser = argparse.ArgumentParser()
Christina Quastba486b62015-05-18 17:16:26 +020025# FIXME: config names instead of numbers
Christina Quast452aee32015-04-03 13:22:18 +020026 parser.add_argument("-C", "--conf", type=int, choices=[1, 2, 3, 4], help="Set USB config")
Christina Quastf2582fc2015-03-06 19:09:35 +010027 parser.add_argument("-s", "--sniff", help="Sniff communication!", action='store_true')
Christina Quast31b5b4e2015-03-09 17:15:13 +010028 parser.add_argument("-S", "--select_file", help="Transmit SELECT cmd!", action='store_true')
Christina Quast381d0fc2015-03-15 15:13:38 +010029 parser.add_argument("-p", "--phone", help="Emulates simcard", action='store_true')
Christina Quast80050a52015-04-04 20:00:15 +020030 parser.add_argument("-m", "--mitm", help="Intercept communication (MITM)", action='store_true')
Christina Quastba486b62015-05-18 17:16:26 +020031
Christina Quastf2582fc2015-03-06 19:09:35 +010032 args = parser.parse_args()
33 print("args: ", args)
Christina Quast8271bd02015-06-19 13:49:45 +020034 dev = find_dev()
Christina Quastf2582fc2015-03-06 19:09:35 +010035
Christina Quastf2582fc2015-03-06 19:09:35 +010036 if args.conf is not None:
Christina Quast4bcc0232015-03-24 21:59:32 +010037 dev.set_configuration(args.conf)
Christina Quast362a4da2015-04-09 13:39:38 +020038 # Give pcsclite time to find the device
39 time.sleep(1)
Christina Quastf2582fc2015-03-06 19:09:35 +010040 if args.sniff is True:
Christina Quast5cf676d2015-05-14 17:21:34 +020041 sniffer.sniff(dev)
Christina Quast3742ef12015-05-18 17:31:51 +020042# FIXME: This command is test code and should be removed in near future:
Christina Quast31b5b4e2015-03-09 17:15:13 +010043 if args.select_file is True:
44 ccid_select.select()
Christina Quast381d0fc2015-03-15 15:13:38 +010045 if args.phone is True:
Christina Quastf25a7602015-05-14 18:09:47 +020046 mitm.do_mitm(dev, sim_emul=True)
Christina Quast80050a52015-04-04 20:00:15 +020047 if args.mitm is True:
Christina Quastf25a7602015-05-14 18:09:47 +020048 mitm.do_mitm(dev, sim_emul=False)
Christina Quastf2582fc2015-03-06 19:09:35 +010049 return
50
Christina Quastf2582fc2015-03-06 19:09:35 +010051main()