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

More from xztaityozx

Owari version 2.0 をつくりました
Owari version 2.0 をつくりましたOwari version 2.0 をつくりました
Owari version 2.0 をつくりましたxztaityozx
 
実績を達成しました!
実績を達成しました!実績を達成しました!
実績を達成しました!xztaityozx
 
ワタナBase59
ワタナBase59ワタナBase59
ワタナBase59xztaityozx
 
ocsとselってコマンド作ったわよ
ocsとselってコマンド作ったわよocsとselってコマンド作ったわよ
ocsとselってコマンド作ったわよxztaityozx
 
ワタナベシェル
ワタナベシェルワタナベシェル
ワタナベシェルxztaityozx
 
難読化PowerShell芸入門
難読化PowerShell芸入門難読化PowerShell芸入門
難読化PowerShell芸入門xztaityozx
 
シェル芸をドット絵にして思いを伝えよう!
シェル芸をドット絵にして思いを伝えよう!シェル芸をドット絵にして思いを伝えよう!
シェル芸をドット絵にして思いを伝えよう!xztaityozx
 
~/.bashrcを難読化しよう!
~/.bashrcを難読化しよう!~/.bashrcを難読化しよう!
~/.bashrcを難読化しよう!xztaityozx
 
CLIツール作るの楽しい
CLIツール作るの楽しいCLIツール作るの楽しい
CLIツール作るの楽しいxztaityozx
 
レッツゴー難読化シェル芸
レッツゴー難読化シェル芸レッツゴー難読化シェル芸
レッツゴー難読化シェル芸xztaityozx
 
部活でシェル芸がはやらない
部活でシェル芸がはやらない部活でシェル芸がはやらない
部活でシェル芸がはやらないxztaityozx
 
潜入工作任務用シェル芸
潜入工作任務用シェル芸潜入工作任務用シェル芸
潜入工作任務用シェル芸xztaityozx
 
ダブルシンク難読化シェル芸
ダブルシンク難読化シェル芸ダブルシンク難読化シェル芸
ダブルシンク難読化シェル芸xztaityozx
 
破壊的難読化シェル芸
破壊的難読化シェル芸破壊的難読化シェル芸
破壊的難読化シェル芸xztaityozx
 
みんなで!Base64難読化シェル芸
みんなで!Base64難読化シェル芸みんなで!Base64難読化シェル芸
みんなで!Base64難読化シェル芸xztaityozx
 
シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話
シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話
シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話xztaityozx
 
難読化シェル芸
難読化シェル芸難読化シェル芸
難読化シェル芸xztaityozx
 

More from xztaityozx (18)

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ツール作るの楽しい
 
レッツゴー難読化シェル芸
レッツゴー難読化シェル芸レッツゴー難読化シェル芸
レッツゴー難読化シェル芸
 
部活でシェル芸がはやらない
部活でシェル芸がはやらない部活でシェル芸がはやらない
部活でシェル芸がはやらない
 
潜入工作任務用シェル芸
潜入工作任務用シェル芸潜入工作任務用シェル芸
潜入工作任務用シェル芸
 
ダブルシンク難読化シェル芸
ダブルシンク難読化シェル芸ダブルシンク難読化シェル芸
ダブルシンク難読化シェル芸
 
破壊的難読化シェル芸
破壊的難読化シェル芸破壊的難読化シェル芸
破壊的難読化シェル芸
 
みんなで!Base64難読化シェル芸
みんなで!Base64難読化シェル芸みんなで!Base64難読化シェル芸
みんなで!Base64難読化シェル芸
 
シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話
シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話
シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話
 
難読化シェル芸
難読化シェル芸難読化シェル芸
難読化シェル芸
 

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