PHPのコード難読化ツールはありますか?[閉まっている]


212

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

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


11
本当に必要ですか?
Cheery

5
@ StevenA.Lowe:PHPをからかうことに注意してください。:-)
Marco Demaio 2013年

89
さらに別の本当に良い、建設的なプログラミング関連の質問で、完全なQ&A形式で、建設的ではないものとしてクローズされます。スタックオーバーフローの恥…
Petr

6
それがスタックオーバーフローです。閉じられてはならない閉じられた質問よりも多用されるのは、貧弱なスロブがここに来て助けを求めたときのユーザーの炎です。
Mac

2
これを閉じるべきではないと思われる場合は、投票して再度開く。
Ira Baxter

回答:


240

PHPコードを難読化するための無料のPHP難読化ツールであるPHP保護を試すことができます。
それはとても素敵で、使いやすく、無料です。
編集:このサービスはもう稼働していません。

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


105
難読化はそれをより難しくすることであり、不可能ではないという事実を指摘するための+1。
Ashkan Kh。ナザリー

3
ソースコードを難読化する代わりに暗号化しても、解読が不可能になることはありません。解読するのが本当に難しいだけです。
xorinzor 2012

9
試してみましたが、気に入らなかった。それだけで、それは...コメントを削除しませんどちらも変数名を変更
Pisu

1
@Schwern、ドアのロックを解除したままにし、Columboと非常に優れた弁護士を雇って自分自身をカバーしてください;)
David Newcomb

2
@David Newcomb-ドアをロックするだけでいい弁護士にお金を払いたがるのは誰ですか?
azoundria 2017年

109

人々はあなたに難読化ツールを提供しますが、難読化をしても、誰かがあなたのコードにアクセスするのを防ぐことはできません。なし。コンピュータがそれを実行できる場合、または映画や音楽の場合、それを再生できる場合、ユーザーはそれにアクセスできます。それをマシンコードにコンパイルしても、仕事は少し難しくなります。難読化ツールを使用する場合、自分をだますだけです。さらに悪いことに、ユーザーがバグを修正したり変更したりすることも許可していません。

音楽会社や映画会社はまだこれに同意していませんが、DRMに数百万ドルを費やしています。

PHPやPerlなどのインタプリタ言語では、それは取るに足らないことです。Perlには、多くのコード難読化ツールがありましたが、簡単に逆コンパイルできることがわかりました。

perl -MO=Deparse some_program

PHPには、DeZenderShow My Codeなどがあります。

私のアドバイス?ライセンスを書いて弁護士を雇う。他の唯一のオプションは、コードを提供せずに、ホストされたサービスを実行することです。

この件に関するperlfaqエントリも参照してください。


220
私はほとんどあなたに同意しますが、OPはオープンソースのメリットについての講義ではなく、製品の推奨を求めました。
Eli、

36
オープンソースとは何の関係もありません。それは、コードを見るだけではなく、コードをマッシュアップすることです。実際には、ユーザーのマシンで実行されるコードやデータは、コンパイル、難読化、暗号化に関係なく、最終的には完全に透過的です。OPはそれを理解する必要があります。
シュヴェルン2008

7
@JamShady:難読化は、バグの修正や変更ができないことを意味するものではありません。ソースコードを愚かに難読化し、元のコードを捨て、難読化された結果を維持するように要求した場合、はい、何もできなくなります。優れた難読化ツールは、コード難読化された結果へのマッピングを保持するように要求します。元のコードをデバッグ/変更し、難読化されたパッチを顧客に出荷し、マップを使用して難読化された苦情を読み取り可能なものに戻すことで彼の問題を診断することもできます。彼は地図を持っていないので、これは安全です。
Ira Baxter

34
質問:どのように、回答:あなたは役に立たない=べきではない
CMC

26
@cmc多くの人が直接質問に答えてくれると確信しているので、別のやり方をしても損失はありません。エキスパートに質問する半分のポイントは、実際の問題を解決するために間違った質問をしているときに彼らが知っているということです。「5つの理由」を応用したアプリです。en.wikipedia.org/wiki/5_Whys実際の問題/質問は、「私のPHPコードを他人が読み取ったり盗んだりできないようにする方法」です。答えは、出荷できないコードを出荷する場合ですが、試行錯誤して多くの時間とお金を費やして、誤った安心感を得る可能性があります。それは難読化ツールのリストよりも役に立ちませんでしたか?
Schwern、2011

