Home Area Tecnica Programmi di utilità Grep e Strings due giganti di Linux

Donazioni

Ti è piaciuto questo articolo? Fai una donazione di all'autore affinché ne scriva altri!
[suggerimento: offri 1€ o 2€ - PayPal trattiene circa 0.40€]

Servizi

Elenco dei Professionisti e Consulenti ICT
L'avvocato risponde
Libri Consigliati
Cerco e Offro Lavoro ICT

Sponsor

GALLACCI.COM

I più attivi

Dati e punteggi dell'ultimo anno

Rodolfo Giometti Rodolfo Giometti
121 articoli
32.059 punti totali
Calogero Bonasia Calogero Bonasia
87 articoli
13.275 punti totali
Giovanna Casamassima Giovanna Casamassima
16 articoli
0.789 punti totali
Nanni Bassetti Nanni Bassetti
15 articoli
0.507 punti totali
Luigi Carbone Luigi Carbone
7 articoli
0.198 punti totali

I più votati

  1. Rodolfo Giometti
    - 100%
  2. Calogero Bonasia
    - 100%
  3. Luigi Carbone
    - 100%
  4. Nanni Bassetti
    - 100%

Web Partner

CFI - Computer Forensics Italy
Better Software 2010
Area Networking
ILIT match 2010
TechnologyBIZ
WorkCity
spiare.com

Ci hanno visitato

Oggi:31
Ieri:957
Totali (14/04/09):190230

I nostri numeri

Articoli pubblicati: 337
Iscritti al portale: 258
Iscritti all'Elenco: 125
Iscritti ML Discussioni: 222
Iscritti ML Articoli: 14
Iscritti ML Lavoro: 106
Grep e Strings due giganti di Linux Stampa E-mail
(1 voto, media 5.00 di 5)
Area Tecnica - Programmi di utilità
Scritto da Nanni Bassetti   

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.

 

Aggiungi commento


Codice di sicurezza
Aggiorna

 

PageRank Checking Icon

Settembre 2010
D L M M G V S
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 1 2

Sondaggi

busyCaricamento Sondaggio...

Ultimi Commenti