Heb je ooit geprobeerd een bestand in een editor te openen om erachter te komen dat het onleesbare binaire inhoud bevat? De Linux-opdracht “strings” maakt het mogelijk om de voor mensen leesbare tekens in elk bestand te bekijken. Het belangrijkste doel van het gebruik van de opdracht “strings” is om uit te zoeken naar welk type bestand je kijkt, maar je kunt het ook gebruiken om tekst te extraheren. Als je bijvoorbeeld een bestand hebt van een propriëtair programma dat bestanden opslaat in een vreemd binair formaat, dan kun je “strings” gebruiken om de tekst die je in het bestand hebt geplaatst te extraheren.
Voorbeeldgebruik van de opdracht Strings
Een geweldige manier om de kracht van de strings-opdracht te demonstreren, is door een document te maken met LibreOffice Writer. Open LibreOffice Writer, voer wat tekst in en sla het op in de standaard ODT-indeling. Open nu een terminalvenster (druk op CTRL, ALT en T tegelijkertijd) en gebruik vervolgens de opdracht cat om het bestand als volgt weer te geven: cat uwbestandsnaam.odt | meer
type=”code”> (Vervang “uwbestandsnaam.odt” door de naam van het bestand dat u hebt gemaakt) Wat u zult zien is een hele muur van onleesbare tekst.
Druk op de spatiebalk om door het bestand te bladeren. Sporadisch door het hele bestand zie je een deel van de tekst die je hebt ingevoerd. De opdracht strings kan worden gebruikt om alleen de delen weer te geven die voor mensen leesbaar zijn. In zijn eenvoudigste vorm kunt u de volgende opdracht uitvoeren: strings uwbestandsnaam.odt | meer
type=”code”> Zoals eerder verschijnt er een muur van tekst, maar alleen tekst die je als mens kunt lezen. Als je geluk hebt, kun je je tekst zien. Wat u echter zult kunnen zien dat de sleutel is, staat op de eerste regel: mimetypeapplication/vnd.oasis.opendocument.text
type=”code”> We weten om twee redenen dat het bestandstype een LibreOffice Writer ODT-bestand is:
- We hebben het bestand gemaakt
- De extensie is .ODT
Stel je voor dat je het bestand niet hebt gemaakt, of dat je het bestand op een herstelde schijf hebt gevonden en dat het bestand geen extensie had. Windows-herstel zou vaak bestanden herstellen met namen als 0001, 0002, 0003, enz. Het feit dat de bestanden werden hersteld is geweldig, maar proberen uit te vinden wat voor soort bestanden het waren, was een nachtmerrie. Door strings te gebruiken, heb je een vechtkans om het bestandstype uit te werken. Als u weet dat een bestand een opendocument.text-bestand is, kunt u het opslaan met de ODT-extensie en openen in LibreOffice-schrijver. Voor het geval u het niet wist, een ODT-bestand is in feite een gecomprimeerd bestand. Als u uwbestandsnaam.odt hernoemt naar uwbestandsnaam.zip, kunt u het openen in een archiveringstool en zelfs het bestand uitpakken.
Alternatief gedrag
Standaard retourneert de opdracht strings alle tekenreeksen in een bestand, maar u kunt het gedrag wijzigen zodat het tekenreeksen retourneert van geïnitialiseerde, geladen gegevenssecties in een bestand. Wat betekent dit precies? Niemand lijkt het te weten. Het is logisch om aan te nemen dat u tekenreeksen gebruikt om te proberen het bestandstype te achterhalen of om naar specifieke tekst in een bestand te zoeken. Als u bij het uitvoeren van de opdracht strings met het standaardgedrag niet de uitvoer krijgt waarop u hoopte, probeer dan een van de volgende opdrachten uit te voeren om te zien of dit een verschil maakt: strings -d uwbestandsnaam
type=”code”> of strings –data uwbestandsnaam
De man-pagina stelt dat het bovenstaande commando kan helpen om de hoeveelheid rommel die wordt geretourneerd door strings te verminderen. De opdracht “strings” kan worden ingesteld om omgekeerd te werken, zodat de min d-schakelaar het standaardgedrag is. Als dit het geval is op uw systeem, kunt u alle gegevens retourneren met het volgende commando: strings -a uwbestandsnaam
type=”code”>
Uitvoer formatteren
U kunt de tekst in de uitvoer krijgen om de naam van het bestand naast elke tekstregel weer te geven. Voer hiervoor een van de volgende opdrachten uit: strings -f uwbestandsnaam
type=”code”> of strings –print-file-name yourfilename
De uitvoer ziet er nu ongeveer zo uit: uwbestandsnaam: een stuk tekst
of uwbestandsnaam: een ander stuk tekst
Als onderdeel van de uitvoer kunt u ook de offset weergeven van waar die tekst in een bestand wordt weergegeven. Voer hiervoor de volgende opdracht uit: strings -o uwbestandsnaam
type=”code”> De uitvoer ziet er ongeveer zo uit: 16573 uw17024 tekst
type=”code”> De offset is eigenlijk de octale offset, hoewel het, afhankelijk van hoe strings voor uw systeem zijn samengesteld, ook gemakkelijk de hex- of de decimale offset kan zijn. Een nauwkeurigere manier om de gewenste offset te krijgen, is door de volgende opdrachten te gebruiken: strings -td uwbestandsnaam
tekenreeksen -naar uwbestandsnaam
strings -de uwbestandsnaam
De min t betekent dat de offset wordt geretourneerd, en het teken dat volgt bepaalt het type offset (dwz d = decimaal, o = octaal, h = hex). Standaard drukt de opdracht strings elke nieuwe string op een nieuwe regel af, maar u kunt het scheidingsteken van uw keuze instellen. Als u bijvoorbeeld een pijpsymbool (“|”) als scheidingsteken wilt gebruiken, voert u de volgende opdracht uit: strings -s “|” uwbestandsnaam
type=”code”>
Pas de tekenreekslimiet aan
De opdracht strings zoekt standaard naar een reeks van vier afdrukbare tekens op een rij. U kunt de standaard aanpassen zodat deze alleen een tekenreeks retourneert met acht afdrukbare tekens of 12 afdrukbare tekens. Door deze limiet aan te passen, kunt u de uitvoer aanpassen om het best mogelijke resultaat te krijgen. Door te zoeken naar een tekenreeks die te lang is, loopt u het risico nuttige tekst weg te laten, maar door deze te kort te maken, krijgt u mogelijk veel meer rommel terug. Voer de volgende opdracht uit om de tekenreekslimiet aan te passen: strings -n 8 uwbestandsnaam
type=”code”> In het bovenstaande voorbeeld heb ik de limiet gewijzigd in 8. Je kunt 8 vervangen door het nummer van je keuze. U kunt ook de volgende opdracht gebruiken om hetzelfde te doen: strings –bytes=8 uwbestandsnaam
type=”code”>
Voeg witruimte toe
Standaard bevat de opdracht strings witruimte, zoals een tab of spatie, als afdrukbaar teken. Dus als je een string hebt die luidt als “de kat zat op de mat”, dan zou het strings-commando de hele tekst retourneren. Nieuwe regeltekens en regelteruglooptekens worden standaard niet als afdrukbare tekens beschouwd. Om tekenreeksen nieuwe regeltekens en regelteruglooptekens als afdrukbaar teken te laten herkennen, voert u tekenreeksen op de volgende manier uit: strings -w uwbestandsnaam
type=”code”>
Wijzig de codering
Er zijn vijf coderingsopties beschikbaar voor gebruik met strings:
- s = 7-bits byte (gebruikt voor ASCII, ISO 8859)
- S = 8-bits byte
- b = 16 bit bigendiaan
- l = 16 bit littleendian
De standaardwaarde is een 7-bits byte. Voer de volgende opdracht uit om de codering te wijzigen: strings -es uwbestandsnaam
strings –encoding=s uwbestandsnaam
In de bovenstaande opdracht heb ik de standaard “s” opgegeven, wat 7-bits byte betekent. Vervang de “s” door de coderingsletter van uw keuze.
Wijzig de naam van de binaire bestandsbeschrijving
U kunt het gedrag van strings wijzigen zodat deze een andere binaire bestandsdescriptorbibliotheek gebruikt dan degene die voor uw systeem is voorzien. Deze schakelaar is er een voor de experts. Als u een andere bibliotheek wilt gebruiken, kunt u dit doen door het volgende strings-commando uit te voeren: strings -T bfdname
type=”code”>
Opties lezen vanuit een bestand
Als u elke keer dezelfde opties gaat gebruiken, wilt u niet elke keer dat u de opdracht uitvoert alle schakelaars moeten specificeren, omdat dit tijd kost. Wat u kunt doen, is een tekstbestand maken met nano en de opties in dat bestand specificeren. Voer de volgende opdracht uit om dit binnen een terminal uit te proberen: nano stringsopts
type=”code”> Voer in het bestand de volgende tekst in: -f -o -n 3 -s “|”
type=”code”> Sla het bestand op door op te drukken CTRL + UIT en sluit af door op te drukken CTRL + X. Om de strings-opdrachten met deze opties uit te voeren, voert u de volgende opdracht uit: strings @stringsopts uwbestandsnaam
type=”code”> De opties worden gelezen uit het bestand stringsopts, en je zou de bestandsnaam voor elke string moeten zien, met de offset en de “|” als scheidingsteken.
Hulp krijgen
Als je meer wilt lezen over strings, voer dan de volgende opdracht uit om hulp te krijgen. tekenreeksen –help
type=”code”> Of lees de handleiding: man strings
type=”code”>
Ontdek welke versie van strings u gebruikt
Voer een van de volgende opdrachten uit om de versie van strings te vinden die u gebruikt: strings -v
snaren -V
tekenreeksen –versie