pymobiledevice3 5.0.0__py3-none-any.whl → 5.0.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pymobiledevice3 might be problematic. Click here for more details.

Files changed (143) hide show
  1. misc/plist_sniffer.py +15 -15
  2. misc/remotexpc_sniffer.py +29 -28
  3. pymobiledevice3/__main__.py +128 -102
  4. pymobiledevice3/_version.py +2 -2
  5. pymobiledevice3/bonjour.py +26 -49
  6. pymobiledevice3/ca.py +32 -24
  7. pymobiledevice3/cli/activation.py +7 -7
  8. pymobiledevice3/cli/afc.py +19 -19
  9. pymobiledevice3/cli/amfi.py +4 -4
  10. pymobiledevice3/cli/apps.py +51 -39
  11. pymobiledevice3/cli/backup.py +58 -32
  12. pymobiledevice3/cli/bonjour.py +25 -18
  13. pymobiledevice3/cli/cli_common.py +112 -81
  14. pymobiledevice3/cli/companion_proxy.py +4 -4
  15. pymobiledevice3/cli/completions.py +10 -10
  16. pymobiledevice3/cli/crash.py +37 -31
  17. pymobiledevice3/cli/developer.py +602 -520
  18. pymobiledevice3/cli/diagnostics.py +38 -33
  19. pymobiledevice3/cli/lockdown.py +79 -74
  20. pymobiledevice3/cli/mounter.py +85 -68
  21. pymobiledevice3/cli/notification.py +10 -10
  22. pymobiledevice3/cli/pcap.py +19 -14
  23. pymobiledevice3/cli/power_assertion.py +12 -10
  24. pymobiledevice3/cli/processes.py +10 -10
  25. pymobiledevice3/cli/profile.py +88 -77
  26. pymobiledevice3/cli/provision.py +17 -17
  27. pymobiledevice3/cli/remote.py +186 -110
  28. pymobiledevice3/cli/restore.py +43 -40
  29. pymobiledevice3/cli/springboard.py +30 -28
  30. pymobiledevice3/cli/syslog.py +85 -58
  31. pymobiledevice3/cli/usbmux.py +21 -20
  32. pymobiledevice3/cli/version.py +3 -2
  33. pymobiledevice3/cli/webinspector.py +157 -79
  34. pymobiledevice3/common.py +1 -1
  35. pymobiledevice3/exceptions.py +154 -60
  36. pymobiledevice3/irecv.py +49 -53
  37. pymobiledevice3/irecv_devices.py +1489 -492
  38. pymobiledevice3/lockdown.py +394 -241
  39. pymobiledevice3/lockdown_service_provider.py +5 -7
  40. pymobiledevice3/osu/os_utils.py +18 -9
  41. pymobiledevice3/osu/posix_util.py +28 -15
  42. pymobiledevice3/osu/win_util.py +14 -8
  43. pymobiledevice3/pair_records.py +19 -19
  44. pymobiledevice3/remote/common.py +4 -4
  45. pymobiledevice3/remote/core_device/app_service.py +94 -67
  46. pymobiledevice3/remote/core_device/core_device_service.py +17 -14
  47. pymobiledevice3/remote/core_device/device_info.py +5 -5
  48. pymobiledevice3/remote/core_device/diagnostics_service.py +10 -8
  49. pymobiledevice3/remote/core_device/file_service.py +47 -33
  50. pymobiledevice3/remote/remote_service_discovery.py +53 -35
  51. pymobiledevice3/remote/remotexpc.py +62 -41
  52. pymobiledevice3/remote/tunnel_service.py +371 -293
  53. pymobiledevice3/remote/utils.py +12 -11
  54. pymobiledevice3/remote/xpc_message.py +145 -125
  55. pymobiledevice3/resources/dsc_uuid_map.py +19 -19
  56. pymobiledevice3/resources/firmware_notifications.py +16 -16
  57. pymobiledevice3/restore/asr.py +27 -27
  58. pymobiledevice3/restore/base_restore.py +90 -47
  59. pymobiledevice3/restore/consts.py +87 -66
  60. pymobiledevice3/restore/device.py +11 -11
  61. pymobiledevice3/restore/fdr.py +46 -46
  62. pymobiledevice3/restore/ftab.py +19 -19
  63. pymobiledevice3/restore/img4.py +130 -133
  64. pymobiledevice3/restore/mbn.py +35 -54
  65. pymobiledevice3/restore/recovery.py +125 -135
  66. pymobiledevice3/restore/restore.py +524 -523
  67. pymobiledevice3/restore/restore_options.py +122 -115
  68. pymobiledevice3/restore/restored_client.py +25 -22
  69. pymobiledevice3/restore/tss.py +378 -270
  70. pymobiledevice3/service_connection.py +50 -46
  71. pymobiledevice3/services/accessibilityaudit.py +136 -126
  72. pymobiledevice3/services/afc.py +350 -291
  73. pymobiledevice3/services/amfi.py +21 -18
  74. pymobiledevice3/services/companion.py +23 -19
  75. pymobiledevice3/services/crash_reports.py +60 -46
  76. pymobiledevice3/services/debugserver_applist.py +3 -3
  77. pymobiledevice3/services/device_arbitration.py +8 -8
  78. pymobiledevice3/services/device_link.py +55 -47
  79. pymobiledevice3/services/diagnostics.py +971 -968
  80. pymobiledevice3/services/dtfetchsymbols.py +8 -8
  81. pymobiledevice3/services/dvt/dvt_secure_socket_proxy.py +4 -4
  82. pymobiledevice3/services/dvt/dvt_testmanaged_proxy.py +4 -4
  83. pymobiledevice3/services/dvt/instruments/activity_trace_tap.py +85 -74
  84. pymobiledevice3/services/dvt/instruments/application_listing.py +2 -3
  85. pymobiledevice3/services/dvt/instruments/condition_inducer.py +7 -6
  86. pymobiledevice3/services/dvt/instruments/core_profile_session_tap.py +466 -384
  87. pymobiledevice3/services/dvt/instruments/device_info.py +11 -11
  88. pymobiledevice3/services/dvt/instruments/energy_monitor.py +1 -1
  89. pymobiledevice3/services/dvt/instruments/graphics.py +1 -1
  90. pymobiledevice3/services/dvt/instruments/location_simulation.py +1 -1
  91. pymobiledevice3/services/dvt/instruments/location_simulation_base.py +10 -10
  92. pymobiledevice3/services/dvt/instruments/network_monitor.py +17 -17
  93. pymobiledevice3/services/dvt/instruments/notifications.py +1 -1
  94. pymobiledevice3/services/dvt/instruments/process_control.py +25 -10
  95. pymobiledevice3/services/dvt/instruments/screenshot.py +2 -2
  96. pymobiledevice3/services/dvt/instruments/sysmontap.py +15 -15
  97. pymobiledevice3/services/dvt/testmanaged/xcuitest.py +40 -50
  98. pymobiledevice3/services/file_relay.py +10 -10
  99. pymobiledevice3/services/heartbeat.py +8 -7
  100. pymobiledevice3/services/house_arrest.py +12 -15
  101. pymobiledevice3/services/installation_proxy.py +119 -100
  102. pymobiledevice3/services/lockdown_service.py +12 -5
  103. pymobiledevice3/services/misagent.py +22 -19
  104. pymobiledevice3/services/mobile_activation.py +84 -72
  105. pymobiledevice3/services/mobile_config.py +330 -301
  106. pymobiledevice3/services/mobile_image_mounter.py +137 -116
  107. pymobiledevice3/services/mobilebackup2.py +188 -150
  108. pymobiledevice3/services/notification_proxy.py +11 -11
  109. pymobiledevice3/services/os_trace.py +69 -51
  110. pymobiledevice3/services/pcapd.py +306 -306
  111. pymobiledevice3/services/power_assertion.py +10 -9
  112. pymobiledevice3/services/preboard.py +4 -4
  113. pymobiledevice3/services/remote_fetch_symbols.py +16 -14
  114. pymobiledevice3/services/remote_server.py +176 -146
  115. pymobiledevice3/services/restore_service.py +16 -16
  116. pymobiledevice3/services/screenshot.py +13 -10
  117. pymobiledevice3/services/simulate_location.py +7 -7
  118. pymobiledevice3/services/springboard.py +15 -15
  119. pymobiledevice3/services/syslog.py +5 -5
  120. pymobiledevice3/services/web_protocol/alert.py +3 -3
  121. pymobiledevice3/services/web_protocol/automation_session.py +180 -176
  122. pymobiledevice3/services/web_protocol/cdp_screencast.py +44 -36
  123. pymobiledevice3/services/web_protocol/cdp_server.py +19 -19
  124. pymobiledevice3/services/web_protocol/cdp_target.py +411 -373
  125. pymobiledevice3/services/web_protocol/driver.py +47 -45
  126. pymobiledevice3/services/web_protocol/element.py +74 -63
  127. pymobiledevice3/services/web_protocol/inspector_session.py +106 -102
  128. pymobiledevice3/services/web_protocol/selenium_api.py +2 -2
  129. pymobiledevice3/services/web_protocol/session_protocol.py +15 -10
  130. pymobiledevice3/services/web_protocol/switch_to.py +11 -12
  131. pymobiledevice3/services/webinspector.py +127 -116
  132. pymobiledevice3/tcp_forwarder.py +35 -22
  133. pymobiledevice3/tunneld/api.py +20 -15
  134. pymobiledevice3/tunneld/server.py +212 -133
  135. pymobiledevice3/usbmux.py +183 -138
  136. pymobiledevice3/utils.py +14 -11
  137. {pymobiledevice3-5.0.0.dist-info → pymobiledevice3-5.0.2.dist-info}/METADATA +1 -1
  138. pymobiledevice3-5.0.2.dist-info/RECORD +173 -0
  139. pymobiledevice3-5.0.0.dist-info/RECORD +0 -173
  140. {pymobiledevice3-5.0.0.dist-info → pymobiledevice3-5.0.2.dist-info}/WHEEL +0 -0
  141. {pymobiledevice3-5.0.0.dist-info → pymobiledevice3-5.0.2.dist-info}/entry_points.txt +0 -0
  142. {pymobiledevice3-5.0.0.dist-info → pymobiledevice3-5.0.2.dist-info}/licenses/LICENSE +0 -0
  143. {pymobiledevice3-5.0.0.dist-info → pymobiledevice3-5.0.2.dist-info}/top_level.txt +0 -0
