2019.04.12
難読化シェル芸の世界 Bashとすてきな難読化②
『難読化シェル芸の世界 Bashとすてきな難読化』。ディープでユーモアあふれる難読化シェル芸の世界に触れてみてください。
AtCoder 高橋直大氏監修!『アルゴリズム実技検定 公式テキスト[上級]~[エキスパート]編』発売中!
『難読化シェル芸の世界』PDF書籍をマイナビブックス・Manateeにて販売中です。
書籍の内容を一部公開! ぜひニッチでディープな世界に触れてみてください。
そうして作った文字でプログラミングし、最後にその変数をeval(相当の命令)で実行しています。
bashに置き換えると…
• 記号だけで文字を作り出し
できるか・・・な・・・?
•( 記号の)変数に突っ込んで
コレはダメそうです。bashで変数に使えるのは英字と数字だけ…ですよね? (実は無理じゃなかったというのが後でわかります)
結果として、1,2,A,zだけ使わざるを得えませんでした。
• evalする
evalしなくても変数の内容がそのままコマンドとして認識されるためevalは必要なさそうです。
ではbashで、できるだけ英数字を使わずに難読化していきます。 基本的な原理としては、以下のように変数展開を使います。
それでは、実際に順を追ってやってみましょう。
正解は・・・! これ
算術式展開を使います。数字を一切使わずに目的の数値を計算して出力します。一度計算に利用した変数z は、0に戻ることもなく、そのまま次の処理に引き継がれるため、現在の変数zの値を意識しながらプログラミングしなければなりません(辛い)。以下のように計算していますが、前提として変数zの初期値が1であったり、0であったりする必要があります。
AtCoder 高橋直大氏監修!『アルゴリズム実技検定 公式テキスト[上級]~[エキスパート]編』発売中!
『難読化シェル芸の世界』PDF書籍をマイナビブックス・Manateeにて販売中です。
書籍の内容を一部公開! ぜひニッチでディープな世界に触れてみてください。
記号だけで作る難読化:基本原理
PowerShellやJavaScriptは、どのようにして記号だけでプログラミングしているのでしょうか。PowerShellやJavaScript難読化の原理を確認してみます。重要なポイントは記号だけで文字を作り出し(記号の)変数に突っ込むという点です。そうして作った文字でプログラミングし、最後にその変数をeval(相当の命令)で実行しています。
bashに置き換えると…
• 記号だけで文字を作り出し
できるか・・・な・・・?
•( 記号の)変数に突っ込んで
コレはダメそうです。bashで変数に使えるのは英字と数字だけ…ですよね? (実は無理じゃなかったというのが後でわかります)
結果として、1,2,A,zだけ使わざるを得えませんでした。
• evalする
evalしなくても変数の内容がそのままコマンドとして認識されるためevalは必要なさそうです。
ではbashで、できるだけ英数字を使わずに難読化していきます。 基本的な原理としては、以下のように変数展開を使います。
それでは、実際に順を追ってやってみましょう。
記号と1,2だけでアルファベットを得る
記号だけでアルファベット得るには、以下のエラーメッセージを使います。ブレース展開でアルファベット全部を得る
使えるアルファベットを増やすには、ブレース展開を使うのがよさそうです。Aとzだけでアルファベットを全て得られます。正解は・・・! これ
数字使っているところをなんとかする
まだ数字が入っているところがありますね。 これを何とかしましょう。もう1つの文字zをここで変数として使います。算術式展開を使います。数字を一切使わずに目的の数値を計算して出力します。一度計算に利用した変数z は、0に戻ることもなく、そのまま次の処理に引き継がれるため、現在の変数zの値を意識しながらプログラミングしなければなりません(辛い)。以下のように計算していますが、前提として変数zの初期値が1であったり、0であったりする必要があります。
調整して完成!
そんなわけで、まとめるとこんな感じです。AtCoder 高橋直大氏監修!『アルゴリズム実技検定 公式テキスト[上級]~[エキスパート]編』発売中!