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

自然言語処理のためのDeep Learning
自然言語処理のためのDeep Learning自然言語処理のためのDeep Learning
自然言語処理のためのDeep Learning
Yuta Kikuchi
 
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
Shota Imai
 

What's hot (20)

Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
 
ワタナベ難読化シェル芸
ワタナベ難読化シェル芸ワタナベ難読化シェル芸
ワタナベ難読化シェル芸
 
High performance python computing for data science
High performance python computing for data scienceHigh performance python computing for data science
High performance python computing for data science
 
優れた研究論文の書き方―7つの提案
優れた研究論文の書き方―7つの提案優れた研究論文の書き方―7つの提案
優れた研究論文の書き方―7つの提案
 
RustによるGPUプログラミング環境
RustによるGPUプログラミング環境RustによるGPUプログラミング環境
RustによるGPUプログラミング環境
 
機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門
 
プレゼン・ポスターで自分の研究を「伝える」 (How to do technical oral/poster presentation)
プレゼン・ポスターで自分の研究を「伝える」 (How to do technical oral/poster presentation)プレゼン・ポスターで自分の研究を「伝える」 (How to do technical oral/poster presentation)
プレゼン・ポスターで自分の研究を「伝える」 (How to do technical oral/poster presentation)
 
Linuxのsemaphoreとmutexを見る 
Linuxのsemaphoreとmutexを見る Linuxのsemaphoreとmutexを見る 
Linuxのsemaphoreとmutexを見る 
 
NumPy闇入門
NumPy闇入門NumPy闇入門
NumPy闇入門
 
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
 
不老におけるOptunaを利用した分散ハイパーパラメータ最適化 - 今村秀明(名古屋大学 Optuna講習会)
不老におけるOptunaを利用した分散ハイパーパラメータ最適化 - 今村秀明(名古屋大学 Optuna講習会)不老におけるOptunaを利用した分散ハイパーパラメータ最適化 - 今村秀明(名古屋大学 Optuna講習会)
不老におけるOptunaを利用した分散ハイパーパラメータ最適化 - 今村秀明(名古屋大学 Optuna講習会)
 
【DL輪読会】Flow Matching for Generative Modeling
【DL輪読会】Flow Matching for Generative Modeling【DL輪読会】Flow Matching for Generative Modeling
【DL輪読会】Flow Matching for Generative Modeling
 
Recent Advances on Transfer Learning and Related Topics Ver.2
Recent Advances on Transfer Learning and Related Topics Ver.2Recent Advances on Transfer Learning and Related Topics Ver.2
Recent Advances on Transfer Learning and Related Topics Ver.2
 
自然言語処理のためのDeep Learning
自然言語処理のためのDeep Learning自然言語処理のためのDeep Learning
自然言語処理のためのDeep Learning
 
【DL輪読会】マルチエージェント強化学習における近年の 協調的方策学習アルゴリズムの発展
【DL輪読会】マルチエージェント強化学習における近年の 協調的方策学習アルゴリズムの発展【DL輪読会】マルチエージェント強化学習における近年の 協調的方策学習アルゴリズムの発展
【DL輪読会】マルチエージェント強化学習における近年の 協調的方策学習アルゴリズムの発展
 
Optimizer入門&最新動向
Optimizer入門&最新動向Optimizer入門&最新動向
Optimizer入門&最新動向
 
「統計的学習理論」第1章
「統計的学習理論」第1章「統計的学習理論」第1章
「統計的学習理論」第1章
 
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
 
Direct feedback alignment provides learning in Deep Neural Networks
Direct feedback alignment provides learning in Deep Neural NetworksDirect feedback alignment provides learning in Deep Neural Networks
Direct feedback alignment provides learning in Deep Neural Networks
 

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ツール作るの楽しい
 
レッツゴー難読化シェル芸
レッツゴー難読化シェル芸レッツゴー難読化シェル芸
レッツゴー難読化シェル芸
 
部活でシェル芸がはやらない
部活でシェル芸がはやらない部活でシェル芸がはやらない
部活でシェル芸がはやらない
 
潜入工作任務用シェル芸
潜入工作任務用シェル芸潜入工作任務用シェル芸
潜入工作任務用シェル芸
 
ダブルシンク難読化シェル芸
ダブルシンク難読化シェル芸ダブルシンク難読化シェル芸
ダブルシンク難読化シェル芸
 

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