31

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

<?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);

19
驚くばかり?すべてのページには、ソースを取得するための完全なソリューションが含まれています。「gzuncompress(base64_decode($ a))」を実行します。はい、これは非プログラマを停止します。しかし、元のソースコードは、そのためのエンコードが必要なプログラマー以外のユーザーを停止しますか?これをリバースエンジニアリングするつもりでいる唯一の人、PHPプログラマーです。
Ira Baxter

2
ほとんどの場合、非プログラマーは変更したいソースコード内の一部の文字列を検索して試します。ドメイン名、データベース名、ユーザーなど、非プログラマーのみがソースコードを変更できないようにするソリューションも探しています
アサドカムラン

これは私にとって非常に役立つ回答です。ユーザーがメモ帳で "database.php"を簡単に開いて、データベースのユーザー名とパスワードが表示されないようにすることにのみ興味があります。
TimH-Codidact

20

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

私は、誰かがコードを難読化する可能性のあるすべての可能なシナリオを知っていて、難読化されたコードを表示するために必要な長さに誰でも実際に進んで進んでいくと想定するのは少し近視眼だと思います。私の現在のシナリオを考えてみましょう:

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


16

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

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

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

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


1
報告者:なぜ報告したかについて、礼儀正しくお答えください。OPの特定の問題を含め、OPの質問に直接回答します。
Ira Baxter

私が知ることができることから、これはWindowsでのみ実行されるEXEです?少なくともevalは.exeファイルです...
Craig Jacobs

evalファイルは.exeベースのインストーラーです。複雑な真実は、インストールされた製品が通常.cmdスクリプトから実行されることです。これは、その下に並列プログラミング言語があるためですが、それは決してわかりません。主にWindows製品として設計されました。ただし、Wineを使用してLinuxにインストールすると、ネイティブLinuxツールであるかのように、一緒にインストールされた.shスクリプトで実行されます。GUI部分を使用する場合(オプション、ほとんどの人は実稼働ビルドプロセスでスクリプトとして実行することを望んでいます)、WindowsではネイティブJava、LinuxではネイティブJavaを使用します。
Ira Baxter

Thicketがホスティングスペースにアドオンを必要とするのは本当ですか?はいの場合、それはどのように共有ホスティングにインストールされますか?
Stephen Adelakun

@StephenAdelakun:Thicketはサーバーを変更する必要がありません。ダウンロードしてドキュメントを確認してください。
Ira Baxter

14

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


2
SD PHP Obfuscatorも同様に優れており、コストは約1/5です。
Ira Baxter

1
@SalmanPKそしてその理由は明白だと思われますか?
ペルマイスター

@SalmanPK Webホスティングスペースへのアドオンが必要です。Zend Guardもおそらくそうします。どちらが最も主流かわかりません。とにかく、問題はそれがあなたの潜在的な聴衆を減らすことです。
James P.

1
SDのPHP Obfuscatorはすべて小文字に変換します。フレームワークを使用している場合、これは問題になります。
Amil Waduwawara 2013年

1
@JamesPoulson:発言がSD PHP難読化ツールに向けられているかどうかは不明です。明確にするために、Webホスティングスペースにアドオンを必要としません。
Ira Baxter

10

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

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


よさそうです...しかし、安全ですか?つまり、他の人が簡単にそれを解読できますか?
shasi kanth 2011年

この瞬間までに、NOBODYがこの難読化ツールによって難読化されたコードを難読化解除できることを保証します。
PatlaDJ 2011年

3
[要出典]-自作の暗号化はあいまいさによるセキュリティであり、まったくセキュリティではありません。
Chris Baker、

8
「この瞬間までに、NOBODYがコードの難読化を解除できることを保証できます」PHPでも?PHPがそれを行うことができれば、他の誰かもそうすることができます。サイトのサンプルコードを見ると、どこかでコードをダンプするevalステートメントがあり、それをエコーに変更すると、コードが表示されます。

3
警告:このメソッドは元の変数名に簡単にデコードできます。lombokcyber.com
Zane Hooper

3

PHP用Thicket™難読化ツール

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


TrueBug.comにアクセスできません。3年以上経過してコメントを投稿していることはわかっていますが、新しいURLのtrueBugがあれば、それを手伝っていただけますか?
Stephen Adelakun 2016年

