たいちょーの雑記

ぼくが3日に一度くらい雑記をかくところ

うんこがSL走らせるらしい

夜はさっむい

一年中こんな気候ならいいのに

なんかメールをのぞいたらはてなブログ

そろそろ更新しませんかだってさ
なので最近アツいシェル芸で遊んだお話を書きます

難読化シェル芸という闇

raintrees.net

シェル芸界隈に少し前に現れた究極のジャンル 難読化シェル芸
ここ最近はシェル芸で遊ぶときはこの難読化でわくわくしてます

難読化シェル芸ちょっと研究した

難読化を発見したkanata氏に感銘を受けたのでぼくも少しやってみました

その結果 日本語base64難読化シェル芸 とかいう闇を一つ深めたものを生んでしまいました

これをLT大会で話しました
その時のスライドがこれ~~
www.slideshare.net

詳細はスライドに書いてあるんですがまぁここでも

日本語base64難読化シェル芸とは

基本

日本語をbase64エンコードすることで目的のコマンドを得る手法
例えば「あ」をbase64エンコードすると 44GCCg== が得られる

$ echo "" | base64
44GCCg==

またこれを

$ echo "" | base64 | sed -E 's@(44|g==)@@g'|awk '{print tolower($1)}'
gcc

こうすることでgccコマンドが得られる うーんこれはなかなか

これは実はある法則がある
例えば「ら」「り」「る」をbase64に通すとそれぞれ 44KJ44KK44KL が得られる
つまり4文字目がアルファベット順になってる(実際は3文字目もだけど)

これを使ってコマンド列をレッツメイク

$ echo "そずねぞ" | base64 | grep -o '[a-z]' | xargs | sed 's@ @@g'
date

やったー!

他にもありまぁす

base64を複数通すことで目的のコマンド列をcutコマンドを使って取り出す手法
これはkanata師のls --helpからdateを取り出すやつを元にやってみた(上記サイト参照)

それがスライド13ページにあるやつ

$ echo "うんこ"|base64|base64|base64|cut -c 4,27|awk '{print tolower($1)}'
sl

うんこがSLを走らせる
まさに 産業革命

ちなみに目grepがつらい人たちのために

$ echo "もじれつ"|fold -w1|cat -n|grep ほしいやつ|awk '{print $1}'

これで何文字目かわかるのでcutしまくろう

これからの展望

なんかうんこを使うのが通例でトレンドなようで、様々なコマンドがうんこから錬成されてるみたいですね・・・ここまでくるとうんこに無限の可能性があるように感じてきます
どうやらシーザー暗号とかopensslを利用する手もあるようなのでそっちも試してみたいですね

日本語base64難読化シェル芸の方はさらなる隠蔽を目指してコマンド全体を覆いつくせるように模索しているところです

何かわかったらシェル芸勉強会のLTで話してみたいですね