Io,invece, volevo scoprire il formato dei file di backup .arc (quelli che si creano con l'applicazione Memory Card): infatti più di una volta capita di voler estrarre solo alcuni file o comunque una parte dell'archivio.
Inanzitutto ho aperto il file con un hex editor e ho visto i vari percorsi. Ho immaginato che tra i percorsi ci sia il blocco del contenuto dei file (infatti poi si è rivelato cosi). Il problema che non è semplicemente una copia del file, bensi sono byte "a caso", si poteva pensare. Invece no! Ho pensato che il contenuto sia zipppato: è proprio cosi! Allora ho provato a zippare con python una lettera a vedere cosa mi da in output ("a".encode('zlib')). Mi da una stringa molto più lunga di un solo carattere e, da notare, questa stringa contiene all'inizio dei byte che identificano la compressione e sono sempre quelli. Cosi gli ho cercati nel file: esistono! Allora ho provato a estrarre quella parte di byte " a mano " e a decomprimerli: ....tata! Il file txt sono riuscito a leggerlo!
Ora però dovevo scoprire come fare a capire bene l'inizio, la fine del blocco dati, la lunghezza del percorso ecc...Con un po di pazienza e intuito ho trovato il significato di svariati byte e stringhe di byte.
Cosi ecco che ho fatto una piccola libreria...funziona! E ho adirittura provato ad estrarre tutto con successo.
Descrizione formato file
Dovrebbe andare bene per tutti i 2nd edition: se qualcuno prova su vari device sarei contento...anche su 3rd!
INIZIO
Primo byte (sempre \x00 ???)
Sucessivi 4 byte (long)-> Totale files
Dopo altri 10 byte, un byte che dichiara la lunghezza del nome del file (primo)
Alla fine del nome del file e dopo altri 10 byte, abbiamo 4 byte che indicano la dimensione scompressa e dopo altri 4 byte che indicano la dimensione compressa. La dimensione compressa sono i byte da leggere subito dopo e decomprimere. Alla fine del "blocco dati" si ricomincia con il byte della lunghezza del nome del file e via cosi fino alla fine, n volte dove n è il numero dei files, all'inizio.
Verso la fine del file arc (6 bytes prima) c'è una sigla che non codifica niente ma indica il modello su cui il backup si può applicare (immagino)
Su N70 è RM8405 (rm84 è il modello che si vede con *#0000#).
Ecco qui
P.S: a scovare questo non ci ho messo nemmeno tanto, praticamente meno di una giornata! Anche perchè in questo periodo sono spesso via...
Allego la libreria in python! Si può usare sia sul telefono che sul pc (dove ho fatto le prove)
Praticamente ha una classe arc.
esempio di uso:
import arc_file
a=arc_file.arc("E:\\Backup\\Backup.arc")
#Prima di fare tutte le operazioni bisogna fare load!
a.load() #Carica tutti i file
#Tutte azzerate se non si chiama load()
a.filelist #Lista dei files (lista unicode)
a.numfiles #Numero files
a.loaded #Interna: 1 se già chiamata load()
a.data #Dizionario: Nome File: [posizione blocco dati nel file arc (assoluta),lunghezza blocco dati, dimensione blocco dati scompressa]
a.real_size #Totale dimensione scompressa
a.filename #nome file arc
a.close() #Chiude il file
a.get(n) #Ritorna il contenuto scompresso di un file dell'archivio
''Codice get()''
s.file.seek(s.data[n][0])
return s.file.read(s.data[n][1]).decode('zlib')
a.file #file object arc
Download file
-
arc_file.zip (1,13K)
Numero di downloads: 71
Messaggio modificato da memoryn70 il 23 giugno 2009 - 09:25

Aiuto
















Pubblicità