PHP5 がリリースされたんでアレコレ見ていたら、勝手ストリームを作ると面白そうだったので難読化ストリームなるものを作ってみました。 ストリームを作ることのメリットは、fopen ラッパーとして通常のストリーム関数が使えるだけでなく、include や require にも使えるところでしょうか。 つまり、難読化ストリームを作ることにより、そのストリームで難読化した PHP ソースを include や require で読める…ということです。
難読化ストリームは、ファイルを扱うストリーム(jam://)だけでなく、変数に対するストリーム(jamvar://)も用意しています。 jamvar ストリームは include/require で扱えないスクリプト本体に対しても難読化を適用するためのトリックのために用意しました。 本当は、標準の file ストリームの乗っ取りをするほうがスマートな処理はできるのですが、乗っ取り方が分からなかったのと、できたとしても影響する範囲が大きいので、このような方法を取ることにしました。
ソースファイルは、jam_stream-0.4.tar.gz をダウンロードしてください。 ソースコード展開後 jam_stream.c 中の JAMMING_CODE を変更することをお勧めします。サイズを変更する場合には JAMMING_CODE_LEN もあわせて変更してください。
コンパイルは、
の順で行います。PHP の開発環境が適切にインストールされていれば問題なくインストールできるでしょう。
インストールまで終われば、php.ini を編集します。php.ini に
extension=jam_stream.so jam_stream.server_name_mask = On jam_stream.max_memory = 1M
を追加して再起動をしてください。
なお、JAMMING_CODE の内容は再コンパイルする時には変更しないように注意してください。難読化したファイルが読めなくなります。
具体的な使い方は sctipts 中にある jam_conv.php を参考にしてください。 代替ファイルの作成や難読化ファイルの作成ができますので、代替ファイルの場合はそのままで、難読化した場合には include/require のファイル名の指定を "jam://難読化ファイル名" と書き換えてください。
なお、php.ini 中の設定項目ですが、
となっています。バーチャルドメインを設定している場合には jam_stream.server_name_mask = On で使うようにしてください。
難読化処理は、zlib による圧縮と JAMMING_CODE による XOR 処理が主体となっています。 また、バーチャルドメイン対策として SERVER_NAME も併用できます。
この部分をカスタマイズすることにより、より安全な難読化ができるようになると思います。 コンパイル方法にも書いていますとおり、最低でも JAMMING_CODE は変更するようにしてください。
Presented by Kazuhiko Iwama.