diff --git a/src/idevicerestore.c b/src/idevicerestore.c index 36099d1b..2dd7eb88 100644 --- a/src/idevicerestore.c +++ b/src/idevicerestore.c @@ -1258,6 +1258,16 @@ int idevicerestore_start(struct idevicerestore_client_t* client) error("ERROR: Unable to get SHSH blobs for this device (recovery OS Root Ticket)\n"); return -1; } + } else { + plist_t recovery_variant = plist_access_path(build_identity, 2, "Info", "RecoveryVariant"); + if (recovery_variant) { + const char* recovery_variant_str = plist_get_string_ptr(recovery_variant, NULL); + plist_t recovery_build_identity = build_manifest_get_build_identity_for_model_with_variant(client->build_manifest, client->device->hardware_model, recovery_variant_str, 1); + if (get_tss_response(client, recovery_build_identity, &client->tss_recoveryos_root_ticket) < 0) { + error("ERROR: Unable to get SHSH blobs for this device (%s)\n", recovery_variant_str); + return -1; + } + } } } diff --git a/src/img4.c b/src/img4.c index dc21e567..c010ce4f 100644 --- a/src/img4.c +++ b/src/img4.c @@ -441,6 +441,14 @@ int img4_stitch_component(const char* component_name, const unsigned char* compo memcpy((void*)tag, "rcio", 4); } else if (strcmp(component_name, "Ap,DCP2") == 0) { memcpy((void*)tag, "dcp2", 4); + } else if (strcmp(component_name, "Ap,RestoreSecureM3Firmware") == 0) { + memcpy((void*)tag, "rsm3", 4); + } else if (strcmp(component_name, "Ap,RestoreSecurePageTableMonitor") == 0) { + memcpy((void*)tag, "rspt", 4); + } else if (strcmp(component_name, "Ap,RestoreTrustedExecutionMonitor") == 0) { + memcpy((void*)tag, "rtrx", 4); + } else if (strcmp(component_name, "Ap,RestorecL4") == 0) { + memcpy((void*)tag, "rxcl", 4); } }