PHP_Obfuscator 0.1.0をリリースしました
前回のPHP勉強会で発表した内容の続きです。
結局、PHP_Obfuscatorというありふれた名前にしちゃいましたが、とりあえずopenpear.orgからダウンロード/インストールできるようにしました。
インストール
PEAR::Console_CommandLineに依存してますので、-aオプションを付けてインストールしてください。
$ sudo pear install -a openpear/php_obfuscator-beta
$
インストール後、php-obfuscatorというコマンドがインストールされていることを確認してください。
$ php-obfuscator Error: You must provide at least 1 argument. Type "/usr/local/lib/php5/bin/php-obfuscator --help" to get help. $ php-obfuscator --help obfuscate php script. Usage: /usr/local/lib/php5/bin/php-obfuscator [options] <file> Options: --verbose turn on verbose output -t filter, --filter=filter a list of filters. specify 'XXXX' if use PHP_Obfuscator_Filter_XXXXFilter -e encoder, --encoder=encoder encoder names. specify 'XXXX' if use PHP_Obfuscator_Encoder_XXXXEncoder -h, --help show this help message and exit -v, --version show the program version and exit Arguments: file the script file name to obfuscate $
前回のPHP勉強会のプレゼン資料にある『Filter』が『Encoder』という名称になりました。で、『Filter』は資料内の『ブロック』を作る部分になります。このFilterで、PhpLockIt!でいうアクセス元IPでの制限や有効期限などを設定することになります。
今のところ、利用できるEncoderは以下のとおりです。
また、利用できるFilterは。。。PHP_Obfuscator_Filter_ExpireRestrictionFilterクラスがありますが、今のバージョンではまだ利用できません>< 有効期限をどうやって指定するか、とかを含めて、もうちょっと考えさせてください。
とりあえずの使い方
たとえば、
$ cat date.php hogehoge <?php echo date('Y/m/d H:i:s') . PHP_EOL; $
というスクリプトを
難読化する場合は、
$ php-obfuscator -e Gzip Base64 Strtr date.php
という感じになります。実行結果は標準出力に吐かれます。
$ php-obfuscator -e Gzip Base64 Strtr date.php <?php $__n = __FILE__; eval(base64_decode("JF9fZiA9IGZvcGVuKCRfX24sICJyYiIpOyBmZ2V0cygkX19mKTsgZXZhbChnemluZmxhdGUoYmFzZTY0X2RlY29kZShzdHJ0cihmcmVhZCgkX19mLCA3NCksICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJywgJzE5Nk1Cc1RSYWNnZWROSFpibTdyK1l6aHg1bC93UExRa0twV091alhHZlUyUzBpVjhJSnZDcXRBM0U0bkZEb3knKSkpKTs")); return; ?> FSpe/5BdEj8LeXzSK+c0n1SqZxYwXPG5gafNBqmBndtqEfUTGh2uMqt8dVq3m6E6v4wpIA6l33$
なので、必要に応じてリダイレクトしてファイルに出力してください。
$ php-obfuscator -e Gzip Base64 Strtr date.php > tmp.php ; php tmp.php hogehoge 2010/07/02 20:53:03 $
独自のEncoder、Filterの追加
独自のEncoderを追加する場合は、PHP_Obfuscator_Encoder_AbstractEncoderクラスを継承したクラスをinclude_pathが通ったディレクトリに配置してください。
Filter追加は、PHP_Obfuscator_Filter_Filterインターフェースを実装したクラスをinclude_pathが通ったディレクトリに配置します。
現時点での注意点
複数ファイルで構成されるライブラリの難読化は、別途1ファイルにまとめる必要があります。
まとめ
ニッチなパッケージと思いますが、要望などあれば。。。