summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2024-09-21 03:15:23 +0200
committerGravatar Nikias Bassen2024-09-21 03:15:23 +0200
commit48350d676e9d817c8c8f1af2cd1e0006e1ad9c3b (patch)
tree26f8b5613da98df1a46ea0101da051f51024e602 /src
parentd2e1c4f2ab81c419d2cbb8d921fa385a0bf0433b (diff)
downloadidevicerestore-48350d676e9d817c8c8f1af2cd1e0006e1ad9c3b.tar.gz
idevicerestore-48350d676e9d817c8c8f1af2cd1e0006e1ad9c3b.tar.bz2
Initial support for iPhone 16 restore
Diffstat (limited to 'src')
-rw-r--r--src/idevicerestore.c10
-rw-r--r--src/img4.c8
2 files changed, 18 insertions, 0 deletions
diff --git a/src/idevicerestore.c b/src/idevicerestore.c
index 36099d1..2dd7eb8 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 dc21e56..c010ce4 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);
}
}