web-dev-qa-db-ja.com

縮小/難読化PHPコード

私は Haxe を使用してPHPコードを生成します(これは、Haxe言語でコードを記述し、コンパイル後に大量のphpファイルを取得することを意味します)。彼はHaxeで作成された古いプロジェクトに新しい機能が必要だと私に言いました。また、彼は自分のニーズに合わせてコードの小さな変更をいくつか変更したと言いました。今では、最初に彼の変更をHaxeコードに移植してから、新しい機能を追加しています。そうしないと、次にプロジェクトをコンパイルするときに彼の変更が上書きされるためです。

これが再び発生するのを防ぐために、私はPHPコードを最小化/難読化するある種のプログラムを探しています。目標は、コードを可能な限り読み取り不可/編集不能にすることです。
理想的なツールはLinuxで実行され、フォルダー全体とファイルを含むすべてのフォルダーを処理できます。

誰か提案はありますか?

16
TheHippo

私はコメントに同意します、あなたがしていることは非常に手に負えませんが、このビジネスで10年後、私は1つのことを証明できます:あなたが得るコードの半分は非常に複雑で、縮小されているかもしれません、そして実際には関数/変数名多くの場合、完全に恣意的であるため、縮小されたjsを編集しましたが、縮小されていないコードほど面倒ではありませんでした。

私はそのようなスクリプト/プログラムを見つけることができませんでした。おそらくこれはPHPの精神に反していて、少し手に負えないからです。

まず、Phpは空白に敏感ではないため、ステップ1は、文字列の外側にあるすべての改行と空白を削除することです。

それは平均的ないじくり回しをいじるのを難しくするでしょう、中級のプログラマーはただすべての; {}を見つけて$ 1\nまたはその効果のための何かに置き換えるでしょう。

次のステップは、get_defined_functionsを取得し、その配列(返された配列の「user」キー)を保存することです。これを行うには、すべてのファイルを含める必要があります。

オブジェクト指向コードの場合は、get_defined_classesも必要になります。その配列を保存します。

基本的に、変数、メソッド、およびクラスインスタンスを取得する必要があり、クラスとget_object_varsをインスタンス化する必要があります。また、定数やクラス変数など、他の多くの情報を取得できることを確認できます。 。

次に、それらのリストを取得し、それらをループして、それぞれに一意の名前を作成してから、すべてのファイルでpreg_replaceまたはstr_replaceを作成します。

テストコピーでこれを実行し、どのようなエラーが発生するかを確認してください。

ただし、明確にするために、難読化のために難読化する人々のために予約された特別な場所が地獄にあります。

チェックアウト: get_defined_functionsget_declared_classes そして、周りのリンクをたどって、何ができるかを確認してください。

17
J. Martin

関数でphpbuidを使用しないのはなぜですか php_strip_whitespace()

string php_strip_whitespace ( string $filename )

PHPソースコードをファイル名に返し、PHPコメントと空白を削除します。これは、スクリプト内の実際のコードの量を量と比較して判断するのに役立ちます。これは、コマンドラインからphp-wを使用するのと似ています。

24
RoboTamer

Zend Guard を使用してPHPコードを特定のクライアントでエンコードしますが、Parrotsが言ったように、youコードを所有します。特定の状況でのみエンコードし、コードの所有権を保持することが明示されている場合にのみ、そうでない場合はParrotsが正しく、クライアントはコードを変更する権利を持ちます。

4
catsby

私は知っています Zendguard 、Expressionengineはそれを使用して試用版のコアコードを暗号化しました。あなたはそれを支払う必要がありますが、あなたはいつでもそれを試してみることができます。

しかし、彼の変更を移植しなければならないことへの不満は理解していますが、彼らはあなたからコードを購入したと思いますか?彼らはそれを変更する権利を持っています。あなたには彼らの変更を移植するために彼らに追加​​料金を請求する権利があります;)あなたが彼らのために働くのをやめたとしたら、どうして彼らはコードを更新するために誰かを雇うことができるでしょうか?

4
Parrots

PHP Obfuscator は、コメント、空白、およびスクランブル識別子を削除する作業を正確に実行します。

PHPファイルの完全なセット全体で動作し、スクランブルされたシンボルがそれらのファイル間で一貫してスクランブルされるようにし、スクランブル後でも正しい動作を保証します。

編集2013:文字列リテラルを暗号化して読み取り不能にするようになりました。 Windowsでは動作し、LinuxではWineで動作します。

2
Ira Baxter

PHP難読化ツール または bcompiler PHP拡張子 )を試すことができます。

1
Alix Axel

PHP用のminify-serviceを見つけました。それは本当に便利に見えます。彼らは、難読化がまもなく利用可能になると言っています。これが本当だといいのですが:) http://customhost.com.ua/php-minify/

0
andrew