🤖

strings command usage

2022/01/03に公開

strings 意外に色んな場面で使えて便利なのでメモ.

help

まずはhelpを眺める

$ man strings
NAME
       strings - find the printable strings in a object, or other binary, file

SYNOPSIS
       strings [ - ] [ -a ] [ -o ] [ -t format ] [ -number ] [ -n number ] [--]
       [file ...]

usage

stirngsはバイナリファイルデータから文字列データ(ASCII)を抜き取りだすコマンド.

何も指定しないと標準入力を利用して、文字列を抜き出す.

$ cat a.wav | strings
RIFF�O
WAVEfmt
LIST
INFOISFT
Lavf58.76.100
data
����
������
����
��������

ファイルも指定可能

$ strings a.wav
RIFF�O
WAVEfmt
LIST
INFOISFT
Lavf58.76.100
data
����
������
����
��������

抜き出す最小文字列も指定できる. デフォルトは4文字

$ cat Assets/Components/LineMusic/Musics/a.wav | strings -n 1 | head
RIFF�O
WAVEfmt
�
w
LIST
INFOISFT
Lavf58.76.100
data
O
����

個人的にはファイルヘッダを見たり、apkなんかの中身で特定の関数名が含まれているか?を調べたりする.
関数のstripingがうまく行っているか? idfaが仕込まれているかどうか? 一時期はAPK内部にopensslの特定のバージョンが含まれていないかを検査するためも使っていた.

$ unzip -p app.apk | strings | grep ApiUser
"ApiUserSelectionUserSelection.java"
...

本来は ~.o とか ~.a のcompileされたobject file内部に関数文字列が含まれているかどうかなんかを見る用に使われていたっぽい.
世の中にはバイナリとテキストが混在しているファイルやデータが結構あるので、知っていると何かのときに調査に役立つと思う.

Discussion