@StephenAdelakun TrueBugだけが必要ですか?これを使用してください:TruBug PHP Obfuscator
Praveen Kumar Purushothaman

リンクが機能していません。それとも何か不足していますか?
Stephen Adelakun 2016年

@StephenAdelakun私が今チェックしたところ、うまくいきました。
Praveen Kumar Purushothaman

1
@StephenAdelakunなぜそれだけ?:(それはとにかく死んだソフトウェアです。今より良い、素晴らしいものがありますか?
Praveen Kumar Purushothaman 2016年

2

SourceGuardianの使用は、クールで使いやすいGUIが付属しているため優れています。

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

おかしなライセンス条項に注意してください。

  • マシンごとに1つだけ実行できます-これまでのところこれは許容されます
  • 別のマシンでコマンドラインインターフェースを実行する場合、たとえばWebサーバーの場合、別のライセンスが必要になります(はい、それは面白いですし、笑っているのも聞こえます)。

2
それは私には普通のようです!2台のマシン= 2ライセンス!通常、人々が行うことは、1台のマシンですべてをエンコードしてから、他のマシンにアップロードすることです。
David Newcomb 2013年

@davidnewcombあなたはポイントを獲得していないようです。通常、開発マシンのコードは、出荷する前に暗号化します。オンラインで実行する必要がある場合は、コマンドラインインターフェイスにも追加のライセンスが必要ですが、これは明らかに正しくありません。コマンドラインインターフェイスは、ローカルボックスではなくWebサーバーに置く傾向があります。
2013年

2
TL; DRの優れた保護、愚かなライセンス条件。
2013年

1
マシンごとではなく、ユーザーごとに1ライセンスである必要があります。
beppe9000 2015年

@ beppe9000完全に同意します!

-16

難読化は、潜在的なバグとセキュリティの脆弱性の別のレイヤーをプログラムに追加するだけです。しないでください。

難読化ソフトウェアを書く人は、たいていの場合、とにかく大ざっぱで、熟練していないようです。

コードが「素晴らしい」場合、クラッカーは、難読化されているかどうかに関係なく、非常に長い時間をかけて拡散します。誰もあなたのコードを知らない/気にしないのなら、おそらく彼らも知らないでしょう。


7
非熟練?どんな証拠に基づいていますか?私はそれらを書きます。あなたが広範な一般化をする前に私の略歴を確認してください。semanticdesigns.com/Company/People/idbaxter
Ira Baxter

5
@Ira:私の発言はまだ続いています。ほとんどの難読化されたコードは数分以内に壊れる可能性があります。具体的には、それを行うほとんどの人は、すべてではなく、熟練していないということです。最初に頭に浮かんだのはIoncubeで、確かに、脆弱性が公開されていました:osvdb.org/show/osvdb/41708。その場合も、おそらくPHPのあいまいなセキュリティ要件のせいで部分的に非難することができます。
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

3
難読化は、信頼できるツールを使用して行われた場合でも、プログラムの信頼性については何も変わりません。バイナリコンパイルは一種の極端な難読化ですが、ZendのPHPエンジンは信頼できると確信していると思います。(不正なツールを使用して行われた難読化またはコンパイルは考慮すべきではありません)。
Ira Baxter

1
頭脳が半分の人なら誰でも、phpがasp.netで難読化されていないため、現実のエンタープライズソフトウェア市場でphpが苦労している(「存在しない」と読む)ことを知っています。私は他のことを言う弱い心を持った伝道者にうんざりしています。(そして、はい、それが故意の無知です)オープンソースは古すぎて試されており、これ以外の結論を出すにはあまりにも頻繁に欲しがっています:趣味?オープンソース。ジョブ?暗号化。バブルに住んでいる/豊かな父親を持っている愚か者/ばか/人々だけが、これまでに決して違うことを考えられません。
コナー

2
そのコメントは私にはほとんど理解できませんが、オープンソースソフトウェアまたはオープンソースソフトウェア上に構築されたソフトウェアを販売することは意味がないことを意味しているようです。気づかなかったかもしれませんが、Javaは「エンタープライズ」であり、オープンソースであり、.NETと同じくらい成功しています。私の会社は数百万ドルを稼いでおり、難読化を使用する必要はありませんでした。これを自問してみてください。ソフトウェアをサポート/改善できない場合(つまり、他の誰かのソフトウェアをクラックして再販しただけの場合)は、ソフトウェアを販売するとはどういうことですか。
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳ 2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.