マナティ

難読化シェル芸の世界 Bashとすてきな難読化

難読化シェル芸の世界 Bashとすてきな難読化③

『難読化シェル芸の世界 Bashとすてきな難読化』。ディープでユーモアあふれる難読化シェル芸の世界に触れてみてください。

nandokuka_samune.jpg


『難読化シェル芸の世界』PDF書籍をマイナビブックス・Manateeにて販売中です。
書籍の内容を一部公開! ぜひニッチでディープな世界に触れてみてください。
 

難読化の基本

アスキーコードを記述して実行

bashでは、16進数、8進数、Unicodeの表現でも文字として認識されます。通常のコマンドを別の表現にするだけでも難読化できます。

001.png

コマンド置換で文字を生成して実行

コマンド置換の出力結果を実行したいコマンドの文字列になるようにします。 コマンド置換で実行する部分を複雑にすることで、難読化を図ることができます。

002.png

manに載っていないsedのeオプションを使って実行

sedのeオプションは、引数のコマンドを実行してくれるのでこれを利用する方法です。 eオプションは通常、manに載っていません。sedを熟知していないと何しているかわかりにくくなります。

003.png

フェイク(無駄な命令)

以下は全て無視されます。コードの間に入れることでより複雑な難読化を図ることができるでしょう。 システムの停止、ファイルの削除などを入れておけば、これを見た人を驚かせることができるかもしれません。

004.png

: は何も実行しないbashのビルトインコマンドですが、: があっても条件次第で後続のコマンドが実行されます。解読者を混乱させることができるでしょう。

005.png

フェイク(前半処理の無視)

処理結果をパイプで渡しても、それを使わなければ実質、無視できる処理と考えることができます。
以下は、前半処理を無視して、dateを実行する例です。

006.png

より複雑な難読化を考えるなら、処理の後半も無駄な処理にして、間に本当にやりたい処理を間に入れる方法が考えられます。

普通のコマンドの使い方をしない

通常、ファイルの中身を表示したいときはcat、標準出力に文字を表示したいならechoを使いますよね。 本来、目的の処理をするのに一番適したコマンドがあるはずですが、それをあえて使わないことで難読化を図ることができます。
[echoの代替]

007.png

[catの代替]

008.png

[lsの代替]

009.png

[tacの代替]

010.png

私は普段dc1)を使ったことがありません。dcを読める人は少ないはずです。

古典暗号(ROT13)で難読化する

ROT13という暗号化方式があります。古代ローマで使用されていた方式です。 古典的な暗号化方法で、現在では使われていませんが、難読化するのには有用です。

011.png

ROT13はその名のとおり、アルファベットを13文字ずらすことで暗号化しています。 複数の方法でRTO13の暗号化・復号化をすることができます。

以下は、dateの文字列を暗号化した例です。複数の方法があります。

012.png

同じ処理をもう一度行えば復号化することができます。bashに渡して実行してみましょう。

013.png

著者プロフィール

kanata(著者)
青森県弘前市生まれ。シェル芸とCTFと温泉が好き。シェル芸を難読化することが趣味。
https://raintrees.net/