| #!/usr/bin/env python |
| |
| import argparse |
| import sniffer |
| import ccid |
| import ccid_select |
| import mitm |
| |
| import usb.core |
| import usb.util |
| import sys |
| import time |
| |
| def find_dev(): |
| dev = usb.core.find(idVendor=0x1d50, idProduct=0x60e3) |
| if dev is None: |
| raise ValueError("Device not found") |
| else: |
| print("Found device") |
| return dev |
| |
| # main code |
| def main(): |
| parser = argparse.ArgumentParser() |
| # FIXME: config names instead of numbers |
| parser.add_argument("-C", "--conf", type=int, choices=[1, 2, 3, 4], help="Set USB config") |
| parser.add_argument("-s", "--sniff", help="Sniff communication!", action='store_true') |
| parser.add_argument("-S", "--select_file", help="Transmit SELECT cmd!", action='store_true') |
| parser.add_argument("-p", "--phone", help="Emulates simcard", action='store_true') |
| parser.add_argument("-m", "--mitm", help="Intercept communication (MITM)", action='store_true') |
| |
| args = parser.parse_args() |
| print("args: ", args) |
| dev = find_dev() |
| |
| if args.conf is not None: |
| dev.set_configuration(args.conf) |
| # Give pcsclite time to find the device |
| time.sleep(1) |
| if args.sniff is True: |
| sniffer.sniff(dev) |
| # FIXME: This command is test code and should be removed in near future: |
| if args.select_file is True: |
| ccid_select.select() |
| if args.phone is True: |
| mitm.do_mitm(dev, sim_emul=True) |
| if args.mitm is True: |
| mitm.do_mitm(dev, sim_emul=False) |
| return |
| |
| main() |