@@ -164,12 +164,12 @@ ELF64_Phdr = Struct(
164
164
 
165
165
  def _is_valid_elf_ident(e_ident: bytes) -> bool:
166
166
  return (
167
- len(e_ident) >= EI_NIDENT
168
- and e_ident[EI_MAG0] == ELFMAG0
169
- and e_ident[EI_MAG1] == ELFMAG1
170
- and e_ident[EI_MAG2] == ELFMAG2
171
- and e_ident[EI_MAG3] == ELFMAG3
172
- and e_ident[EI_CLASS] != ELFCLASSNONE
167
+ len(e_ident) >= EI_NIDENT
168
+ and e_ident[EI_MAG0] == ELFMAG0
169
+ and e_ident[EI_MAG1] == ELFMAG1
170
+ and e_ident[EI_MAG2] == ELFMAG2
171
+ and e_ident[EI_MAG3] == ELFMAG3
172
+ and e_ident[EI_CLASS] != ELFCLASSNONE
173
173
  )
174
174
 
175
175
 
@@ -198,22 +198,15 @@ def _read_program_headers(data: bytes, kind: str, hdr) -> list:
198
198
  logger.error("%s: ELF has no program sections", "_read_program_headers")
199
199
  return phdrs
200
200
 
201
- table_size = hdr.e_phnum * (
202
- ELF64_Phdr.sizeof() if kind == "ELF64" else ELF32_Phdr.sizeof()
203
- )
201
+ table_size = hdr.e_phnum * (ELF64_Phdr.sizeof() if kind == "ELF64" else ELF32_Phdr.sizeof())
204
202
  if hdr.e_phoff + table_size > len(data):
205
- logger.error(
206
- "%s: Program header table is out of bounds", "_read_program_headers"
207
- )
203
+ logger.error("%s: Program header table is out of bounds", "_read_program_headers")
208
204
  return []
209
205
 
210
- table = data[hdr.e_phoff:hdr.e_phoff + table_size]
206
+ table = data[hdr.e_phoff : hdr.e_phoff + table_size]
211
207
  bio = io.BytesIO(table)
212
208
  for _ in range(hdr.e_phnum):
213
- if kind == "ELF64":
214
- ph = ELF64_Phdr.parse_stream(bio)
215
- else:
216
- ph = ELF32_Phdr.parse_stream(bio)
209
+ ph = ELF64_Phdr.parse_stream(bio) if kind == "ELF64" else ELF32_Phdr.parse_stream(bio)
217
210
  phdrs.append(ph)
218
211
  return phdrs
219
212
 
@@ -232,25 +225,25 @@ def _elf_last_segment_end(data: bytes) -> Optional[int]:
232
225
 
233
226
  def _mbn_v7_header_sizes_valid(h, sect_size: int) -> bool:
234
227
  total = (
235
- MBN_V7.sizeof()
236
- + h.common_metadata_size
237
- + h.qti_metadata_size
238
- + h.oem_metadata_size
239
- + h.hash_table_size
240
- + h.qti_signature_size
241
- + h.qti_certificate_chain_size
242
- + h.oem_signature_size
243
- + h.oem_certificate_chain_size
228
+ MBN_V7.sizeof()
229
+ + h.common_metadata_size
230
+ + h.qti_metadata_size
231
+ + h.oem_metadata_size
232
+ + h.hash_table_size
233
+ + h.qti_signature_size
234
+ + h.qti_certificate_chain_size
235
+ + h.oem_signature_size
236
+ + h.oem_certificate_chain_size
244
237
  )
245
238
  return total <= sect_size
246
239
 
247
240
 
248
241
  def _mbn_v7_header_sizes_expected(h) -> bool:
249
242
  return (
250
- (h.qti_metadata_size in (0, 0xE0))
251
- and (h.oem_metadata_size in (0, 0xE0))
252
- and (h.oem_signature_size in (0, 0x68))
253
- and (h.oem_certificate_chain_size in (0, 0xD20))
243
+ (h.qti_metadata_size in (0, 0xE0))
244
+ and (h.oem_metadata_size in (0, 0xE0))
245
+ and (h.oem_signature_size in (0, 0x68))
246
+ and (h.oem_certificate_chain_size in (0, 0xD20))
254
247
  )
255
248
 
256
249
 
@@ -329,9 +322,8 @@ def mbn_stitch(data: bytes, blob: bytes) -> Optional[bytes]:
329
322
 
330
323
  # BIN
331
324
  elif (
332
- data_size > (MBN_BIN_MAGIC_SIZE + MBN_BIN_MAGIC_OFFSET)
333
- and data[MBN_BIN_MAGIC_OFFSET:MBN_BIN_MAGIC_OFFSET + MBN_BIN_MAGIC_SIZE]
334
- == MBN_BIN_MAGIC
325
+ data_size > (MBN_BIN_MAGIC_SIZE + MBN_BIN_MAGIC_OFFSET)
326
+ and data[MBN_BIN_MAGIC_OFFSET : MBN_BIN_MAGIC_OFFSET + MBN_BIN_MAGIC_SIZE] == MBN_BIN_MAGIC
335
327
  ):
336
328
  if data_size < MBN_BIN.sizeof():
337
329
  logger.error("%s: truncated MBN BIN header", "mbn_stitch")
@@ -384,14 +376,14 @@ def mbn_stitch(data: bytes, blob: bytes) -> Optional[bytes]:
384
376
  stitch_offset,
385
377
  blob_size,
386
378
  )
