Il tempo libero serve anche a sperimentare e quando si ha la passione per la computer forensics, son dolori…
Tramite Nigilant32 (presente nella parte Live di CAINE 1.5) faccio l’immagine della Ram del mio PC, mentre è in uso, e la salvo sul file RAM.IMG.
ram.img – dump della mia ram 1.3Gb
Tramite editor esadecimale, vedo che tra le tante stringhe, contenute nel file, ne prendo una a casaccio per fare il mio test, la stringa è “awatarami“.
Cerco con strings e il parametro -t d (che mi genera anche l’offset in decimale) ottenendo:
strings -t d ram.img | less
33593Â Skype z awatarami
Quindi segno l’offset come: 33593
Poi cerco con grep ed i parametri
-i ignora il maiuscolo/minuscolo;
-a tratta il file binario come se fosse testuale;
-b stampa il byte offset;
-o Mostra solo la parte di linea che coincide con la stringa cercata;
grep -iabo awatarami ram.img
33593:awatarami
Passo all’uso di xxd (editor esadecimale da riga di comando) e con -s lo faccio partire dall’offset trovato:
xxd -s 33593 ram.img | less
08339: 2053 6b79 7065 207a 2061 7761 7461 7261Â Â Skype z awatara
08349: 6d69 204b 6c6f 6e69 6573 2e3c 6272 2f3e mi Klonies.
08359: 3c61 2068 7265 663d 2273 6b79 7065 3a3fÂ
08389: 5374 77c3 b372 7a20 4b6c 6f6e 6965 3c2f Stw..rz Klonie08399: 613e 0050 6f6b 61c5 bc20 c59b 7769 6174 a>.Poka.. ..wiat
083a9: 7520 7377 c3b3 6a20 5765 654d 6565 2e3c u sw..j WeeMee.<
Ma su questi due strumenti NON ho finito di lavorarci, quindi, armato di cronometro ho fatto questo esperimento:
grep -iaob mustafa /cygdrive/c/immaginidd/barbuto.dd
tempo: 52 secondi e 50 centesimi – offset corretto 113917010
$ strings -t d /cygdrive/c/immaginidd/barbuto.dd | grep -i mustafa
113917010 tuo fratello Mustafa
tempo: 29 secondi e 84 centesimi – offset corretto 113917010
Insomma strings in pipe con grep è molto più veloce (il 51% in più).
Una spiegazione c’è, che fa capire la potenza dell’operatore “pipe” (|) e di Linux.
Le ragioni della lentezza sono molteplici, ma una su tutte:
strings ha un algoritmo infinitamente più semplice e veloce di grep, e la quantità di dati che estrae è esigua, per cui il secondo grep, il cui input è generato da strings, ha molto meno input da esaminare.
Per avere conferma di ciò, basta mandare l’output di strings su un file, e vedere che è immensamente più piccolo del file intero su cui strings ha lavorato.
inoltre ci sono altre ragioni, fra cui il fatto che grep è costruito per cercare in file di testo, suddiviso in righe, e con un set di caratteri ben definito, e passsandogli un binario, come appunto un’immagine dd, non è che lo aiuti molto.
Strings invece produce un output molto vicino a quello su cui grep offre le prestazioni migliori.
In sostanza, strings estrae le stringhe da un file binario e passa il suo output in pipe a grep, che opererà la ricerca della parola “mustafa”, su un output testuale e ridotto, sfruttando al massimo la sua potenza.
La stessa sperimentazione la si può fare usando queste immagini.
Lascia un commento