mirror of
https://gitea.osmocom.org/sim-card/simtrace2.git
synced 2026-03-16 21:28:33 +03:00
Motorola seems to be in an endless loop? In any case, it only shows the motorola logo and does not react to pressing the power button.
107 lines
3.1 KiB
Python
Executable File
107 lines
3.1 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
import argparse
|
|
import sniffer
|
|
import ccid
|
|
import ccid_select
|
|
import phone
|
|
|
|
import usb.core
|
|
import usb.util
|
|
|
|
import hashlib
|
|
import os
|
|
import random
|
|
import re
|
|
|
|
cmd1 = {0x00, 0x10, 0x00, 0x00}
|
|
cmd2 = {0x00, 0x20, 0x00, 0x00, 0x02}
|
|
cmd_poweron = {0x62, 0x62, 0x00, 0x00}
|
|
cmd_poweroff = {0x63, 0x63, 0x00, 0x00}
|
|
cmd_get_slot_stat = {0x65, 0x65, 0x00, 0x00}
|
|
cmd_get_param = {0x00, 0x6C, 0x00, 0x00}
|
|
|
|
class find_class(object):
|
|
def __init__(self, class_):
|
|
self._class = class_
|
|
def __call__(self, device):
|
|
# first, let's check the device
|
|
if device.bDeviceClass == self._class:
|
|
return True
|
|
# ok, transverse all devices to find an
|
|
# interface that matches our class
|
|
for cfg in device:
|
|
# find_descriptor: what's it?
|
|
intf = usb.util.find_descriptor(
|
|
cfg,
|
|
bInterfaceClass=self._class
|
|
)
|
|
if intf is not None:
|
|
return True
|
|
|
|
return False
|
|
|
|
def find_dev():
|
|
dev = usb.core.find(idVendor=0x03eb, idProduct=0x6004)
|
|
if dev is None:
|
|
raise ValueError("Device not found")
|
|
else:
|
|
print("Found device")
|
|
return dev
|
|
|
|
# main code
|
|
def main():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("-C", "--conf", type=int, choices=[1, 2, 3], help="Set USB config")
|
|
parser.add_argument("-b", "--read_bin", help="read ICCID, IMSI, etc.", action='store_true')
|
|
parser.add_argument("-c", "--cmd", help="cmds to send to sim card (Not supported yet)",
|
|
choices=["cmd1", "cmd2", "cmd_poweron", "cmd_poweroff", "cmd_get_slot_stat", "cmd_get_param"])
|
|
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')
|
|
|
|
args = parser.parse_args()
|
|
print("args: ", args)
|
|
|
|
|
|
# FIXME: why is it a ccid function?
|
|
if args.conf is not None:
|
|
#FIXME: Change means to find devices
|
|
dev = find_dev()
|
|
dev.set_configuration(args.conf)
|
|
|
|
if args.read_bin is True:
|
|
ccid.pySim_read()
|
|
|
|
if args.cmd is not None:
|
|
#FIXME: Change means to find devices
|
|
devs = usb.core.find(find_all=1, custom_match=find_class(0xb)) # 0xb = Smartcard
|
|
for dev in devs:
|
|
dev.write(0x1, args.cmd)
|
|
ret = dev.read(0x82, 64)
|
|
# ret = dev.read(0x83, 64, 100)
|
|
print(ret)
|
|
if args.sniff is True:
|
|
sniffer.sniff()
|
|
if args.select_file is True:
|
|
ccid_select.select()
|
|
if args.phone is True:
|
|
phone.emulate_sim()
|
|
|
|
return
|
|
|
|
# (epi, epo) = find_eps(dev)
|
|
while True:
|
|
#ep_out.write("Hello")
|
|
try:
|
|
ans = dev.read(0x82, 64, 1000)
|
|
print("".join("%02x " % b for b in ans))
|
|
except KeyboardInterrupt:
|
|
print("Bye")
|
|
sys.exit()
|
|
except:
|
|
print("Timeout")
|
|
# print(ep_in.read(1, 5000));
|
|
|
|
main()
|