Android の resources.arsc を解析するための基本的な Python プログラムを作成しました。ファイルで見つかったすべての文字列を出力します。文字列には、各文字の間にゼロ値のバイトがあります。これは、文字列が utf-16 で保存されていることを示唆しています。それが正しいかどうかはわかりませんが、Android の文字列はローカライズできるので、そうだと思います。string.decode('hex') を使用して、文字列を人間が読める形式で出力しています。文字列を構成するバイトのリストを含むサンプルを次に示します。
>>> print ''.join(['00', '72', '00', '65', '00', '73', '00', '2f', '00', '64', '00', '72', '00', '61', '00', '77', '00', '61', '00', '62', '00', '6c', '00', '65', '00', '2f', '00', '61', '00', '62', '00', '6f', '00', '75', '00', '74', '00', '2e', '00', '70', '00', '6e', '00', '67', '00', '00', '00']).decode('hex')
res/drawable/about.png
問題は、このプログラムを grep にパイプすると、読み取った文字列を grep できないことです。grepが出力で一致できるように、シェルに出力するにはどうすればよいですか? ありがとう!
(編集)実際に文字列を印刷しましたが、私の例では、「印刷」されたバージョンと返されたバージョンの両方を表示する方がよいと考えました。混乱させて申し訳ありません。この例では、grep できないのは「/res/drawable/about.png」です。
(EDIT2) 簡単なデモ:
11:33 AM ~/learning_python $ python -c "print ''.join(['00', '72', '00', '65', '00', '73', '00', '2f', '00', '64', '00', '72', '00', '61', '00', '77', '00', '61', '00', '62', '00', '6c', '00', '65', '00', '2f', '00', '61', '00', '62', '00', '6f', '00', '75', '00', '74', '00', '2e', '00', '70', '00', '6e', '00', '67', '00', '00', '00']).decode('hex')"
res/drawable/about.png
11:33 AM ~/learning_python $ python -c "print ''.join(['00', '72', '00', '65', '00', '73', '00', '2f', '00', '64', '00', '72', '00', '61', '00', '77', '00', '61', '00', '62', '00', '6c', '00', '65', '00', '2f', '00', '61', '00', '62', '00', '6f', '00', '75', '00', '74', '00', '2e', '00', '70', '00', '6e', '00', '67', '00', '00', '00']).decode('hex')" | grep about
11:33 AM ~/learning_python $
(EDIT3)別のデモ、これはデータがutf-16-beであることを証明していると思います:
11:33 AM ~/learning_python $ python -c "print ''.join(['00', '72', '00', '65', '00', '73', '00', '2f', '00', '64', '00', '72', '00', '61', '00', '77', '00', '61', '00', '62', '00', '6c', '00', '65', '00', '2f', '00', '61', '00', '62', '00', '6f', '00', '75', '00', '74', '00', '2e', '00', '70', '00', '6e', '00', '67', '00', '00', '00']).decode('hex')" > testfile
11:35 AM ~/learning_python $ iconv -f utf16be -t utf8 testfile
res/drawable/about.png
11:35 AM ~/learning_python $ iconv -f utf16be -t utf8 testfile | grep about
Binary file (standard input) matches
11:35 AM ~/learning_python $ iconv -f utf16be -t utf8 testfile | grep -a about
res/drawable/about.png