セキュリティ系の勉強・その他開発メモとか雑談. Twitter, ブログカテゴリ一覧
本ブログはあくまでセキュリティに関する情報共有の一環として作成したものであり,公開されているシステム等に許可なく実行するなど、違法な行為を助長するものではありません.

LinPEASの素顔 (文字装飾とエスケープコード)

//

f:id:thinline196:20201203233221p:plain:w300

可愛い笑顔ですね。こちらLinPEASのバナーで表示されるやつです。とある事情でiTerm2上に表示してますが、これ選択して反転させると次のようになります。


f:id:thinline196:20201203233825p:plain:w300

ホラーですね。見た時かなりびっくりしました。
今回はなんでこうなるのか調べるだけです。(大体予想がついても多めに見てください。。)

LinPEASのソースコード

LinPEASのバナー出力部を探します。

github.com

リファクタリング等で位置がずれるかもしれないので、以下に抜き出しました。

gist.github.com

文字装飾をしている。

エスケープコードと装飾文字

en.wikipedia.org

キャラ描画の最初の1文字目は次のようになっている。

\e[48;2;194;194;194m\e[38;2;26;43;21m▄

\eエスケープコードでその後の48が属性で背景色を2;r;g;bの形式で指定するとのこと。mの後に来る文字に対して先の設定を反映するっぽいけれど、今回の例のように続けて書けば複数の文字装飾の設定が可能らしい。2つ目の設定では38属性を指定しており、こちらは前面色(文字色?)を設定している。最後についている「▄」が装飾の影響を受ける文字になる。


f:id:thinline196:20201204000555p:plain 上の画像が出力結果。ものすごくわかりにくいけれど、背景がグレー、文字色が深い緑で出力された。(末尾についている\e[0mで装飾をリセットしてます)

別パターン

LinPEASのキャラ描画にはもう1パターン使われていた。

...\e[48;2;98;177;78m \e[48;2;98;177;78m \e[...


f:id:thinline196:20201204001210p:plain 上が出力結果。

スペースの背景色を塗りつぶすことで1マス全体のベタ塗りを実現していた。

結論

以上より出力された絵をカーソルで選択して反転させたため、「▄」文字を使っていたところのみが黒線で表示され、元の輪郭がうっすらと浮き上がり怖い顔になっていたようです。

参考として交互に出力して見ました。 f:id:thinline196:20201204002047p:plain 「上:交互出力, 下:同出力を選択反転」

余談

上の怖い顔ですが、私はLinPEASの実行結果をテキストにコピペしたときに見つけました。今思うと装飾がなくなった「」と「▄」がコピーされていただけな気がします。また上の事象はkaliのデフォルトターミナルでは見られません。kaliのデフォはqterminalっぽいですが、これに限らず選択してハイライトされた時の色変化は各ターミナルの環境設定やテーマなどで変えられると思うので、それによって全く反転しなかったりすると思います。