def create_info_plist(self): root_node = self.lockdown.allValues info = {"BuildVersion": root_node.get("BuildVersion") or "", "DeviceName": root_node.get("DeviceName") or "", "Display Name": root_node.get("DeviceName") or "", "GUID": "---", "ProductType": root_node.get("ProductType") or "", "ProductVersion": root_node.get("ProductVersion") or "", "Serial Number": root_node.get("SerialNumber") or "", "Unique Identifier": self.udid.upper(), "Target Identifier": self.udid, "Target Type": "Device", "iTunes Version": "10.0.1" } info["ICCID"] = root_node.get("IntegratedCircuitCardIdentity") or "" info["IMEI"] = root_node.get("InternationalMobileEquipmentIdentity") or "" info["Last Backup Date"] = datetime.datetime.now() afc = AFCClient(self.lockdown) iTunesFilesDict = {} iTunesFiles = afc.read_directory("/iTunes_Control/iTunes/") for i in iTunesFiles: data = afc.get_file_contents("/iTunes_Control/iTunes/" + i) if data: iTunesFilesDict[i] = plistlib.Data(data) info["iTunesFiles"] = iTunesFilesDict iBooksData2 = afc.get_file_contents("/Books/iBooksData2.plist") if iBooksData2: info["iBooks Data 2"] = plistlib.Data(iBooksData2) info["iTunes Settings"] = self.lockdown.getValue("com.apple.iTunes") self.logger.info("Creating: %s", os.path.join(self.udid,"Info.plist")) self.write_file(os.path.join(self.udid,"Info.plist"), plistlib.writePlistToString(info))
def create_info_plist(self): root_node = self.lockdown.allValues # print pprint(root_node) info = {"BuildVersion": root_node.get("BuildVersion") or "", "DeviceName": root_node.get("DeviceName") or "", "Display Name": root_node.get("DeviceName") or "", "GUID": "---", "ProductType": root_node.get("ProductType") or "", "ProductVersion": root_node.get("ProductVersion") or "", "Serial Number": root_node.get("SerialNumber") or "", "Unique Identifier": self.udid.upper(), "Target Identifier": self.udid, "Target Type": "Device", "iTunes Version": "10.0.1" } info["ICCID"] = root_node.get("IntegratedCircuitCardIdentity") or "" info["IMEI"] = root_node.get( "InternationalMobileEquipmentIdentity") or "" info["Last Backup Date"] = datetime.datetime.now() afc = AFCClient(self.lockdown) iTunesFilesDict = {} iTunesFiles = afc.read_directory("/iTunes_Control/iTunes/") for i in iTunesFiles: data = afc.get_file_contents("/iTunes_Control/iTunes/" + i) if data: iTunesFilesDict[i] = plistlib.Data(data) info["iTunesFiles"] = iTunesFilesDict iBooksData2 = afc.get_file_contents("/Books/iBooksData2.plist") if iBooksData2: info["iBooks Data 2"] = plistlib.Data(iBooksData2) info["iTunes Settings"] = self.lockdown.getValue("com.apple.iTunes") print("Creating %s" % os.path.join(self.udid, "Info.plist")) self.write_file(os.path.join(self.udid, "Info.plist"), plistlib.dumps(info))
class HouseArrestTest(unittest.TestCase): def setUp(self): mux = USBMux() if not mux.devices: mux.process(0.1) if len(mux.devices) == 0: print("no real device found") self.no_device = True return udid = mux.devices[0].serial lockdown_client = LockdownClient(udid) self.service = lockdown_client.startService( "com.apple.mobile.house_arrest") self.service.sendPlist({ "Command": "VendContainer", "Identifier": "com.gotohack.testapp" }) status = self.service.recvPlist() if 'Error' in status and status['Error'] == "ApplicationLookupFailed": raise RuntimeWarning('ApplicationLookupFailed') if 'Status' in status and status['Status'] != 'Complete': raise RuntimeWarning('House arrest service launch failed') self.afc = AFCClient(lockdown_client, service=self.service) self.afc_shell = AFCShell(client=self.afc) def test_list_files_in_sandbox(self): if self.no_device: return sandbox_tree = [] file_path = '/Documents' for l in self.afc.read_directory(file_path): if l not in ('.', '..'): tmp_dict = {} tmp_dict['path'] = os.path.join(file_path, l) info = self.afc.get_file_info(tmp_dict['path']) tmp_dict['is_dir'] = (info is not None and info['st_ifmt'] == 'S_IFDIR') sandbox_tree.append(tmp_dict) pprint.pprint(sandbox_tree) def test_push_file_to_sandbox(self): if self.no_device: return data = b"hello sandbox!" self.afc.set_file_contents('/Documents/test.log', data) def test_pull_file_from_sandbox(self): if self.no_device: return data = b"hello sandbox!" content = self.afc.get_file_contents('/Documents/test.log') print(content) def test_remove_file_in_sandbox(self): if self.no_device: return self.afc_shell.do_rm('/Documents/test.log') def tearDown(self): if not self.no_device and self.service: self.service.close()