web-dev-qa-db-ja.com

PHP用のコード難読化ツールはありますか?

誰かがPHPに適した難読化ツールを使用しましたか?いくつか試してみましたが、非常に大きなプロジェクトでは機能しません。たとえば、あるファイルに含まれていて別のファイルで使用されている変数を処理することはできません。

または、コードの拡散を止めるためのその他のトリックはありますか?

207
user29593

PHP protect を試すことができます。これは、PHPコードを難読化する無料のPHP難読化ツールです。
とても素敵で使いやすく、無料です。

他の人が難読化を使用しないことについてここに書いていることについては、それが壊れる可能性があるなどです:
答えるのは1つだけです。家のドアをロックしないでください。誰でもロックを選択できるからです。
これはまさにそのケースであり、難読化は100%のコード盗難を防ぐことを意図したものではありません。元のコーダーに支払うほうが安くなるので、時間のかかるタスクにするだけで済みます。お役に立てれば。

231
yossi

人々はあなたに難読化ツールを提供しますが、難読化の量は誰かがあなたのコードに到達するのを妨げることができません。無し。コンピューターで実行できる場合、または映画や音楽の場合は再生できる場合、ユーザーはそれを取得できます。マシンコードにコンパイルするだけでも、作業が少し難しくなります。難読化ツールを使用する場合、あなたは自分自身をだますだけです。さらに悪いことに、ユーザーがバグを修正したり変更したりすることも禁止されています。

音楽会社や映画会社はまだこれに対応しておらず、まだDRMに何百万ドルも費やしています。

PHPやPerlのようなインタプリタ言語では簡単です。 Perlには多くのコード難読化ツールがありましたが、簡単に逆コンパイルできることに気付きました。

Perl -MO=Deparse some_program

PHPには DeZenderShow My Code のようなものがあります。

私のアドバイスは?ライセンスを書き、弁護士を取得します。他の唯一のオプションは、コードを提供せず、代わりにホストされたサービスを実行することです。

件名のperlfaqエントリ も参照してください。

110
Schwern

何も完璧ではありません。プログラマ以外の人を止めたいだけなら、私が書いた小さなスクリプトを使用できます:

<?php
$infile=$_SERVER['argv'][1];
$outfile=$_SERVER['argv'][2];
if (!$infile || !$outfile) {
    die("Usage: php {$_SERVER['argv'][0]} <input file> <output file>\n");
}
echo "Processing $infile to $outfile\n";
$data="ob_end_clean();?>";
$data.=php_strip_whitespace($infile);
// compress data
$data=gzcompress($data,9);
// encode in base64
$data=base64_encode($data);
// generate output text
$out='<?ob_start();$a=\''.$data.'\';eval(gzuncompress(base64_decode($a)));$v=ob_get_contents();ob_end_clean();?>';
// write output text
file_put_contents($outfile,$out);
29
John

インタプリタ言語の難読化に意味がないとラベル付けできるかどうかはわかりません(Schwernの投稿にコメントを追加できないため、ここに新しいエントリを追加します)。

誰かがコードを難読化する可能性のあるすべてのシナリオを知っていると仮定するのは少し近視眼的だと思います。私の現在のシナリオを考えてみましょう:

私は、大規模でかなり洗練されたPHPベースのサイトを開発しているコンサルティング会社で働いています。プロジェクトは、他のコンサルタント会社が開発した他のサイトをホストしているクライアントのサーバーでホストされます。技術的に記述したコードはすべてクライアントが所有しているため、ライセンスを供与することはできません。ただし、サーバーにアクセスできる他のコンサルタント(競合他社)は、最初にクライアントから許可を得ることなくコードをコピーできます。したがって、私たちには難読化の真の理由があります。競合他社がコードを理解するために必要な労力を、ゼロから作業のコピーを作成する労力よりも多くするためです。

20
tomfumb

SD Thicket PHP Obfuscator を参照してください。任意の大きなページセットでうまく機能する難読化ツールがあります。主に識別子名をスクランブルすることで動作します。中規模から大規模のアプリケーションでは、これによりコードが非常に理解しにくくなります。これが全体の目的です。

「eval(decode(encodedprogramcode))」スキームではエネルギーを無駄にしません。これは多くのPHP 「do [これらは「難読化」ではなく「エンコーダ」」です。これは、すべてのクラウドがその呼び出しを見つけてeval-decodeを実行し、デコードされたコードを取得できるためです。

PHPを処理するために言語精度のパーサーを使用します。プログラムが構文的に無効かどうかがわかります。さらに重要なことは、言語全体を正確に知っていることです。紛失したり混乱したりすることはありません。また、コードを破損することもありません(コードのパブリックAPIを正しく識別できなかった場合など、「誤って」難読化するとどうなりますか)。

はい、識別子をページ全体で同じように難読化します。そうしなかった場合、結果は機能しません。

16
Ira Baxter

私が見た中で最高のものは Zend Guard です。

14
CMS

これを試してください: http://www.pipsomania.com/best_php_obfuscator.do

最近、私のJavaプロジェクトを難読化するためにPHPでそれを書きました。ネット上に書かれた良い互換性のある準備が見つからなかったので、sasとしてオンラインに置くことにしました。無料です。互換性を最大限にするために異なるスクリプト間で変数名を変更することはありませんが、ランダムなロジックを使用して、すべての命令を非常に適切に難読化しています。文字列...すべて。このバグのあるcodeclipseよりもずっと良いと思います。それはPHPで書かれた方法で、非常に遅いです:)

10
PatlaDJ

Thicket™Obfuscator for PHP

PHP Obfuscatorツールは、PHPソースコードをスクランブルして、理解またはリバースエンジニアリングを非常に困難にします(例)。これにより、Webサイトでホストするか、顧客に出荷する必要があるソースコードの知的財産が大幅に保護されます。 SDのソースコード難読化ツールファミリのメンバーです。

SourceGuardianを使用すると、クールで使いやすいGUIが付属するので便利です。

ただし、注意してください:

その「ややおかしい」ライセンス条項に注意してください。

  • マシンごとに1つしか実行できません-これまでのところこれは許容範囲です
  • 別のマシンでコマンドラインインターフェイスを実行したい場合は、Webサーバーと言ってくださいあなたは別のライセンスが必要です(はい、それはおかしくて、私もあなたが笑っているのが聞こえます)。
2
Herr