integrato ;)
iTunesBackupRestore Versione 0.9.1
Codice sorgente e informazioni dettagliate

 
Generale:
 
Questo programma è scritto in C/C++ e fa uso delle librerie MFC per la grafica. E' mia intenzione pubblicare la parte più interessante e principale del programma, ovvero le funzioni di conversione dei backup di iTunes (in C) in modo che queste possano essere riscritte in altri linguaggi e portate su altre piattaforme da programmatori interessati.

Attualmente tuttavia il codice, anche se funzionante, si trova ancora in fase di sistemazione e miglioramento e quindi per il momento non sarà rilasciato.
Quello che (per adesso) è contenuto in questa pagina sono solo le indicazioni "teoriche" per la scansione e conversione dei files di backup di iTunes che ho studiato, seguito e implementato e codificabili quindi in qualsiasi linguaggio.

 
File generati da iTunes:
 
iTunes su sistemi Windows salva i file del backup in questa directory:

C:\Documents and Settings\$NOMEUTENTE\Dati applicazioni\Apple Computer\MobileSync\Backup\$SHA1HASH

Dove $NOMEUTENTE è il nome del vostro utente su Windows e $SHA1HASH è una cartella con nome un hash 40 caratteri (a volte seguito da un - più la data di backup). I file interni a questa cartella si possono dividere in 4 "tipi":
Status.plist è un file xml che indica lo stato del backup presente in questa cartella, generalmente contiene la stringa <key>Backup Success</key> se il backup presente è corretto.
Info.plist è un file xml che contiene informazioni generali sul sistema e sul dispositivo di cui si è effettuato il backup, come la data, il nome dell'iPhone o iPod Touch e la versione di iTunes che ha fatto la sincronizzazione.
Manifest.plist è un file xml che contiene informazioni sull'autenticazione
$SHA1HASH.mdbackup sono tutti i file con le impostazioni salvate da iTunes. Sono i file di questo tipo che saranno elaborati dal programma.

 
Tipo mdbackup:
 
Con questa estensione vengono convertiti tutti i file dell'iPhone su cui iTunes effettua il backup.
Generalmente si possono distinguere 4 tipi di file che vengono convertiti in .mdbackup:
File .plist
File SQLite 3 (.db e .sqlitedb)
File xml (.plist)
Altri file (immagini...)
E questi file non vengono solamente copiati dal dispositivo e salvati con estensione .mdbackup ma subiscono una "conversione". Quello che iTunes fa infatti è aggiungere all'inizio e alla fine del file salvato delle informazioni riguardo al tipo di file originario, il percorso e una stringa di 4 caratteri che io reputo essere la versione del backup (versione che cambia appunto da iTunes 7.x a iTunes 8.0).

Quello che fa il iTunesBackupRestore è infatti ricercare e leggere tutti i file .mdbackup, trovare quelli con le informazioni che si è scelto di ripristinare, leggere la versione del backup e il tipo di file originario e tentare la riconversione e copiarli tramite SSH.

 
Struttura e riconoscimento file mdbackup:
 
Questa è la parte fondamentale del programma. I file .mdbackup come visto racchiudono principalmente 4 tipi di file ed il modo in cui iTunes crea questi file varia dalla versione 7.x alla 8.0.
Il modo migliore per capire come sono strutturati questi file è farne un confronto diretto su dei campioni di ogni tipo:
iTunes 7.x file SQLite 3 iTunes 8.0 file SQLite 3

iTunes 7.x file plist iTunes 8.0 file plist

iTunes 7.x file xml iTunes 8.0 file xml
Ho evidenziato in ciascun screenshot 4 stringhe:
bplist è sempre posta all'inizio del file di backup e può essere utilizzata per identificare il tipo di file, se la stringa è presente allora il file in analisi è un file di impostazioni valido, altrimenti deve essere scartato (immagini...).
La seconda stringa, quella in verde, è anch'essa presente in ciascun file bplist e indica il percorso originario del file all'interno del firmware iPhone. Viene utilizzata dal programma iTunesBackupRestore per trovare i giusti file dal ripristino.
S1.2 o S2.0 sono le stringhe che identificano la versione del backup, S1.2 è per i file di iTunes 7.x e S2.0 per i file di iTunes 8.0. Servirà per stabilire il metodo di riconversione (anche i caratteri di end line e carriage return presenti in posizione 17 e 18 possono essere utilizzati per identificare la versione di iTunes che ha fatto il backup).
Infine un'altra stringa, SQLite format 3, bplist o <?xml indica il tipo del file di origine e l'inizio dei dati originali.
Utilizzando le informazioni evidenziate è possibile trovare tra tutti i file del backup quelli inerenti le impostazioni che si vogliono recuperare e sapere quale algoritmo di riconversione applicare.

 
Lista file e tipo:
 
