Newsgroup: it.comp.os.linux.sys
Titolo: [Un po' OT] Signature dei files

Mi chiedevo, esiste uno strumento per ricavare la signature e offset di un 
file?
per esempio il comando file, come fa a capire il tipo del file che gli diamo 
in pasto? Non va a testare la signature?
Ve lo chiedo perche' hodei programmi di recovery per recuperare files da 
dischi rotti, che accedendo in modalita' raw hanno bisogno delle signature 
per poter poi riassemblare correttamente i dati binari ottenuti e ricomporre 
il file.
Questi strumenti conoscono gia' le signature di moltissimi files comuni 
(bmp, tiff, zip e mille altri ancora), ed in effetti si riescono a fare 
miracoli credetemi, il problema e' se devi recuperare files per i quali non 
sono note le signature. 

 diamo in pasto? Non va a testare la signature? 
/etc/magic (man magic) [non sto scherzando]

 in pasto? Non va a testare la signature?
It'a a kind of magic...
-- 
Chaos A.D.		|	Raging crowd
Tanks on the streets	|	Burning cars
Confronting police	|	Bloodshed starts
Bleeding the Plebs	|	Who'll be alive?

 /etc/magic (man magic) [non sto scherzando]
Ok vedo che hai capito cosa mi serve.
Solo che io devo fare il contrario!
Praticamente in /etc/magic c'e' l'elenco delle signature e degli offset con 
il corrispondente tipo file, cosi' il comando file confrontando l'elenco sa 
di che file stiamo parlando, io pero' la signature e' quello che voglio 
ricavare, quindi vorrei che il comando file mi tiri fuori la signature senza 
andare a spulciare l'elenco.
Ciao. 

 andare a spulciare l'elenco.
Fammi capire: ti serve qualcosa a cui dare in pasto N file che tu sai 
essere dello stesso tipo, e che trovi quali sono (e dove stanno) le 
parti in comune a tutti, in modo da poterne ricavare una firma per 
riconoscere i file di quel tipo?
Nel qual caso potresti fare così:
     od -c -w1 nomefile1 | head -2048 | sort > x1
     od -c -w1 nomefile2 | head -2048 | sort > x2
     comm -1 -2 x1 x2
In pratica: fai un dump di ciascun file, un byte per riga, prendi le 
prime 2048 righe (dunque i primi 2048 byte), le ordini e le salvi a 
parte. Ogni riga include anche l'offset del byte.
Poi usi comm per farti dare le sole righe in comune tra i due file, e et 
voilà: hai l'elenco dei byte tra i primi 2048 nei due file che si 
trovano allo stesso offset e che hanno lo stesso valore.
Se poi vuoi confrontare un terzo file, basta fare il dump anche di 
quello e confrontarlo (con comm) con l'output di comm tra i file 
precedenti, e così via. Del tipo
     od -c -w1 nomefile1 | head -2048 | sort > x1
     od -c -w1 nomefile2 | head -2048 | sort > x2
     od -c -w1 nomefile3 | head -2048 | sort > x3
     comm -1 -2 x1 x2 > z1
     comm -1 -2 z1 x3
Chiaro che tutto ciò è poi solo un aiutino a te che, usando la testa, 
devi scoprire cosa è il caso di usare come signature. Può anche darsi 
che 2K siano insufficienti, e che occorra allargare il campo di ricerca.
Ovviamente, se il formato di cui stai cercando una firma è documentato, 
è decisamente il caso di leggersi prima la documentazione...
-- 
  (\_/)   |   \    \  | ___|_   |_   |   /\/\  ianezz a casa sua... :-)
  (^.^)   |  _ \  | \ | _|     /    /   {^.^ } Verba volant, scripta
/(")(") _|_/  _\_|  _|____|____|____| (")(")\ manent, data corrupted

 decisamente il caso di leggersi prima la documentazione...
Il tuo e' un ottimo suggerimento che mettero' subito in atto.
Purtroppo la firma di tali file non e' documentato, sono archivi di un 
programma di contabilita'
Ciao e grazie