387
- out[stitch_offset: stitch_offset + blob_size] = blob
379
+ out[stitch_offset : stitch_offset + blob_size] = blob
388
380
  return bytes(out)
389
381
 
390
- except ChecksumError as e:
391
- logger.error("%s: construct checksum error: %s", "mbn_stitch", str(e))
382
+ except ChecksumError:
383
+ logger.exception("mbn_stitch: construct checksum error")
392
384
  return None
393
- except Exception as e:
394
- logger.error("%s: unexpected error: %s", "mbn_stitch", str(e))
385
+ except Exception:
386
+ logger.exception("mbn_stitch")
395
387
  return None
396
388
 
397
389
 
@@ -475,7 +467,7 @@ def mbn_mav25_stitch(data: bytes, blob: bytes) -> Optional[bytes]:
475
467
  )
476
468
  return None
477
469
 
478
- dest = MBN_V7.parse(data[sect_off: sect_off + MBN_V7.sizeof()])
470
+ dest = MBN_V7.parse(data[sect_off : sect_off + MBN_V7.sizeof()])
479
471
  _mbn_v7_log(dest, "mbn_mav25_stitch", "dest")
480
472
  if dest.version != 7:
481
473
  logger.error(
@@ -515,21 +507,12 @@ def mbn_mav25_stitch(data: bytes, blob: bytes) -> Optional[bytes]:
515
507
  )