Di seguito la lista e il tipo dei file che ripristina il programma iTunesBackupRestore con il percorso di origine completo:
Lista chiamate:
File: /private/var/mobile/Library/CallHistory/call_history.db
Tipo: SQLite format 3
Messaggi di testo:
File: /private/var/mobile/Library/SMS/sms.db
Tipo: SQLite format 3
Contatti:
File: /private/var/mobile/Library/AddressBook/AddressBook.sqlitedb - /private/var/mobile/Library/AddressBook/AddressBookImages.sqlitedb
Tipo: SQLite format 3
Calendario:
File: /private/var/mobile/Library/Calendar/Calendar.sqlitedb
Tipo: SQLite format 3
Note:
File: /private/var/mobile/Library/Notes/notes.db
Tipo: SQLite format 3
Impostazioni Safari:
File: /private/var/mobile/Library/Safari/Bookmarks.plist - /private/var/mobile/Library/Safari/History.plist - /private/var/mobile/Library/Safari/SuspendState.plist
Tipo: plist
Preferiti YouTube:
File: /private/var/mobile/Library/YouTube/Bookmarks.plist
Tipo: plist
Impostazioni Mail:
File: /private/var/mobile/Library/Mail/Accounts.plist
Tipo: xml (*)
Impostazioni WiFi:
File: /private/var/preferences/SystemConfiguration/com.apple.network.identification.plist - /private/var/preferences/SystemConfiguration/com.apple.wifi.plist
Tipo: xml
Password WiFi e Mail:
File: /private/var/Keychains/keychain-2.db
Tipo: SQLite format 3
(*) Questo file cambia tipo nel firmware 2.1 e causa il kwnon bug della versione 0.9.1.

 
Riconversione:
 
La riconversione dei file nel loro formato di origine può essere fatta semplicemente "tagliando" le informazioni in eccesso all'inizio e alla fine di ogni file .mdbackup. E' importante tagliare correttamente anche le informazioni in eccesso alla fine di ogni file altrimenti al primo backup iTunes danneggerà ogni file mal convertito e lo renderà inutilizzabile al ripristino successivo!
I "tagli" possono variare in base alla versione di iTunes che li ha generati e al tipo del file di origine. Quello che ho ricavato confrontando campioni file di ogni tipo e di ogni versione prima e dopo il backup sono le seguenti tabelle:
SQLite format 3
Inizio data
Fine data
iTunes 7.x
{'S','Q','L','i','t','e',' ','f','o','r','m','a','t',' ','3'}
{0x00,0x08,0x00,0x11,0x00,0x16,0x00,0x1E,0x00}
iTunes 8.0
{'S','Q','L','i','t','e',' ','f','o','r','m','a','t',' ','3'}
{0x00,0x08,0x00,0x13,0x00,0x18,0x00,0x20,0x00}
Inteso come Inizio data INCLUSO e Fine data ESCLUSO.
pList
Inizio data
Fine data
iTunes 7.x
{'p','l','i','s','t'} (*)
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01}
iTunes 8.0
{'p','l','i','s','t'} (*)
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01}
Inteso come Inizio data INCLUSO e Fine data INCLUSO. (*) Per inizio data si intende la sequenza evidenziata negli screenshot precedenti {'p','l','i','s','t'} numero 4 , non la numero 1!
Xml
Inizio data
Fine data
iTunes 7.x
{'<','?','x','m','l'}
{'<','/','p','l','i','s','t','>'}
iTunes 8.0
{'<','?','x','m','l'}
{'<','/','p','l','i','s','t','>'}
Inteso come Inizio data INCLUSO e Fine data INCLUSO.

Ricapitolando i passi completi per la corretta riconversione sono:
- Identificazione dei file corretti attraverso i primi 6 caratteri
- Identificazione del percoso di origine
- Identificazione della versione di iTunes che ha generato il file
- Applicazione del metodo di riconversione adatto per riportare il file come in origine.

Ed infine la sincronizzazione sul dispositivo.

 
Conclusione:
 
La parte tecnica sulla conversione finisce qui, indipendente dal linguaggio di programmaziome e implementabile su qualsiasi sistema. Appena terminerò di sistemare i sorgenti in C che applicano questi algoritmi li pubblicherò volentieri di seguito a questa pagina.
Se qualcuno non trova chiara questa documentazione, vuole informazioni più dettagliate o cerca collaborazione per portare il programma su altre piattaforme può contattarmi tranquillamente.

 
iTunesBackupRestore librerie e file utilizzati:
 
Trovo giusto nominare e linkare il lavoro di altre persone che ho utilizzato nello sviluppo di questo programma:
- per la visualizzazione di immagini GIF nel programma
- per la ridirezione dell'output da console
- per la connessione e l'invio di file tramite SSH

Script Execution Time: 0.013094 seconds - Visite: 667936
Copyright © 2007-2018 Suondmao v0.1.5-1