def validate_pairing(self): pair_record = None certPem = None privateKeyPem = None if sys.platform == "win32": folder = os.environ["ALLUSERSPROFILE"] + "/Apple/Lockdown/" elif sys.platform == "darwin": folder = "/var/db/lockdown/" elif len(sys.platform) >= 5: if sys.platform[0:5] == "linux": folder = "/var/lib/lockdown/" try: pair_record = plistlib.readPlist(folder + "%s.plist" % self.identifier) except: pair_record = None if pair_record: print "Using iTunes pair record: %s.plist" % self.identifier certPem = pair_record["HostCertificate"].data privateKeyPem = pair_record["HostPrivateKey"].data else: print "No iTunes pairing record found for device %s" % self.identifier print "Looking for pymobiledevice pairing record" record = readHomeFile(HOMEFOLDER, "%s.plist" % self.identifier) if record: pair_record = plistlib.readPlistFromString(record) print "Found pymobiledevice pairing record for device %s" % self.udid certPem = pair_record["HostCertificate"].data privateKeyPem = pair_record["HostPrivateKey"].data else: print "No pymobiledevice pairing record found for device %s" % self.identifier return False self.record = pair_record if int(self.ios_version.split('.')[0]) < 11: ValidatePair = {"Label": self.label, "Request": "ValidatePair", "PairRecord": pair_record} self.c.sendPlist(ValidatePair) r = self.c.recvPlist() if not r or r.has_key("Error"): pair_record = None print "ValidatePair fail", ValidatePair return False self.hostID = pair_record.get("HostID", self.hostID) self.SystemBUID = pair_record.get("SystemBUID", self.SystemBUID) d = {"Label": self.label, "Request": "StartSession", "HostID": self.hostID, 'SystemBUID': self.SystemBUID} self.c.sendPlist(d) startsession = self.c.recvPlist() self.SessionID = startsession.get("SessionID") if startsession.get("EnableSessionSSL"): sslfile = self.identifier + "_ssl.txt" sslfile = writeHomeFile(HOMEFOLDER, sslfile, certPem + "\n" + privateKeyPem) self.c.ssl_start(sslfile, sslfile) self.paired = True return True
def validate_pairing(self): pair_record = None certPem = None privateKeyPem = None if sys.platform == "win32": folder = os.environ["ALLUSERSPROFILE"] + "/Apple/Lockdown/" elif sys.platform == "darwin": folder = "/var/db/lockdown/" elif len(sys.platform) >= 5: if sys.platform[0:5] == "linux": folder = "/var/lib/lockdown/" try: pair_record = plistlib.readPlist(folder + "%s.plist" % self.identifier) except: pair_record = None if pair_record: print "Using iTunes pair record: %s.plist" % self.identifier certPem = pair_record["HostCertificate"].data privateKeyPem = pair_record["HostPrivateKey"].data else: print "No iTunes pairing record found for device %s" % self.identifier print "Looking for pymobiledevice pairing record" record = readHomeFile(HOMEFOLDER, "%s.plist" % self.identifier) if record: pair_record = plistlib.readPlistFromString(record) print "Found pymobiledevice pairing record for device %s" % self.udid certPem = pair_record["HostCertificate"].data privateKeyPem = pair_record["HostPrivateKey"].data else: print "No pymobiledevice pairing record found for device %s" % self.identifier return False self.record = pair_record ValidatePair = {"Label": self.label, "Request": "ValidatePair", "PairRecord": pair_record} self.c = PlistService(62078,self.udid) self.c.sendPlist(ValidatePair) r = self.c.recvPlist() if not r or r.has_key("Error"): pair_record = None print "ValidatePair fail", ValidatePair return False self.hostID = pair_record.get("HostID", self.hostID) self.SystemBUID = pair_record.get("SystemBUID", self.SystemBUID) d = {"Label": self.label, "Request": "StartSession", "HostID": self.hostID, 'SystemBUID': self.SystemBUID} self.c.sendPlist(d) startsession = self.c.recvPlist() self.SessionID = startsession.get("SessionID") if startsession.get("EnableSessionSSL"): sslfile = self.identifier + "_ssl.txt" sslfile = writeHomeFile(HOMEFOLDER, sslfile, certPem + "\n" + privateKeyPem) self.c.ssl_start(sslfile, sslfile) self.paired = True return True
def validate_pairing(self): pair_record = None certPem = None privateKeyPem = None if sys.platform == "win32": folder = os.environ["ALLUSERSPROFILE"] + "/Apple/Lockdown/" elif sys.platform == "darwin": folder = "/var/db/lockdown/" elif len(sys.platform) >= 5: if sys.platform[0:5] == "linux": folder = "/var/lib/lockdown/" try: pair_record = plistlib.readPlist(folder + "%s.plist" % self.identifier) except: pair_record = None if pair_record: print("Using iTunes pair record: %s.plist" % self.identifier) certPem = pair_record["HostCertificate"].data privateKeyPem = pair_record["HostPrivateKey"].data else: # LucaV 05.09.2018: se la data del file non corrisponde alla data odierna, richiede il pairing device_data_file = os.path.join(os.path.expanduser('~'), HOMEFOLDER, "%s.plist" % self.identifier) if os.path.isfile(device_data_file): from datetime import datetime, timedelta file_date = datetime.fromtimestamp( os.path.getmtime(device_data_file)) file_date = file_date.replace(hour=0, minute=0, second=0, microsecond=0) today = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) if today - file_date > timedelta(days=1): try: os.remove(device_data_file) except: pass print("No iTunes pairing record found for device %s" % self.identifier) print("Looking for pymobiledevice pairing record") record = readHomeFile(HOMEFOLDER, "%s.plist" % self.identifier) if record: # pair_record = plistlib.loads(record) pair_record = plistlib.readPlistFromBytes(record) print("Found pymobiledevice pairing record for device %s" % self.udid) certPem = pair_record["HostCertificate"].data privateKeyPem = pair_record["HostPrivateKey"].data else: print("No pymobiledevice pairing record found for device %s" % self.identifier) return False self.record = pair_record try: ios_major_version = int(self.ios_version.split('.')[0]) except: print("Unable to parse ProductVersion string: %s" % self.ios_version) ios_major_version = 0 if ios_major_version < 11: ValidatePair = { "Label": self.label, "Request": "ValidatePair", "PairRecord": pair_record } self.c.sendPlist(ValidatePair) r = self.c.recvPlist() if not r or "Error" in r: pair_record = None print("ValidatePair fail", ValidatePair) return False self.hostID = pair_record.get("HostID", self.hostID) self.SystemBUID = pair_record.get("SystemBUID", self.SystemBUID) d = { "Label": self.label, "Request": "StartSession", "HostID": self.hostID, 'SystemBUID': self.SystemBUID } self.c.sendPlist(d) startsession = self.c.recvPlist() self.SessionID = startsession.get("SessionID") if startsession.get("EnableSessionSSL"): sslfile = self.identifier + "_ssl.txt" sslfile = writeHomeFile(HOMEFOLDER, sslfile, certPem + b"\n" + privateKeyPem) self.c.ssl_start(sslfile, sslfile) self.paired = True return True
def get_itunes_record_path(self): folder = None if sys.platform == "win32": folder = os.environ["ALLUSERSPROFILE"] + "/Apple/Lockdown/" elif sys.platform == "darwin": folder = "/var/db/lockdown/" elif len(sys.platform) >= 5: if sys.platform[0:5] == "linux": folder = "/var/lib/lockdown/" try: pair_record = plistlib.readPlist(folder + "%s.plist" % self.identifier) print("Using iTunes pair record: %s.plist" % self.identifier) except: print("No iTunes pairing record found for device %s" % self.identifier) if self.compare_ios_version("13.0") >= 0: print("Getting pair record from usbmuxd") client = usbmux.UsbmuxdClient() pair_record = client.get_pair_record(self.udid) else: print("Looking for pymobiledevice pairing record") record = readHomeFile(HOMEFOLDER, "%s.plist" % self.identifier) if record: pair_record = plistlib.readPlistFromString(record) print("Found pymobiledevice pairing record for device %s" % self.udid) else: print( "No pymobiledevice pairing record found for device %s" % self.identifier) return False self.record = pair_record if PY3: certPem = pair_record["HostCertificate"] privateKeyPem = pair_record["HostPrivateKey"] else: certPem = pair_record["HostCertificate"].data privateKeyPem = pair_record["HostPrivateKey"].data if self.compare_ios_version("11.0") < 0: ValidatePair = { "Label": self.label, "Request": "ValidatePair", "PairRecord": pair_record } self.c.sendPlist(ValidatePair) r = self.c.recvPlist() if not r or "Error" in r: pair_record = None self.logger.error("ValidatePair fail: %s", ValidatePair) return False self.hostID = pair_record.get("HostID", self.hostID) self.SystemBUID = pair_record.get("SystemBUID", self.SystemBUID) d = { "Label": self.label, "Request": "StartSession", "HostID": self.hostID, 'SystemBUID': self.SystemBUID } self.c.sendPlist(d) startsession = self.c.recvPlist() self.SessionID = startsession.get("SessionID") if startsession.get("EnableSessionSSL"): self.sslfile = self.identifier + "_ssl.txt" lf = "\n" if PY3: lf = b"\n" self.sslfile = writeHomeFile(HOMEFOLDER, self.sslfile, certPem + lf + privateKeyPem) self.c.ssl_start(self.sslfile, self.sslfile) self.paired = True return True