SlideShare a Scribd company logo
1 of 29
Download to read offline
超・記号オンリー難読化シェル芸
たいちょー
みなさん#!/bin/bash(こんにちはの意)
たいちょーです
 @xztaityozx_001
母語はC#
胃下垂かもしれなくて悲しい
最近の難読化事情(フィクション)
いくら難読化を行ったところで随所に現れるコ
マンド列が難読化の可読化をしていた
ls --helpから始まるもんなら
「ははーんさてはdateだな?」
そうでなくてもls --helpの出力から何か作ろうとし
ているのが分かる
難読化過激派の暴走
いったんは落ち着いた難読化の流れ
人間一時は納得しても、それに慣れると「もっと
もっと」と欲張るのです
十分に難読化されたこれまでの手法では
「たりぬ」
結果、暴走
記号オンリー難読化シェル芸
前回のシェル芸勉強会で少しだけお話しさせて
いただいたkanataさんの獄炎
アルファベット2文字と記号と1、2だけでシェル
芸をする。
https://raintrees.net/news/114
dateコマンドの例
普通の難読化シェル芸
$(printf "%b" $(printf '%s%x' '¥x' $((0x83 ^
0xe7))))$(ls --help|grep ^G|cut -c53)$(ls --
help|grep ^G|cut -c10)$(ls --help|grep ^G|cut -
c8)
まだわかる
dateコマンドの例
A,z,記号,1,2のみの難読化シェル芸
A=$(. 2>&1);A=${A##*.};${A:$((++z*++z*++z*z-
z+++z)):$((z=z^z||++z))}${A:$((++z*++z---
z)):$((z=z^z||++z))}${A:$((++z*++z*z)):$((z=z^z||+
+z))} -- {z..A};${@:$((++z*++z*++z---z+++z---
z+++z---z)):$((z=z^z||++z))}${@:$((++z*++z*++z---
z+++z---z+++z)):$((z=z^z||++z))}${@:$((++z+++z+--
z)):$((z=z^z||++z))}${@:$((++z*++z*++z---z+++z---
z)):$((z=z^z||++z))}
何もわからない。見えない
手法の説明
A=$(. 2>&1)
無から有を生み出すすべての源
後のために命の泉と名付けます
A=${A##*.};
環境に依存する文字列を取り除く
Aには"filename [arguments]"だけが残る
手法
変数展開を利用してブレース展開をつくればOK
kanataさんによると
set -- {z..A}
でいいらしいので変数Aを使って
${A:19:1}${A:4:1}${A:18:1} -- {z..A}
手法
結果は
z y x w v u t s r q p o n m l k j i h g f e d c
b a ` _ ^ ] [ Z Y X W V U T S R Q P O N M L K J
I H G F E D C B A
何でもできそう
課題だったところ
変数Aや${A:19:1}${A:4:1}${A:18:1} -- {z..A}
などが問題
ここにはなんとアルファベットが2文字もあるの
でまだまだ読める
ホンマか
超・記号オンリー難読化シェル芸
本当に課題なのか解りませんがなんとかアル
ファベットを削ってみました
基本のやり方は前述までと同じです
変数A
変数名にAを使っていたので削ります。
代わりに使えるものを記号群から探す必要があ
ります
大体は式の一部だったり特殊変数だったりで使えま
せん
変数にできる記号
しかし変数群の中に2つ以上つなげれば変数に使
える記号がありました
だ~れだ
時間切れです
正解は_(アンダーバー)です
変数__
$_は直前のコマンドの引数がはいるので使えま
せんが$__は変数として使えます
$___も使えるので実質変数は無限個作れる
変数Aを消せた
ブレース展開に使うやつを消す
set -- {z..A}で使っていたz,Aを削ります
ブレース展開をどうにかして表現しようと思っ
たのですが無理だったので別のアプローチをと
りました
filename [arguments]で表現できるコマンド
きれいなWSLのbinにあるやつから探しました
ls /bin /usr/bin -1|
grep -v "[^ a|e|f|g|i|l|m|n|r|s|t|u]"
使えるコマンドが64個ありました
結構ありますね
mtコマンド
今回採用したのはmtコマンドです
磁気テープ?を操作?するコマンド
これを命の泉から作ります
Usageが出力されます
あとのためにこれをマナと名付けます
mtのUsage
Usage: mt [OPTION...] operation [count]
Try `mt --help' or `mt --usage' for more
information.
l,s,--helpがあるのでls --helpが使えます
後のためにls --helpの出力を世界樹と名付けます
世界樹に含まれる文字
サクッと調べてみます
ls --help|grep -o .|sort -u|tail -58|tr -d '¥n'
出力は以下みたいになってました
012345678aAbBcCdDeEfFgGhHiIkKlLmMnNoOpPqQrRsS
tTuUvwWxXyYzZ
世界樹の出力を得る記号難読化ワンライナー
__="$(. 2>&1)"; __=${__##*.};
___=($(${__:2*2+2+1:1}${__:2*((1+2)*(1+2)):1}
2>&1)); ${___[2*2*2-1]:2+2:1}${___[1-1]:1:1}
${___[2*2*2-1]:1-1:2*2+2}|${___[1-
1]:1+2:1}${___[2+2+1]:1:1}${___[1-
1]:2+2:1}${___[1+2]:1:1} -${___[1+2]:1-
1:1} .|${___[1-1]:1:1}${___[2*2*2]:1-
1:2}${___[1]:1:1} ${___[11-
1]:1:2}|${___[1]:1:1}${___[1-1]:2:1}${___[12+1]:1-
1:1}${___[2*2*2-1]:2+2:1} -$((22*2+12+2))
世界樹に含まれない文字
j,J,V,9がありませんでした・・・
しかし世界樹をちぎればevalが作れるのでブレース
展開ができますね
z=z; A=A
eval echo {$z..$A}
z y x w v u t s r q p o n m l k j i h g f e d c b a ` _
^ ] [ Z Y X W V U T S R Q P O N M L K J I H G F E D C
B A
9は計算すればいいですね
というわけで
0123456789,a~z,A~Zが作れました。
いえ~い
あとはお好みで数字の部分を変数の算術演算に
して完全に記号のみにするか、1と2は許してし
まうかを選んで好きなコマンドを作り上げます
注意:dateコマンドです
____=($(__="$(. 2>&1)"; __=${__##*.};
___=($(${__:2*2+2+1:1}${__:2*((1+2)*(1+2)):1} 2>&1));
${___[2*2*2-1]:2+2:1}${___[1-1]:1:1} ${___[2*2*2-1]:1-
1:2*2+2}|${___[1-1]:1+2:1}${___[2+2+1]:1:1}${___[1-
1]:2+2:1}${___[1+2]:1:1} -${___[1+2]:1-1:1} .|${___[1-
1]:1:1}${___[2*2*2]:1-1:2}${___[1]:1:1} ${___[11-
1]:1:2}|${___[1]:1:1}${___[1-1]:2:1}${___[12+1]:1-
1:1}${___[2*2*2-1]:2+2:1} -
$((22*2+12+2))));${____[11+2+2]}${____[2*2*2+1]}${____[2
2*2+1]}${____[12+2*2+1]}
解説
____=(
$(__="$(. 2>&1)" __=${__##*.}
___=(
$(${__:2*2+2+1:1}${__:2*((1+2)*(1+2)):1} 2>&1)
)
${___[2*2*2-1]:2+2:1}${___[1-1]:1:1} ${___[2*2*2-1]:1-1:2*2+2}|
${___[1-1]:1+2:1}${___[2+2+1]:1:1}${___[1-1]:2+2:1}${___[1+2]:1:1} -${___[1+2]:1-1:1} .|
${___[1-1]:1:1}${___[2*2*2]:1-1:2}${___[1]:1:1} ${___[11-1]:1:2}|
${___[1]:1:1}${___[1-1]:2:1}${___[12+1]:1-1:1}${___[2*2*2-1]:2+2:1} -$((22*2+12+2))
));
${____[11+2+2]}${____[2*2*2+1]}${____[22*2+1]}${____[12+2*2+1]}
命の泉
mt => マナ
ls --help => 世界樹
grep -o .
sort -u
tail -n58
dateコマンド
ちなみに
eval echo {y..A}でいいならマナからも作れま
す。
mt --helpにe,v,a,c,h,o,l,y,Aが含まれるのでそこ
から錬金すればいいです
超・記号オンリー難読化シェル芸
良いところ
読めない
数字もつくれる
悪いところ
読めない
長い
呪文か何かなのか・・・?
実験中はこれまでで最高に呪文感が強くて頭が
おかしくなりそうでした
今回はmtを使いましたが他の64個から始めても
いいと思います
mt始動とかls始動とか名前を付けよう!
今後の課題
スマートじゃない
mt始動は結局ls --helpに頼るのでカッコよくない
set -- {z..A}はシンプルでカッコいい
難読化なのにシンプルとは
なにもわからない

More Related Content

What's hot

Active Learning 入門
Active Learning 入門Active Learning 入門
Active Learning 入門
Shuyo Nakatani
 

What's hot (20)

強化学習アルゴリズムPPOの解説と実験
強化学習アルゴリズムPPOの解説と実験強化学習アルゴリズムPPOの解説と実験
強化学習アルゴリズムPPOの解説と実験
 
Gurobi python
Gurobi pythonGurobi python
Gurobi python
 
[DL輪読会]Pyramid Stereo Matching Network
[DL輪読会]Pyramid Stereo Matching Network[DL輪読会]Pyramid Stereo Matching Network
[DL輪読会]Pyramid Stereo Matching Network
 
TVMの次期グラフIR Relayの紹介
TVMの次期グラフIR Relayの紹介TVMの次期グラフIR Relayの紹介
TVMの次期グラフIR Relayの紹介
 
Crfと素性テンプレート
Crfと素性テンプレートCrfと素性テンプレート
Crfと素性テンプレート
 
強化学習@PyData.Tokyo
強化学習@PyData.Tokyo強化学習@PyData.Tokyo
強化学習@PyData.Tokyo
 
Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化
 
Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張
Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張
Matlantis™のニューラルネットワークポテンシャルPFPの適用範囲拡張
 
[DL輪読会] マルチエージェント強化学習と心の理論
[DL輪読会] マルチエージェント強化学習と心の理論[DL輪読会] マルチエージェント強化学習と心の理論
[DL輪読会] マルチエージェント強化学習と心の理論
 
深層強化学習の self-playで、複雑な行動を機械に学習させたい!
深層強化学習の self-playで、複雑な行動を機械に学習させたい!深層強化学習の self-playで、複雑な行動を機械に学習させたい!
深層強化学習の self-playで、複雑な行動を機械に学習させたい!
 
ブースティング入門
ブースティング入門ブースティング入門
ブースティング入門
 
物体検出の歴史(R-CNNからSSD・YOLOまで)
物体検出の歴史(R-CNNからSSD・YOLOまで)物体検出の歴史(R-CNNからSSD・YOLOまで)
物体検出の歴史(R-CNNからSSD・YOLOまで)
 
ニューラルネットワークを用いた自然言語処理
ニューラルネットワークを用いた自然言語処理ニューラルネットワークを用いた自然言語処理
ニューラルネットワークを用いた自然言語処理
 
深層ニューラルネットワークの積分表現(Deepを定式化する数学)
深層ニューラルネットワークの積分表現(Deepを定式化する数学)深層ニューラルネットワークの積分表現(Deepを定式化する数学)
深層ニューラルネットワークの積分表現(Deepを定式化する数学)
 
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
 
[DL輪読会]Attention Is All You Need
[DL輪読会]Attention Is All You Need[DL輪読会]Attention Is All You Need
[DL輪読会]Attention Is All You Need
 
セクシー女優で学ぶ画像分類入門
セクシー女優で学ぶ画像分類入門セクシー女優で学ぶ画像分類入門
セクシー女優で学ぶ画像分類入門
 
[DL輪読会] Residual Attention Network for Image Classification
[DL輪読会] Residual Attention Network for Image Classification[DL輪読会] Residual Attention Network for Image Classification
[DL輪読会] Residual Attention Network for Image Classification
 
はじめての生成文法・前編 - #tokyonlp 5
はじめての生成文法・前編 - #tokyonlp 5はじめての生成文法・前編 - #tokyonlp 5
はじめての生成文法・前編 - #tokyonlp 5
 
Active Learning 入門
Active Learning 入門Active Learning 入門
Active Learning 入門
 

More from xztaityozx

More from xztaityozx (20)

呪符式高速詠唱シェル芸2
呪符式高速詠唱シェル芸2呪符式高速詠唱シェル芸2
呪符式高速詠唱シェル芸2
 
呪符式高速詠唱シェル芸
呪符式高速詠唱シェル芸呪符式高速詠唱シェル芸
呪符式高速詠唱シェル芸
 
surgeコマンド作りました
surgeコマンド作りましたsurgeコマンド作りました
surgeコマンド作りました
 
ナーベンシュタイン距離 ~グラフを添えて~
ナーベンシュタイン距離 ~グラフを添えて~ナーベンシュタイン距離 ~グラフを添えて~
ナーベンシュタイン距離 ~グラフを添えて~
 
あの、selのリベンジをさせてください
あの、selのリベンジをさせてくださいあの、selのリベンジをさせてください
あの、selのリベンジをさせてください
 
Owari version 2.0 をつくりました
Owari version 2.0 をつくりましたOwari version 2.0 をつくりました
Owari version 2.0 をつくりました
 
実績を達成しました!
実績を達成しました!実績を達成しました!
実績を達成しました!
 
ワタナBase59
ワタナBase59ワタナBase59
ワタナBase59
 
ocsとselってコマンド作ったわよ
ocsとselってコマンド作ったわよocsとselってコマンド作ったわよ
ocsとselってコマンド作ったわよ
 
ワタナベシェル
ワタナベシェルワタナベシェル
ワタナベシェル
 
柿と杮
柿と杮柿と杮
柿と杮
 
難読化PowerShell芸入門
難読化PowerShell芸入門難読化PowerShell芸入門
難読化PowerShell芸入門
 
シェル芸をドット絵にして思いを伝えよう!
シェル芸をドット絵にして思いを伝えよう!シェル芸をドット絵にして思いを伝えよう!
シェル芸をドット絵にして思いを伝えよう!
 
終わりを出力するコマンドつくった
終わりを出力するコマンドつくった終わりを出力するコマンドつくった
終わりを出力するコマンドつくった
 
ワタナベ難読化シェル芸
ワタナベ難読化シェル芸ワタナベ難読化シェル芸
ワタナベ難読化シェル芸
 
~/.bashrcを難読化しよう!
~/.bashrcを難読化しよう!~/.bashrcを難読化しよう!
~/.bashrcを難読化しよう!
 
CLIツール作るの楽しい
CLIツール作るの楽しいCLIツール作るの楽しい
CLIツール作るの楽しい
 
レッツゴー難読化シェル芸
レッツゴー難読化シェル芸レッツゴー難読化シェル芸
レッツゴー難読化シェル芸
 
部活でシェル芸がはやらない
部活でシェル芸がはやらない部活でシェル芸がはやらない
部活でシェル芸がはやらない
 
潜入工作任務用シェル芸
潜入工作任務用シェル芸潜入工作任務用シェル芸
潜入工作任務用シェル芸
 

超・記号オンリー難読化シェル芸