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.
- misc/plist_sniffer.py +15 -15
- misc/remotexpc_sniffer.py +29 -28
- pymobiledevice3/__main__.py +128 -102
- pymobiledevice3/_version.py +2 -2
- pymobiledevice3/bonjour.py +26 -49
- pymobiledevice3/ca.py +32 -24
- pymobiledevice3/cli/activation.py +7 -7
- pymobiledevice3/cli/afc.py +19 -19
- pymobiledevice3/cli/amfi.py +4 -4
- pymobiledevice3/cli/apps.py +51 -39
- pymobiledevice3/cli/backup.py +58 -32
- pymobiledevice3/cli/bonjour.py +25 -18
- pymobiledevice3/cli/cli_common.py +112 -81
- pymobiledevice3/cli/companion_proxy.py +4 -4
- pymobiledevice3/cli/completions.py +10 -10
- pymobiledevice3/cli/crash.py +37 -31
- pymobiledevice3/cli/developer.py +602 -520
- pymobiledevice3/cli/diagnostics.py +38 -33
- pymobiledevice3/cli/lockdown.py +79 -74
- pymobiledevice3/cli/mounter.py +85 -68
- pymobiledevice3/cli/notification.py +10 -10
- pymobiledevice3/cli/pcap.py +19 -14
- pymobiledevice3/cli/power_assertion.py +12 -10
- pymobiledevice3/cli/processes.py +10 -10
- pymobiledevice3/cli/profile.py +88 -77
- pymobiledevice3/cli/provision.py +17 -17
- pymobiledevice3/cli/remote.py +186 -110
- pymobiledevice3/cli/restore.py +43 -40
- pymobiledevice3/cli/springboard.py +30 -28
- pymobiledevice3/cli/syslog.py +85 -58
- pymobiledevice3/cli/usbmux.py +21 -20
- pymobiledevice3/cli/version.py +3 -2
- pymobiledevice3/cli/webinspector.py +157 -79
- pymobiledevice3/common.py +1 -1
- pymobiledevice3/exceptions.py +154 -60
- pymobiledevice3/irecv.py +49 -53
- pymobiledevice3/irecv_devices.py +1489 -492
- pymobiledevice3/lockdown.py +394 -241
- pymobiledevice3/lockdown_service_provider.py +5 -7
- pymobiledevice3/osu/os_utils.py +18 -9
- pymobiledevice3/osu/posix_util.py +28 -15
- pymobiledevice3/osu/win_util.py +14 -8
- pymobiledevice3/pair_records.py +19 -19
- pymobiledevice3/remote/common.py +4 -4
- pymobiledevice3/remote/core_device/app_service.py +94 -67
- pymobiledevice3/remote/core_device/core_device_service.py +17 -14
- pymobiledevice3/remote/core_device/device_info.py +5 -5
- pymobiledevice3/remote/core_device/diagnostics_service.py +10 -8
- pymobiledevice3/remote/core_device/file_service.py +47 -33
- pymobiledevice3/remote/remote_service_discovery.py +53 -35
- pymobiledevice3/remote/remotexpc.py +62 -41
- pymobiledevice3/remote/tunnel_service.py +371 -293
- pymobiledevice3/remote/utils.py +12 -11
- pymobiledevice3/remote/xpc_message.py +145 -125
- pymobiledevice3/resources/dsc_uuid_map.py +19 -19
- pymobiledevice3/resources/firmware_notifications.py +16 -16
- pymobiledevice3/restore/asr.py +27 -27
- pymobiledevice3/restore/base_restore.py +90 -47
- pymobiledevice3/restore/consts.py +87 -66
- pymobiledevice3/restore/device.py +11 -11
- pymobiledevice3/restore/fdr.py +46 -46
- pymobiledevice3/restore/ftab.py +19 -19
- pymobiledevice3/restore/img4.py +130 -133
- pymobiledevice3/restore/mbn.py +35 -54
- pymobiledevice3/restore/recovery.py +125 -135
- pymobiledevice3/restore/restore.py +524 -523
- pymobiledevice3/restore/restore_options.py +122 -115
- pymobiledevice3/restore/restored_client.py +25 -22
- pymobiledevice3/restore/tss.py +378 -270
- pymobiledevice3/service_connection.py +50 -46
- pymobiledevice3/services/accessibilityaudit.py +136 -126
- pymobiledevice3/services/afc.py +350 -291
- pymobiledevice3/services/amfi.py +21 -18
- pymobiledevice3/services/companion.py +23 -19
- pymobiledevice3/services/crash_reports.py +60 -46
- pymobiledevice3/services/debugserver_applist.py +3 -3
- pymobiledevice3/services/device_arbitration.py +8 -8
- pymobiledevice3/services/device_link.py +55 -47
- pymobiledevice3/services/diagnostics.py +971 -968
- pymobiledevice3/services/dtfetchsymbols.py +8 -8
- pymobiledevice3/services/dvt/dvt_secure_socket_proxy.py +4 -4
- pymobiledevice3/services/dvt/dvt_testmanaged_proxy.py +4 -4
- pymobiledevice3/services/dvt/instruments/activity_trace_tap.py +85 -74
- pymobiledevice3/services/dvt/instruments/application_listing.py +2 -3
- pymobiledevice3/services/dvt/instruments/condition_inducer.py +7 -6
- pymobiledevice3/services/dvt/instruments/core_profile_session_tap.py +466 -384
- pymobiledevice3/services/dvt/instruments/device_info.py +11 -11
- pymobiledevice3/services/dvt/instruments/energy_monitor.py +1 -1
- pymobiledevice3/services/dvt/instruments/graphics.py +1 -1
- pymobiledevice3/services/dvt/instruments/location_simulation.py +1 -1
- pymobiledevice3/services/dvt/instruments/location_simulation_base.py +10 -10
- pymobiledevice3/services/dvt/instruments/network_monitor.py +17 -17
- pymobiledevice3/services/dvt/instruments/notifications.py +1 -1
- pymobiledevice3/services/dvt/instruments/process_control.py +25 -10
- pymobiledevice3/services/dvt/instruments/screenshot.py +2 -2
- pymobiledevice3/services/dvt/instruments/sysmontap.py +15 -15
- pymobiledevice3/services/dvt/testmanaged/xcuitest.py +40 -50
- pymobiledevice3/services/file_relay.py +10 -10
- pymobiledevice3/services/heartbeat.py +8 -7
- pymobiledevice3/services/house_arrest.py +12 -15
- pymobiledevice3/services/installation_proxy.py +119 -100
- pymobiledevice3/services/lockdown_service.py +12 -5
- pymobiledevice3/services/misagent.py +22 -19
- pymobiledevice3/services/mobile_activation.py +84 -72
- pymobiledevice3/services/mobile_config.py +330 -301
- pymobiledevice3/services/mobile_image_mounter.py +137 -116
- pymobiledevice3/services/mobilebackup2.py +188 -150
- pymobiledevice3/services/notification_proxy.py +11 -11
- pymobiledevice3/services/os_trace.py +69 -51
- pymobiledevice3/services/pcapd.py +306 -306
- pymobiledevice3/services/power_assertion.py +10 -9
- pymobiledevice3/services/preboard.py +4 -4
- pymobiledevice3/services/remote_fetch_symbols.py +16 -14
- pymobiledevice3/services/remote_server.py +176 -146
- pymobiledevice3/services/restore_service.py +16 -16
- pymobiledevice3/services/screenshot.py +13 -10
- pymobiledevice3/services/simulate_location.py +7 -7
- pymobiledevice3/services/springboard.py +15 -15
- pymobiledevice3/services/syslog.py +5 -5
- pymobiledevice3/services/web_protocol/alert.py +3 -3
- pymobiledevice3/services/web_protocol/automation_session.py +180 -176
- pymobiledevice3/services/web_protocol/cdp_screencast.py +44 -36
- pymobiledevice3/services/web_protocol/cdp_server.py +19 -19
- pymobiledevice3/services/web_protocol/cdp_target.py +411 -373
- pymobiledevice3/services/web_protocol/driver.py +47 -45
- pymobiledevice3/services/web_protocol/element.py +74 -63
- pymobiledevice3/services/web_protocol/inspector_session.py +106 -102
- pymobiledevice3/services/web_protocol/selenium_api.py +2 -2
- pymobiledevice3/services/web_protocol/session_protocol.py +15 -10
- pymobiledevice3/services/web_protocol/switch_to.py +11 -12
- pymobiledevice3/services/webinspector.py +127 -116
- pymobiledevice3/tcp_forwarder.py +35 -22
- pymobiledevice3/tunneld/api.py +20 -15
- pymobiledevice3/tunneld/server.py +212 -133
- pymobiledevice3/usbmux.py +183 -138
- pymobiledevice3/utils.py +14 -11
- {pymobiledevice3-5.0.0.dist-info → pymobiledevice3-5.0.2.dist-info}/METADATA +1 -1
- pymobiledevice3-5.0.2.dist-info/RECORD +173 -0
- pymobiledevice3-5.0.0.dist-info/RECORD +0 -173
- {pymobiledevice3-5.0.0.dist-info → pymobiledevice3-5.0.2.dist-info}/WHEEL +0 -0
- {pymobiledevice3-5.0.0.dist-info → pymobiledevice3-5.0.2.dist-info}/entry_points.txt +0 -0
- {pymobiledevice3-5.0.0.dist-info → pymobiledevice3-5.0.2.dist-info}/licenses/LICENSE +0 -0
- {pymobiledevice3-5.0.0.dist-info → pymobiledevice3-5.0.2.dist-info}/top_level.txt +0 -0
pymobiledevice3/restore/mbn.py
CHANGED
|
@@ -164,12 +164,12 @@ ELF64_Phdr = Struct(
|
|
|
164
164
|
|
|
165
165
|
def _is_valid_elf_ident(e_ident: bytes) -> bool:
|
|
166
166
|
return (
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
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
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
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
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
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
|
-
|
|
333
|
-
|
|
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
|
|
391
|
-
logger.
|
|
382
|
+
except ChecksumError:
|
|
383
|
+
logger.exception("mbn_stitch: construct checksum error")
|
|
392
384
|
return None
|
|
393
|
-
except Exception
|
|
394
|
-
logger.
|
|
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
|
-
|
|
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(
|