難読化dateしましょう
難読化dateコレクション、略して難daコレは難読化された date
コマンド(略して難da)を集めた聖典
dateコマンド
$ date 2019年 12月 11日 水曜日 20:31:43 JST
見ての通り日付を出力するツール。coreutils
に入っている。
PowerShellにも Get-Date
なるものがある。PowerShellだと、 Get
を取ってもいいのと、大文字小文字が関係ないことから同じように date
で日付が得られる。
# powershell $ Get-Date 2019年12月11日 20:35:30 $ date 2019年12月11日 20:35:30
$[]利用難da
$ : sed; $_ "s/$[-$[$[~$[!$[]]<<$[!$[]]]+~$[!$[]]]]/$[$[-~$[!$[]]<<-~$[!$[]]]+~$[]]/${#_}" <(echo x6{$[-~$[!$[]]<<$[!$[]]],$[!$[]],$[-~$[!$[]]<<$[!$[]]],$[$[-~$[!$[]]<<$[!$[]]]+$[!$[]]]})|$_ "s/^\| /\\/g;s/.\+/$'&'/"|bash 2020年 1月 16日 木曜日 21:01:54 JST
$[]
で囲んだ部分を式として評価できる。これを使って数値を作り、bashに評価させる感じ。$[]
の利用自体はわりとメジャーっぽいかなぁ
動作確認した環境
$ bash --version GNU bash, バージョン 5.0.11(1)-release (x86_64-pc-linux-gnu)
$ sed --version sed (GNU sed) 4.7
解説
難daを分割する前に、$[]
について
$[]
$[]
を空打ちすると 0 になる
$ echo $[] 0
$[!$[]]
$[]
が 0 なので、まず $[!0]
になり、0のNOTなので1になる
$ echo $[!$[]] 1
$[-~$[!$[]]]
~
はビット反転、1をビット反転は-2なので ~1
は-2
$[!$[]]
が 1 なのでこの式は 2 になる
$ echo $[-~$[!$[]]] 2
難daを分割してみる
1: : sed 2: $_ "s/$[-$[$[~$[!$[]]<<$[!$[]]]+~$[!$[]]]]/$[$[-~$[!$[]]<<-~$[!$[]]]+~$[]]/${#_}" 3: <(echo x6{$[-~$[!$[]]<<$[!$[]]],$[!$[]],$[-~$[!$[]]<<$[!$[]]],$[$[-~$[!$[]]<<$[!$[]]]+$[!$[]]]}) 4: $_ "s/^\| /\\/g;s/.\+/$'&'/" 5: bash
ちょっと見づらいので算術式を展開する。
1: : sed 2: $_ "s/6/7/3" 3: <(echo x6{4,1,4,5}) 4: $_ "s/^\| /\\/g;s/.\+/$'&'/" 5: bash
: sed
$_
に sed
という文字列をセットする
$_ "s/6/7/3"
前段で $_
に sed
がセットされているので、この段では sed "s/6/7/3"
が実行される。内容的には3つ目の 6
を 7
に置換するという感じ
$ echo 1:6,2:6,3:6,4:6 | sed 's/6/7/3' 1:6,2:6,3:7,4:6
<(echo x6{4,1,4,5})
プロセス置換で前段の sed
に ブレース展開を流し込む
$ echo x6{4,1,4,5} x64 x61 x64 x65 $ sed "s/6/7/3" <(echo x6{4,1,4,5}) x64 x61 x74 x65
$_ "s/^| /\/g;s/.+/$'&'/"
これも sed
で s/^\| /\\/g
と s/.\+/$'&'/
を評価する
s/^\| /\\/g
- 先頭とスペースを\に置換
s/.\+/$'&'/
- 1文字以上の文字列(ようは全部)を
$''
でくるむ
- 1文字以上の文字列(ようは全部)を
$ echo x64 x61 x74 x65 | sed "s/^\| /\\/g;s/.\+/$'&'/" $'date'
bash
前段までで date
ができているので bash
に渡して実行してもらう
: sed; $_ "s/6/7/3" <(echo x6{4,1,4,5}) | $_ "s/^\| /\\/g;s/.\+/$'&'/"|bash 2019年 12月 11日 水曜日 20:31:43 JST
改めて見ると、コレでも十分難daコレって感じですね。
終わりに
$[]
を使った難daコレのもっとヤバイやつは #難daコレ で見られるのでぜひどうぞ。私も $[]
でできることもっと探します