Ok, ho provato a riscrivere la patch.
Prima di applicarla devi ripristinare i sorgenti. Se li hai presi da github, dall'albero dei sorgenti dai:
e ricompili.
Codice: Seleziona tutto
--- Makefile 2021-01-15 11:47:35.900234278 +0100
+++ Makefile.new 2021-01-14 17:25:45.907953606 +0100
@@ -3,7 +3,7 @@
gcc -std=gnu99 -c -o $@ $<
spirit: spirit.o afc.o
- gcc -o spirit spirit.o afc.o -limobiledevice -lplist -lcrypto
+ gcc -o spirit spirit.o afc.o -limobiledevice-1.0 -lplist-2.0 -lcrypto
clean:
rm -rf spirit *.o *.dSYM
--- spirit.c 2021-01-15 11:47:43.003245704 +0100
+++ spirit.c.new1 2021-01-15 11:47:15.377201283 +0100
@@ -141,7 +141,7 @@
fprintf(stderr, "ERROR: Cannot create lockdownd client\n");
}
- uint16_t port = 0;
+ lockdownd_service_descriptor_t port = 0;
afc_client_t afc = NULL;
printf("INFO: Starting AFC service\n");
@@ -221,32 +221,32 @@
}
static void start_restore(mobilebackup_client_t backup, plist_t files) {
- char* uuid = NULL;
- idevice_get_uuid(device, &uuid);
+ char* udid = NULL;
+ idevice_get_udid(device, &udid);
printf("DEBUG: start_restore\n");
plist_t m1dict = plist_new_dict();
- plist_dict_insert_item(m1dict, "Version", plist_new_string("6.2"));
- plist_dict_insert_item(m1dict, "DeviceId", plist_new_string(uuid));
- plist_dict_insert_item(m1dict, "Applications", plist_new_dict());
- plist_dict_insert_item(m1dict, "Files", files);
+ plist_dict_set_item(m1dict, "Version", plist_new_string("6.2"));
+ plist_dict_set_item(m1dict, "DeviceId", plist_new_string(udid));
+ plist_dict_set_item(m1dict, "Applications", plist_new_dict());
+ plist_dict_set_item(m1dict, "Files", files);
uint32_t m1size = 0;
char* m1data = NULL;
plist_to_bin(m1dict, &m1data, &m1size);
plist_t manifest = plist_new_dict();
- plist_dict_insert_item(manifest, "Version", plist_new_string("2.0"));
- plist_dict_insert_item(manifest, "AuthSignature", plist_new_data(sha1_of_data(m1data, m1size), 20));
- plist_dict_insert_item(manifest, "IsEncrypted", plist_new_uint(0));
- plist_dict_insert_item(manifest, "Data", plist_new_data(m1data, m1size));
+ plist_dict_set_item(manifest, "Version", plist_new_string("2.0"));
+ plist_dict_set_item(manifest, "AuthSignature", plist_new_data(sha1_of_data(m1data, m1size), 20));
+ plist_dict_set_item(manifest, "IsEncrypted", plist_new_uint(0));
+ plist_dict_set_item(manifest, "Data", plist_new_data(m1data, m1size));
plist_t mdict = plist_new_dict();
- plist_dict_insert_item(mdict, "BackupMessageTypeKey", plist_new_string("kBackupMessageRestoreRequest"));
- plist_dict_insert_item(mdict, "BackupNotifySpringBoard", plist_new_bool(1));
- plist_dict_insert_item(mdict, "BackupProtocolVersion", plist_new_string("3.0"));
- plist_dict_insert_item(mdict, "BackupPreserveCameraRoll", plist_new_bool(1));
- plist_dict_insert_item(mdict, "BackupPreserveSettings", plist_new_bool(1));
- plist_dict_insert_item(mdict, "BackupManifestKey", manifest);
+ plist_dict_set_item(mdict, "BackupMessageTypeKey", plist_new_string("kBackupMessageRestoreRequest"));
+ plist_dict_set_item(mdict, "BackupNotifySpringBoard", plist_new_bool(1));
+ plist_dict_set_item(mdict, "BackupProtocolVersion", plist_new_string("3.0"));
+ plist_dict_set_item(mdict, "BackupPreserveCameraRoll", plist_new_bool(1));
+ plist_dict_set_item(mdict, "BackupPreserveSettings", plist_new_bool(1));
+ plist_dict_set_item(mdict, "BackupManifestKey", manifest);
plist_t message = plist_new_array();
plist_array_append_item(message, plist_new_string("DLMessageProcessMessage"));
@@ -260,11 +260,11 @@
char* manifestkey = data_to_hex(sha1_of_data(pathdata, strlen(path)), 20);
printf("DEBUG: add_file\n");
plist_t dict = plist_new_dict();
- plist_dict_insert_item(dict, "Domain", plist_new_string(domain));
- plist_dict_insert_item(dict, "Path", plist_new_string(path));
- plist_dict_insert_item(dict, "Greylist", plist_new_bool(0));
- plist_dict_insert_item(dict, "Version", plist_new_string("3.0"));
- plist_dict_insert_item(dict, "Data", plist_new_data(crap, crap_size));
+ plist_dict_set_item(dict, "Domain", plist_new_string(domain));
+ plist_dict_set_item(dict, "Path", plist_new_string(path));
+ plist_dict_set_item(dict, "Greylist", plist_new_bool(0));
+ plist_dict_set_item(dict, "Version", plist_new_string("3.0"));
+ plist_dict_set_item(dict, "Data", plist_new_data(crap, crap_size));
printf("DEBUG: Data size %llu:\n%s\n", crap_size, data_to_hex(crap, crap_size));
char* datahash = malloc(20);
@@ -277,22 +277,22 @@
SHA1_Final(datahash, &ctx);
plist_t manifest = plist_new_dict();
- plist_dict_insert_item(manifest, "DataHash", plist_new_data(datahash, 20));
- plist_dict_insert_item(manifest, "Domain", plist_new_string(domain));
- plist_dict_insert_item(manifest, "FileLength", plist_new_uint(crap_size));
- plist_dict_insert_item(manifest, "Group ID", plist_new_uint(gid));
- plist_dict_insert_item(manifest, "User ID", plist_new_uint(uid));
- plist_dict_insert_item(manifest, "Mode", plist_new_uint(mode));
- plist_dict_insert_item(manifest, "ModificationTime", plist_new_date(2020964986UL, 0));
- plist_dict_insert_item(files, manifestkey, manifest);
+ plist_dict_set_item(manifest, "DataHash", plist_new_data(datahash, 20));
+ plist_dict_set_item(manifest, "Domain", plist_new_string(domain));
+ plist_dict_set_item(manifest, "FileLength", plist_new_uint(crap_size));
+ plist_dict_set_item(manifest, "Group ID", plist_new_uint(gid));
+ plist_dict_set_item(manifest, "User ID", plist_new_uint(uid));
+ plist_dict_set_item(manifest, "Mode", plist_new_uint(mode));
+ plist_dict_set_item(manifest, "ModificationTime", plist_new_date(2020964986UL, 0));
+ plist_dict_set_item(files, manifestkey, manifest);
plist_t info = plist_new_dict();
char* templateo = (char*) malloc(0x20);
snprintf(templateo, 0x20, "/tmp/stuff.%06d", ++some_unique);
- plist_dict_insert_item(info, "DLFileDest", plist_new_string(templateo));
- plist_dict_insert_item(info, "Path", plist_new_string(path));
- plist_dict_insert_item(info, "Version", plist_new_string("3.0"));
- plist_dict_insert_item(info, "Crap", plist_new_data(crap, crap_size));
+ plist_dict_set_item(info, "DLFileDest", plist_new_string(templateo));
+ plist_dict_set_item(info, "Path", plist_new_string(path));
+ plist_dict_set_item(info, "Version", plist_new_string("3.0"));
+ plist_dict_set_item(info, "Crap", plist_new_data(crap, crap_size));
return info;
}
@@ -307,11 +307,11 @@
plist_get_data_val(plist_dict_get_item(info, "Crap"), &crap, &crap_size);
plist_dict_remove_item(info, "Crap");
- plist_dict_insert_item(info, "DLFileAttributesKey", plist_new_dict());
- plist_dict_insert_item(info, "DLFileSource", plist_new_string(dest));
- plist_dict_insert_item(info, "DLFileIsEncrypted", plist_new_uint(0));
- plist_dict_insert_item(info, "DLFileOffsetKey", plist_new_uint(0));
- plist_dict_insert_item(info, "DLFileStatusKey", plist_new_uint(2));
+ plist_dict_set_item(info, "DLFileAttributesKey", plist_new_dict());
+ plist_dict_set_item(info, "DLFileSource", plist_new_string(dest));
+ plist_dict_set_item(info, "DLFileIsEncrypted", plist_new_uint(0));
+ plist_dict_set_item(info, "DLFileOffsetKey", plist_new_uint(0));
+ plist_dict_set_item(info, "DLFileStatusKey", plist_new_uint(2));
plist_t message = plist_new_array();
plist_array_append_item(message, plist_new_string("DLSendFile"));
@@ -332,7 +332,7 @@
fprintf(stderr, "ERROR: Cannot create lockdownd client\n");
}
- uint16_t port = 0;
+ lockdownd_service_descriptor_t port = 0;
mobilebackup_client_t backup = NULL;
printf("INFO: Starting MobileBackup service\n");
@@ -371,7 +371,7 @@
}
int main(int argc, char** argv) {
- char uuid[41];
+ char udid[41];
int count = 0;
char **list = NULL;
idevice_error_t device_error = 0;
@@ -383,12 +383,12 @@
return -1;
}
- memset(uuid, '\0', 41);
- memcpy(uuid, list[0], 40);
+ memset(udid, '\0', 41);
+ memcpy(udid, list[0], 40);
idevice_device_list_free(list);
printf("INFO: Opening device\n");
- device_error = idevice_new(&device, uuid);
+ device_error = idevice_new(&device, udid);
if(device_error != IDEVICE_E_SUCCESS) {
if(device_error == IDEVICE_E_NO_DEVICE) {
fprintf(stderr, "ERROR: No device found\n");
. Se ti esplode il device non cercarmi