--- 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");