LinPEASの素顔 (文字装飾とエスケープコード)
可愛い笑顔ですね。こちらLinPEASのバナーで表示されるやつです。とある事情でiTerm2上に表示してますが、これ選択して反転させると次のようになります。
ホラーですね。見た時かなりびっくりしました。
今回はなんでこうなるのか調べるだけです。(大体予想がついても多めに見てください。。)
LinPEASのソースコード
LinPEASのバナー出力部を探します。
リファクタリング等で位置がずれるかもしれないので、以下に抜き出しました。
文字装飾をしている。
エスケープコードと装飾文字
キャラ描画の最初の1文字目は次のようになっている。
\e[48;2;194;194;194m\e[38;2;26;43;21m▄
\e
がエスケープコードでその後の48
が属性で背景色を2;r;g;b
の形式で指定するとのこと。m
の後に来る文字に対して先の設定を反映するっぽいけれど、今回の例のように続けて書けば複数の文字装飾の設定が可能らしい。2つ目の設定では38
属性を指定しており、こちらは前面色(文字色?)を設定している。最後についている「▄」が装飾の影響を受ける文字になる。
上の画像が出力結果。ものすごくわかりにくいけれど、背景がグレー
、文字色が深い緑
で出力された。(末尾についている\e[0m
で装飾をリセットしてます)
別パターン
LinPEAS
のキャラ描画にはもう1パターン使われていた。
...\e[48;2;98;177;78m \e[48;2;98;177;78m \e[...
上が出力結果。
スペース
の背景色を塗りつぶすことで1マス全体のベタ塗りを実現していた。
結論
以上より出力された絵をカーソルで選択して反転させたため、「▄」文字を使っていたところのみが黒線で表示され、元の輪郭がうっすらと浮き上がり怖い顔になっていたようです。
参考として交互に出力して見ました。
「上:交互出力, 下:同出力を選択反転」
余談
上の怖い顔ですが、私はLinPEASの実行結果をテキストにコピペしたときに見つけました。今思うと装飾がなくなった「」と「▄」がコピーされていただけな気がします。また上の事象はkali
のデフォルトターミナルでは見られません。kaliのデフォはqterminal
っぽいですが、これに限らず選択してハイライトされた時の色変化は各ターミナルの環境設定やテーマなどで変えられると思うので、それによって全く反転しなかったりすると思います。