-内部的な動作の手続き内容・構造・データなどを人間が理解しにくい、あるいはそのようになるよう加工されたシェル芸のこと。cevalを使って実行¶コマンド置換と同様。まとめ中manに載っていないsedのeオプションを使って実行¶sedのeオプションは、引数のコマンドを実行してくれるのでこれを利用する。eオプションは通常、manに載っていない。sedを熟知していないとやはり何しているか解りにくい。以下は全て無視される。コードの間に入れる事でより複雑な難読化を図ることができる。処理結果をパイプで渡しても、それを使わなければ実質、無視できる処理となる。JSTより複雑な難読化を考えるなら、処理の後半も無駄な処理にして、間に本当にやりたい処理を間に入れる方法が考えられますね。base64によるエンコード¶base64にエンコードすることで、どのような命令かわからないようにする。-dうんこスペースを使わない¶IFS変数がスペースの代わりとして使える。2))Aハッシュ値から必要な文字を得る¶MD5等のハッシュ値を出力することで、0123456789abcdefABCDEFの文字を得ることができる。pwdコマンドの最初に1文字目は、必ず'/'になる。最初の1文字目は、必ず1になる(と思って差し支えない。UNIX通算秒なので)。-c1)1lsのヘルプには、通常以下の文字列が含まれるため、これを利用できる。調査中システムが普遍的に抱えている不変な情報から文字を得る¶これが難読化に対しては最も有用では実行してみるまで、どんな文字列になるか非常に解りにくい。どのようなLinuxディストリビューションでも同じ値を抱えているものというのは、意外に見つからない。私が発見したものは以下になる。この文字列は、どのLinuxディストリビューションでも変わらない。.ELF............ここから、.:01456cfELFの文字を得ることができる。上記(システムが普遍的に抱えている不変な情報から文字を得る)の発展した形をシェル芸の上田先生がまとめてくださいました嬉しいサンプリングシェル芸https://b.ueda.tech/?page=sampling_shellgei難読化シェル芸の手法の一つに、思わぬところから文字を拾って(サンプリングして)コマンドの文字列にするというものがあります。音楽のサンプリングみたいなものです。文字を拾う方法にもいろいろあるので、まとめてみました。文字コードのSJISには、その文字を構成するバイト(2Byte目)に制御文字を含んているものがあるこれらはダメ文字と呼ばれ、Linuxで扱う時は注意が必要でした。-d${__:1}bash)awk芸によるコマンド機能の代替¶awkで一般的によく使われるコマンド機能を代替して、読みにくくする。awkに関しては、注意深く読めば読解できる点に注意が必要。No-ip.orgsed芸によるコマンド機能の代替¶sedで一般的によく使われるコマンド機能を代替して、読みにくくする。と1,2,A,zでだけで作る難読化シェル芸ここから隊長さんが究極の難読化に昇華してくれた。いまやJavaScriptやPowerShellの最先端の難読化手法に追いついている。CTFの環境では"bash"が返ってきたようです。若干の環境依存があります。${##}1これは、以下のように解釈できます。${#変数名}は、格納されている文字列の長さを返す。引数の数(ワンライナーだと0になります)よって、${##}は、"0"という文字の長さ1を返す。