516
508
 
517
509
  # compute new layout from src
518
- new_metadata_size = (
519
- MBN_V7.sizeof()
520
- + src.common_metadata_size
521
- + src.qti_metadata_size
522
- + src.oem_metadata_size
523
- )
510
+ new_metadata_size = MBN_V7.sizeof() + src.common_metadata_size + src.qti_metadata_size + src.oem_metadata_size
524
511
  new_metadata_and_hash_table_size = new_metadata_size + src.hash_table_size
525
- new_oem_sig_and_cert_chain_size = (
526
- src.oem_signature_size + src.oem_certificate_chain_size
527
- )
512
+ new_oem_sig_and_cert_chain_size = src.oem_signature_size + src.oem_certificate_chain_size
528
513
 
529
514
  new_oem_sig_and_cert_chain_off = (
530
- new_metadata_and_hash_table_size
531
- + dest.qti_signature_size
532
- + dest.qti_certificate_chain_size
515
+ new_metadata_and_hash_table_size + dest.qti_signature_size + dest.qti_certificate_chain_size
533
516
  )
534
517
 
535
518
  # bounds
@@ -572,9 +555,7 @@ def mbn_mav25_stitch(data: bytes, blob: bytes) -> Optional[bytes]:
572
555
  sect_off,
573
556
  new_metadata_and_hash_table_size,
574
557
  )
575
- out[sect_off: sect_off + new_metadata_and_hash_table_size] = blob[
576
- :new_metadata_and_hash_table_size
577
- ]
558
+ out[sect_off : sect_off + new_metadata_and_hash_table_size] = blob[:new_metadata_and_hash_table_size]
578
559
 
579
560
  # write OEM sig + chain
580
561
  logger.debug(