def __init__(self, cardtype = GSM_USIM, atr = None): if cardtype == GSM_USIM: self.card = USIM(atr) self.usim = True else: self.card = SIM(atr) self.usim = False
def program_files(self): # program SIM with SMSP and HMPLN infos # sim = SIM() verify_chv(sim, chv=CHV_PROG, adm=0x5) # # go to ICCID and update it sim.SELECT_FILE(0, 0, [0x3F, 0x00]) sim.SELECT_FILE(0, 0, [0x2F, 0xE2]) ret = sim.UPDATE_BINARY(0, 0, encode_ICCID(self.ICCID)) print('Writing ICCID: %s' % ret) # # go to IMSI and update it sim.SELECT_FILE(0, 0, [0x3F, 0x00]) sim.SELECT_FILE(0, 0, [0x7F, 0x20]) sim.SELECT_FILE(0, 0, [0x6F, 0x07]) ret = sim.UPDATE_BINARY(0, 0, encode_IMSI(self.IMSI)) print('Writing IMSI: %s' % ret) # # go to SMSP address and update the 1st record for SMSP # this is the absolute address for SIM application # USIM app addr for SMSP is only a symlink to it sim.SELECT_FILE(0, 0, [0x3F, 0x00]) sim.SELECT_FILE(0, 0, [0x7F, 0x10]) sim.SELECT_FILE(0, 0, [0x6F, 0x42]) ret = sim.UPDATE_RECORD(1, 4, SMSP) print('Writing SMSP: %s' % ret) # # go to HPLMN search period file sim.SELECT_FILE(0, 0, [0x3F, 0x00]) sim.SELECT_FILE(0, 0, [0x7F, 0x20]) sim.SELECT_FILE(0, 0, [0x6F, 0x31]) ret = sim.UPDATE_BINARY(0, 0, T_HPLMN) print('Writing HPLMN selection search period: %s' % ret) # # go to PLMNsel address and update binary string for HPLMN sim.SELECT_FILE(0, 0, [0x3F, 0x00]) sim.SELECT_FILE(0, 0, [0x7F, 0x20]) sim.SELECT_FILE(0, 0, [0x6F, 0x30]) ret = sim.UPDATE_BINARY(0, 0, PLMNsel) print('Writing PLMN selector: %s' % ret) # # go to SST address and update the service table sim.SELECT_FILE(0, 0, [0x3F, 0x00]) sim.SELECT_FILE(0, 0, [0x7F, 0x20]) sim.SELECT_FILE(0, 0, [0x6F, 0x38]) ret = sim.UPDATE_BINARY(0, 0, SST) print('Writing SIM Services Table: %s' % ret) # # go to SPN address and update Service Provider Name sim.SELECT_FILE(0, 0, [0x3F, 0x00]) sim.SELECT_FILE(0, 0, [0x7F, 0x20]) sim.SELECT_FILE(0, 0, [0x6F, 0x46]) ret = sim.UPDATE_BINARY(0, 0, SPN) print('Writing Service Provider Name: %s' % ret) # sim.disconnect() return 0
def handle_sim_info(options): s = SIM() if not s: print "Error opening SIM" exit(1) if options.debug: s.dbg = 1 s.caller.get(options.param)()
def handle_siminfo(options): s = SIM() if not s: print "Error opening SIM" exit(1) if options.write is not None: return s.caller.get(options.param)(options.write) elif options.rand is not None: return s.caller.get(options.param)(options.rand) else: return s.caller.get(options.param)()
def test_identification(self): s = SIM() self.ICCID = s.get_ICCID() #s.disconnect() #s = SIM() self.IMSI = s.get_imsi() s.disconnect() print('[+] SIM identification:\nICCID: %s\nIMSI: %s' \ % (self.ICCID, self.IMSI)) if not self.ICCID or not self.IMSI: print('[-] identification error') return 1 return 0
def __init__(self, cardtype=GSM_USIM, atr=None): if cardtype == GSM_USIM: self.card = USIM(atr) self.usim = True # Detect ISIM / USIM applications self.card.get_AID() AID = self.card.AID for a in AID: if a[0:7] == [0xA0, 0x00, 0x00, 0x00, 0x87, 0x10, 0x04]: self.has_isim = True elif a[0:7] == [0xA0, 0x00, 0x00, 0x00, 0x87, 0x10, 0x02]: self.has_usim = True else: self.card = SIM(atr) self.usim = False
def handle_sim(options, rand_bin): s = SIM() if not s: print "Error opening SIM" exit(1) imsi = s.get_imsi() ret = s.run_gsm_alg(rand_bin) if not options.ipsec: print "Testing SIM card with IMSI %s" % imsi print "\nGSM Authentication" print "SRES:\t%s" % b2a_hex(byteToString(ret[0])) print "Kc:\t%s" % b2a_hex(byteToString(ret[1])) if options.ipsec: print "1%[email protected]%s.mcc%s.3gppnetwork.org,%s,%s,%s" % ( imsi, imsi[3:6], imsi[0:3], b2a_hex(byteToString(rand_bin)), b2a_hex(byteToString(ret[0])), b2a_hex(byteToString(ret[1])))
#!/usr/bin/python from card.SIM import SIM s = SIM() print s.get_imsi()