yamayaさん新作が以下になります2019年2月は、記号で作る難読化シェル芸がメガシンカした歴史的な月でした。一度にたくさんの素敵な情報が集まって、私の思考回路はショート寸前です。writeuphttps://hack.more.systems/writeup/2017/12/30/34c3ctf-minbashmaxfun/そんな中やべーやつが開発されます。yamayaさんという方が作成した記号だけのdateです。JSTこんなに短いのに全て記号で、そしてちゃんとdateとして動作します。美しい...そして恐ろしい...人の褌で相撲を取るようで大変恐縮なのですが、これが埋もれてしまうのは人類の損失のような気がしたので、解読してみました。大きく、4パートに分かれます。__=$@;}関数_を定義しています。$@が特殊なシェル変数になります。動作は「変数__に関数の全引数の内容を設定する」という動作になっています。/*/$$/../?????-*さっそく関数_が実行されています。ワイルドカード(glob)てすね。一致するディレクトリは1つだけになりました。いうファイルが該当します。これはマジックSysRqキーと呼ばれるカーネル機能を制御するためのインタフェースになりますね。この機能を利用するわけではなく、triggerという文字列を取得するのが目的になっています。※マジックSysRqキーは、カーネルのデバッグなどに使用されるやつです。昔、クラスタの動作確認するために、これを使って意図的にカーネルパニックさせた記憶があります。${__##*-}ここから変数展開を使って-以降だけを切り取って、再び変数__に設定しています。"trigger"で7文字になるのですが、この7という数字も最後に使われます。4trでdateコマンドを生成する¶ここは更に細かく分けました。)コマンド置換ですね。最終的にこのカッコの中がdateになれば、dateが実行されます。4-2¶${__%?????}変数展開の機能を巧みに使って先頭ニ文字を切り出しています。triggerの頭ニ文字、trが取得されます。^-~trの範囲指定を巧みに使っています。いういう範囲でしょうか。Asciiコードから確認してみます。0x5Eから0x7Eの範囲になります。trで変換される変換表を作ってみます。"'\$${#__}("<<<は、ヒアストリングという機能になります。通常、変換したい文字はパイプ経由でtrに渡しますが、これでも渡すことができます。渡している文字は"'\$${#__}("です。"trigger"の文字数を返す変数展開です。7ですね!ゴールが見えてきました。1〜4まとめ¶まとめると、以下になります。JSTおわかりいただけたでしょうか...ここまでくるともはや芸術品...!出典は、ココのコメントにあります。