難読化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
という文字列をセットする
$_ "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文字以上の文字列(ようは全部)を
$''
でくるむ
$ echo x64 x61 x74 x65 | sed "s/^\| /\\/g;s/.\+/$'&'/"
$'date'
前段までで 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コレ で見られるのでぜひどうぞ。私も $[]
でできることもっと探します