diff --git a/sysmo_isim_sja2.py b/sysmo_isim_sja2.py index da20071..a83c750 100644 --- a/sysmo_isim_sja2.py +++ b/sysmo_isim_sja2.py @@ -454,6 +454,7 @@ class Sysmo_isim_sja2(Sysmo_usim): atr = "3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9" print "Trying to find card with ATR: " + atr Sysmo_usim.__init__(self, atr) + self.has_isim = True card_detected = True except: print " * Card not detected!" @@ -467,6 +468,20 @@ class Sysmo_isim_sja2(Sysmo_usim): atr = "3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2" print "Trying to find card with ATR: " + atr Sysmo_usim.__init__(self, atr) + self.has_isim = True + card_detected = True + except: + print " * Card not detected!" + + if card_detected == True: + return + + # Try card model #3 (sysmoTSIM) + try: + atr = "3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 52 75 31 04 51 D5" + print "Trying to find card with ATR: " + atr + Sysmo_usim.__init__(self, atr) + self.has_isim = False card_detected = True except: print " * Card not detected!" @@ -519,9 +534,10 @@ class Sysmo_isim_sja2(Sysmo_usim): self.sim.card.SELECT_ADF_USIM() self.sim.select(SYSMO_ISIMSJA2_EF_MILENAGE_CFG) self.sim.update_binary(ef_milenage_cfg.encode()) - self.sim.card.SELECT_ADF_ISIM() - self.sim.select(SYSMO_ISIMSJA2_EF_MILENAGE_CFG) - self.sim.update_binary(ef_milenage_cfg.encode()) + if self.has_isim: + self.sim.card.SELECT_ADF_ISIM() + self.sim.select(SYSMO_ISIMSJA2_EF_MILENAGE_CFG) + self.sim.update_binary(ef_milenage_cfg.encode()) print("") @@ -569,11 +585,12 @@ class Sysmo_isim_sja2(Sysmo_usim): print " * ADF_USIM/EF_USIM_AUTH_KEY_2G:" print SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY_2G(res.apdu) - # ADF_USIM/EF_ISIM_AUTH_KEY_2G: - self.__select_xsim_auth_key(isim = True, _2G = True) - res = self._read_binary(self.sim.filelen) - print " * ADF_ISIM/EF_ISIM_AUTH_KEY_2G:" - print SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY_2G(res.apdu) + if self.has_isim: + # ADF_ISIM/EF_ISIM_AUTH_KEY_2G: + self.__select_xsim_auth_key(isim = True, _2G = True) + res = self._read_binary(self.sim.filelen) + print " * ADF_ISIM/EF_ISIM_AUTH_KEY_2G:" + print SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY_2G(res.apdu) # ADF_USIM/EF_USIM_AUTH_KEY: self.__select_xsim_auth_key(isim = False, _2G = False) @@ -581,11 +598,12 @@ class Sysmo_isim_sja2(Sysmo_usim): print " * ADF_USIM/EF_USIM_AUTH_KEY:" print SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY(res.apdu) - # ADF_ISIM/EF_ISIM_AUTH_KEY: - self.__select_xsim_auth_key(isim = True, _2G = False) - res = self._read_binary(self.sim.filelen) - print " * ADF_ISIM/EF_ISIM_AUTH_KEY:" - print SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY(res.apdu) + if self.has_isim: + # ADF_ISIM/EF_ISIM_AUTH_KEY: + self.__select_xsim_auth_key(isim = True, _2G = False) + res = self._read_binary(self.sim.filelen) + print " * ADF_ISIM/EF_ISIM_AUTH_KEY:" + print SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY(res.apdu) # ADF_USIM/EF_MILENAGE_CFG: self.sim.select(GSM_SIM_MF) @@ -595,13 +613,14 @@ class Sysmo_isim_sja2(Sysmo_usim): print " * ADF_USIM/EF_MILENAGE_CFG:" print SYSMO_ISIMSJA2_FILE_EF_MILENAGE_CFG(res.apdu) - # ADF_ISIM/EF_MILENAGE_CFG: - self.sim.select(GSM_SIM_MF) - self.sim.card.SELECT_ADF_ISIM() - self.sim.select(SYSMO_ISIMSJA2_EF_MILENAGE_CFG) - res = self._read_binary(self.sim.filelen) - print " * ADF_ISIM/EF_MILENAGE_CFG:" - print SYSMO_ISIMSJA2_FILE_EF_MILENAGE_CFG(res.apdu) + if self.has_isim: + # ADF_ISIM/EF_MILENAGE_CFG: + self.sim.select(GSM_SIM_MF) + self.sim.card.SELECT_ADF_ISIM() + self.sim.select(SYSMO_ISIMSJA2_EF_MILENAGE_CFG) + res = self._read_binary(self.sim.filelen) + print " * ADF_ISIM/EF_MILENAGE_CFG:" + print SYSMO_ISIMSJA2_FILE_EF_MILENAGE_CFG(res.apdu) # ADF_USIM/EF_USIM_SQN: self.sim.select(GSM_SIM_MF) @@ -611,13 +630,14 @@ class Sysmo_isim_sja2(Sysmo_usim): print " * ADF_USIM/EF_USIM_SQN:" print SYSMO_ISIMSJA2_FILE_EF_USIM_SQN(res.apdu) - # ADF_USIM/EF_ISIM_SQN: - self.sim.select(GSM_SIM_MF) - self.sim.card.SELECT_ADF_ISIM() - self.sim.select(SYSMO_ISIMSJA2_EF_USIM_SQN) - res = self._read_binary(self.sim.filelen) - print " * ADF_USIM/EF_ISIM_SQN:" - print SYSMO_ISIMSJA2_FILE_EF_USIM_SQN(res.apdu) + if self.has_isim: + # ADF_USIM/EF_ISIM_SQN: + self.sim.select(GSM_SIM_MF) + self.sim.card.SELECT_ADF_ISIM() + self.sim.select(SYSMO_ISIMSJA2_EF_USIM_SQN) + res = self._read_binary(self.sim.filelen) + print " * ADF_ISIM/EF_ISIM_SQN:" + print SYSMO_ISIMSJA2_FILE_EF_USIM_SQN(res.apdu) # Show current KI value @@ -658,11 +678,12 @@ class Sysmo_isim_sja2(Sysmo_usim): ef.key = ki self.sim.update_binary(ef.encode()) - self.__select_xsim_auth_key(isim = True, _2G = False) - res = self._read_binary(self.sim.filelen) - ef = SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY(res.apdu) - ef.key = ki - self.sim.update_binary(ef.encode()) + if self.has_isim: + self.__select_xsim_auth_key(isim = True, _2G = False) + res = self._read_binary(self.sim.filelen) + ef = SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY(res.apdu) + ef.key = ki + self.sim.update_binary(ef.encode()) print("") @@ -723,11 +744,12 @@ class Sysmo_isim_sja2(Sysmo_usim): ef.algo = algo_3g self.sim.update_binary(ef.encode()) - self.__select_xsim_auth_key(isim = True, _2G = False) - res = self._read_binary(self.sim.filelen) - ef = SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY(res.apdu) - ef.algo = algo_3g - self.sim.update_binary(ef.encode()) + if self.has_isim: + self.__select_xsim_auth_key(isim = True, _2G = False) + res = self._read_binary(self.sim.filelen) + ef = SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY(res.apdu) + ef.algo = algo_3g + self.sim.update_binary(ef.encode()) print("") @@ -775,12 +797,13 @@ class Sysmo_isim_sja2(Sysmo_usim): ef.use_opc = bool(select) self.sim.update_binary(ef.encode()) - self.__select_xsim_auth_key(isim = True, _2G = False) - res = self._read_binary(self.sim.filelen) - ef = SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY(res.apdu) - ef.opc = op - ef.use_opc = bool(select) - self.sim.update_binary(ef.encode()) + if self.has_isim: + self.__select_xsim_auth_key(isim = True, _2G = False) + res = self._read_binary(self.sim.filelen) + ef = SYSMO_ISIMSJA2_FILE_EF_USIM_AUTH_KEY(res.apdu) + ef.opc = op + ef.use_opc = bool(select) + self.sim.update_binary(ef.encode()) self.__select_xsim_auth_key(isim = False, _2G = False) res = self._read_binary(self.sim.filelen) @@ -804,12 +827,13 @@ class Sysmo_isim_sja2(Sysmo_usim): res = self._read_binary(self.sim.filelen) print SYSMO_ISIMSJA2_FILE_EF_USIM_SQN(res.apdu) - print(" * Current SQN Configuration for ADF_ISIM:") - self.sim.select(GSM_SIM_MF) - self.sim.card.SELECT_ADF_ISIM() - self.sim.select(SYSMO_ISIMSJA2_EF_USIM_SQN) - res = self._read_binary(self.sim.filelen) - print SYSMO_ISIMSJA2_FILE_EF_USIM_SQN(res.apdu) + if self.has_isim: + print(" * Current SQN Configuration for ADF_ISIM:") + self.sim.select(GSM_SIM_MF) + self.sim.card.SELECT_ADF_ISIM() + self.sim.select(SYSMO_ISIMSJA2_EF_USIM_SQN) + res = self._read_binary(self.sim.filelen) + print SYSMO_ISIMSJA2_FILE_EF_USIM_SQN(res.apdu) print("") @@ -829,11 +853,12 @@ class Sysmo_isim_sja2(Sysmo_usim): ef.reset() self.sim.update_binary(ef.encode()) - self.sim.card.SELECT_ADF_ISIM() - self.sim.select(SYSMO_ISIMSJA2_EF_USIM_SQN) - res = self._read_binary(self.sim.filelen) - ef = SYSMO_ISIMSJA2_FILE_EF_USIM_SQN(res.apdu) - ef.reset() - self.sim.update_binary(ef.encode()) + if self.has_isim: + self.sim.card.SELECT_ADF_ISIM() + self.sim.select(SYSMO_ISIMSJA2_EF_USIM_SQN) + res = self._read_binary(self.sim.filelen) + ef = SYSMO_ISIMSJA2_FILE_EF_USIM_SQN(res.apdu) + ef.reset() + self.sim.update_binary(ef.encode()) print("")