blob: 7c44f3584a8c776f6008a705165b02f08bf5c3f5 [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():
Christina Quast37350392015-05-08 16:47:26 +020015 dev = usb.core.find(idVendor=0x16c0, idProduct=0x0762)
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("-b", "--read_bin", help="read ICCID, IMSI, etc.", action='store_true')
Christina Quastf2582fc2015-03-06 19:09:35 +010028 parser.add_argument("-s", "--sniff", help="Sniff communication!", action='store_true')
Christina Quast31b5b4e2015-03-09 17:15:13 +010029 parser.add_argument("-S", "--select_file", help="Transmit SELECT cmd!", action='store_true')
Christina Quast381d0fc2015-03-15 15:13:38 +010030 parser.add_argument("-p", "--phone", help="Emulates simcard", action='store_true')
Christina Quast80050a52015-04-04 20:00:15 +020031 parser.add_argument("-m", "--mitm", help="Intercept communication (MITM)", action='store_true')
Christina Quastba486b62015-05-18 17:16:26 +020032
Christina Quastf2582fc2015-03-06 19:09:35 +010033 args = parser.parse_args()
34 print("args: ", args)
35
Christina Quastf2582fc2015-03-06 19:09:35 +010036 if args.conf is not None:
Christina Quast4bcc0232015-03-24 21:59:32 +010037 dev = find_dev()
38 dev.set_configuration(args.conf)
Christina Quast362a4da2015-04-09 13:39:38 +020039 # Give pcsclite time to find the device
40 time.sleep(1)
Christina Quastf2582fc2015-03-06 19:09:35 +010041 if args.read_bin is True:
42 ccid.pySim_read()
Christina Quastf2582fc2015-03-06 19:09:35 +010043 if args.sniff is True:
Christina Quast5cf676d2015-05-14 17:21:34 +020044 sniffer.sniff(dev)
Christina Quast31b5b4e2015-03-09 17:15:13 +010045 if args.select_file is True:
46 ccid_select.select()
Christina Quast381d0fc2015-03-15 15:13:38 +010047 if args.phone is True:
Christina Quastf25a7602015-05-14 18:09:47 +020048 mitm.do_mitm(dev, sim_emul=True)
Christina Quast80050a52015-04-04 20:00:15 +020049 if args.mitm is True:
Christina Quastf25a7602015-05-14 18:09:47 +020050 mitm.do_mitm(dev, sim_emul=False)
Christina Quastf2582fc2015-03-06 19:09:35 +010051 return
52
Christina Quastf2582fc2015-03-06 19:09:35 +010053main()