headermask image

header image

Analizzatore spettrografico di file

A seguito di uno scambio di idee con gli amici di CFItaly, mi è venuta l’idea di provare a giocare un po’ con l’analisi statistica del contenuto di un file generico. Non è una idea nuova (rif. Denis Frati), certamente no, ma al solito ogni tanto mi piace di curiosare in cose per me nuove.

Il risultato è un programmino semplicissimo, che ho chiamato Prisma.

L’idea è questa: in ogni tipologia di file la presenza di certi valori di byte non è casuale, ma è in qualche modo legata al contenuto del file stesso. Per cui un file di testo avrà una particolare distribuzione dei valori dei byte, mentre una immagine o un file eseguibile ne avranno una differente, anche in funzione della codifica. Analizzando le frequenze con cui ogni valore di byte compare nel file si potrebbero individuare anomalie nel contenuto del file stesso, come ad esempio un testo nascosto in un file audio, oppure più semplicemente file camuffati: immagini spacciate come file compressi e simili.

Funziona in questo modo: si forniscono in standard input i dati da analizzare, per esempio un file, e in uscita si hanno tre differenti tipi di output a scelta. Il primo, banale, è un file CSV con i dati di frequenza complessivi di tutti i dati forniti in ingresso. E’ utilizzabile per fare un grafico con OpenOffice Calc e simili.

L’altro output è grafico, sotto forma di immagine PNG, in due varianti: la più semplice mostra uno spettrogramma complessivo per tutti i dati in input, ed è semplicemente una differente rappresentazione dei dati forniti anche in CSV, tanto che si possono chiedere entrambi. La seconda opzione è più intrigante: produce una immagine larga 256 pixel in cui ogni riga è lo spettrogramma di un blocco di dati in input, e la dimensione del blocco è configurabile. In pratica si ha un colpo d’occhio sul contenuto del file, reso in forma grafica.

Spettro di un file di testo
Questo è lo spettro di un file di testo (la licenza GNU GPL per la precisione).

Spettro di un file Wave
Questo è quello che si ottiene usando un file Wave.

Spettrogramma di un file Wave
Questo invece è lo spettrogramma dello stesso file (clicca sull’immagine per la dimensione reale).

Il primo file è stato ottenuto col comando:


$ cat COPYING | prisma -p asciitext.png

Lo spettrogramma del file Wave invece è stato ottenuto col comando:


$ cat test.wav | prisma -p wave-big.png -b 100000

Per chi è interessato, il programma è rilasciato sotto licenza GNU GPLv2, ed il tarball dei sorgenti con il makefile per compilare ed installare il tutto, con tanto di pagine man in italiano ed inglese è scaricabile qui. Richiede le librerie e gli header di ImageMagick per la compilazione

Sono ovviamente graditi commenti e suggerimenti per il miglioramento.

Se ti piace quello che scrivo registrati al feed RSS

3 Comments so far (Add 1 more)

  1. Affascinante. Una volta affinato lo strumento, servirà un’ampia base statistica per la taratura, dico bene? Come conti di far progredire il progetto?

    1. Rebus on 30 Maggio 2008 at 23:51
  2. Mario complimenti davvero….dovremmo testarla tutti…se la cosa ha qualche
    rilevanza dovresti pubblicarlo su souceforge….e da quello che ho capito
    potrebbe servire anche per popolare un database di campioni di file per
    tipologia. Quindi un’eventuale evoluzione sarebbe poter fare una query di un
    tipo di file e avere in output il suo spettro campione, dopodichè ad occhio
    confrontarlo con lo spettro generato da Prisma e “insospettirsi” sulla vera
    natura del file in analisi….bello!

    ciao
    PS: al convegno a Roma ne parli he? sennò te lo tiro io dalla giacchetta :-D

    2. Nanni Bassetti on 31 Maggio 2008 at 08:05
  3. @Tutti
    Per ora è soltanto un puro esercizio di programmazione. Considerando che vengo dal campo dell’audio, e lì cose come queste sono all’ordine del giorno, mi sembrava di vedere un possibile parallelo fra i due mondi.
    Quello che rende tutto più difficile è l’immensa variabilità che ci si trova ad affrontare quando si parla di statistica, avete presente, “Lies, damn lies and statistics”.
    Sto immaginando: probabilmente gli algoritmi per l’analisi potrebbero essere derivati da quelli per la speech recognition, con tutte le conseguenze del caso (falsi positivi e falsi negativi), non dimenticando che nel riconoscimento vocale ci si aiuta con un dizionario, qui non credo si possa fare.

    @Rebus
    Al momento non c’è nessun reale progetto. E’ appunto un semplice esercizio di curiosità.

    @Nanni
    Ne avevo l’intenzione, di parlarne, ma solo come possibilità *molto futura*…

    3. Mario Pascucci on 3 Giugno 2008 at 13:02

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*
  • Licenza

    Creative Commons License
    Questo sito e tutti i suoi contenuti sono pubblicati sotto una Licenza Creative Commons, quando non diversamente specificato.

    Per altri usi, basta contattarmi.

  • Argomenti

  • Archivio mensile

  • Spazio offerto da

  • Alzate d'ingegno

    D: invece di usare il solito software pirata, hai provato OpenOffice?

    R: ho provato più volte a scaricarlo da Emule, ma ha sempre problemi.

  • Amici

  • Buonumore

  • Da leggere

  • Sicurezza e computer

  • Adesivi