Vuoi vedere il testo all’interno di un file binario o di dati? Il comando Linux strings estrae quei frammenti di testo, chiamati “stringhe”, per te.
Linux è pieno di comandi che possono sembrare soluzioni alla ricerca di problemi. Il comando delle stringhe rientra sicuramente in quel campo. Qual è il suo scopo? C’è un punto a un comando che elenca le stringhe stampabili da un file binario?
Facciamo un passo indietro. I file binari, come i file di programma, possono contenere stringhe di testo leggibile dall’uomo. Ma come fai a vederli? Se usi cat o meno, probabilmente ti ritroverai con una finestra di terminale bloccata. I programmi progettati per funzionare con file di testo non funzionano bene se vengono inseriti caratteri non stampabili.
La maggior parte dei byte all’interno di un file binario non è leggibile dall’uomo e non può essere stampata nella finestra del terminale in un modo che abbia senso. Non ci sono caratteri o simboli standard per rappresentare valori binari che non corrispondono a caratteri alfanumerici, punteggiatura o spazi bianchi. Collettivamente, questi sono noti come caratteri “stampabili”. Gli altri sono caratteri “non stampabili”.
Quindi, provare a visualizzare o cercare stringhe di testo in un file binario o di dati è un problema. Ed è qui che entrano in gioco le stringhe. Estrae stringhe di caratteri stampabili da file in modo che altri comandi possano utilizzare le stringhe senza dover fare i conti con caratteri non stampabili.
Sommario:
Utilizzando le stringhe Command
Non c’è niente di complicato nel comando strings e il suo utilizzo di base è molto semplice. Forniamo il nome del file in cui desideriamo che le stringhe cerchino nella riga di comando.
Qui, useremo stringhe su un file binario, un file eseguibile, chiamato “jibber”. Digitiamo stringhe, uno spazio, “jibber” e quindi premere Invio.
strings jibber
Le stringhe vengono estratte dal file ed elencate nella finestra del terminale.
Impostazione della lunghezza minima della stringa
Per impostazione predefinita, le stringhe cercheranno stringhe di quattro caratteri o più. Per impostare una lunghezza minima più lunga o più corta, utilizzare l’opzione -n (lunghezza minima).
Nota che minore è la lunghezza minima, maggiori sono le possibilità di vedere più spazzatura.
Alcuni valori binari hanno lo stesso valore numerico del valore che rappresenta un carattere stampabile. Se due di questi valori numerici si trovano uno accanto all’altro nel file e si specifica una lunghezza minima di due, quei byte verranno riportati come se fossero una stringa.
Per chiedere alle stringhe di utilizzare due come lunghezza minima, utilizzare il seguente comando.
strings -n 2 jibber
Ora abbiamo stringhe di due lettere incluse nei risultati. Notare che gli spazi vengono conteggiati come caratteri stampabili.
Stringhe di tubazioni Through Less
A causa della lunghezza dell’output delle stringhe, lo faremo passare attraverso less. Possiamo quindi scorrere il file cercando il testo di interesse.
strings jibber | less
L’elenco viene ora presentato per noi in meno, con la parte superiore dell’elenco visualizzata per prima.
Utilizzo di stringhe con file oggetto
In genere, i file del codice sorgente del programma vengono compilati in file oggetto. Questi sono collegati con i file di libreria per creare un file eseguibile binario. Abbiamo il file oggetto jibber a portata di mano, quindi diamo un’occhiata all’interno di quel file. Notare l’estensione del file “.o”.
jibber.o | less
La prima serie di stringhe viene inserita nella colonna otto se sono più lunghe di otto caratteri. Se sono stati inseriti, un carattere “H” è nella colonna nove. È possibile riconoscere queste stringhe come istruzioni SQL.
Lo scorrimento dell’output rivela che questa formattazione non viene utilizzata in tutto il file.
È interessante vedere le differenze nelle stringhe di testo tra il file oggetto e l’eseguibile finito.
Ricerca in aree specifiche del file
I programmi compilati hanno diverse aree al loro interno che vengono utilizzate per memorizzare il testo. Per impostazione predefinita, le stringhe eseguono la ricerca nell’intero file alla ricerca di testo. È come se avessi usato l’opzione -a (all). Per fare in modo che le stringhe cerchino solo nelle sezioni di dati caricate e inizializzate nel file, utilizzare l’opzione -d (dati).
strings -d jibber | less
A meno che tu non abbia una buona ragione per farlo, potresti anche utilizzare l’impostazione predefinita e cercare l’intero file.
Stampa dell’offset delle corde
Possiamo fare in modo che le stringhe stampino l’offset dall’inizio del file in cui si trova ciascuna stringa. A tale scopo, utilizzare l’opzione -o (offset).
strings -o parse_phrases | less
L’offset viene fornito Octal.
Per visualizzare l’offset in una base numerica diversa, ad esempio decimale o esadecimale, utilizzare l’opzione -t (radice). L’opzione radix deve essere seguita da d (decimale), X (esadecimale) o o (ottale). Usare -to è lo stesso che usare -o.
strings -t d parse_phrases | less
Gli offset vengono ora stampati in decimale.
strings -t x parse_phrases | less
Gli offset vengono ora stampati in esadecimale.
Compresi gli spazi bianchi
stringhe considera i caratteri di tabulazione e spazio come parte delle stringhe che trova. Altri caratteri di spazio, come i ritorni a capo e i ritorni a capo, non vengono trattati come se facessero parte delle stringhe. L’opzione -w (spazi bianchi) fa in modo che le stringhe trattino tutti i caratteri degli spazi come se fossero parti della stringa.
strings -w add_data | less
Possiamo vedere la riga vuota nell’output, che è il risultato del ritorno a capo (invisibile) e dei caratteri di nuova riga alla fine della seconda riga.
Non siamo limitati ai file
Possiamo usare stringhe con tutto ciò che è, o può produrre, un flusso di byte.
Con questo comando possiamo esaminare il file memoria ad accesso casuale (RAM) del nostro computer.
Dobbiamo usare sudo perché stiamo accedendo a / dev / mem. Questo è un file di dispositivo a caratteri che contiene un’immagine della memoria principale del tuo computer.
sudo strings /dev/mem | less
L’elenco non è l’intero contenuto della tua RAM. Sono solo le stringhe che possono essere estratte da esso.
Ricerca in più file contemporaneamente
I caratteri jolly possono essere utilizzati per selezionare gruppi di file da cercare. Il carattere * rappresenta più caratteri e il? carattere rappresenta ogni singolo carattere. Puoi anche scegliere di fornire molti nomi di file sulla riga di comando.
Useremo un carattere jolly e cercheremo in tutti i file eseguibili nella directory / bin. Poiché l’elenco conterrà i risultati di molti file, utilizzeremo l’opzione -f (nome file). Questo stamperà il nome del file all’inizio di ogni riga. Possiamo quindi vedere in quale file è stata trovata ciascuna stringa.
Stiamo trasmettendo i risultati grepe cercando le stringhe che contengono la parola “Copyright”.
strings -f /bin/* | grep Copyright
Otteniamo un elenco preciso delle dichiarazioni di copyright per ogni file nella directory / bin, con il nome del file all’inizio di ogni riga.
stringhe Unraveled
Non c’è mistero per le stringhe; è un tipico comando Linux. Fa qualcosa di molto specifico e lo fa molto bene.
È un altro degli ingranaggi di Linux e prende vita quando funziona con altri comandi. Quando vedi come può stare tra i file binari e altri strumenti come grep, inizi ad apprezzare la funzionalità di questo comando leggermente oscuro.