web-dev-qa-db-ja.com

PHPファイルをバイナリに変換する

PHPファイルをバイナリに変換してWebサーバーにデプロイすることは可能ですか?

17
Hulk

PHPは(比較的)ポータブルな言語であるため、PHPソースをバイナリコードではなくバイトコードにコンパイルすることをお勧めします。この目的のために、 bcompiler という実験プロジェクトがあります。

20
Emre Yazici

数ヶ月前に私はそれ(phpコード保護またはスクリプト保護)を検索しました、そして私の結果は次のとおりでした:

私はいくつかの説明を提供しますが、それらをググって、私を許してみてください。

代わりにphpコンプレッサーに遭遇する可能性があり、コンプレッサーはほぼGZIPおよびその他のhttp転送圧縮メカニズムであるため、検索には注意してください。

Phpスクリプト保護ツールの最も重要な問題は次のとおりです。

  1. Phpランタイムパフォーマンスの速度がどれだけ遅くなるか(低下)(どれだけ速度が低下するか)

  2. PHPサーバーに追加の環境またはインストールされたツールが必要ですか?

  3. 取り扱いが簡単

全体の説明と比較については、次の場所にあります。 http://www.seocompany.ca/software/free-encryption-software.html

難読化ツール

Webには多くの難読化ツールがありますが、コードが機能する保証はありません。

Phpを難読化するためにVisual C++MSVSを組み合わせた方法を見つけましたが、asp.netの経験もあるため、テストしましたが機能しませんでした。

コンバーターとロッカー

  • イオンプロテクターhttp://www.ioncube.com/ ):ああ、無料ではありませんが、彼の有名なことについて多くのことを聞きました名前

  • phc(phpコンパイラ):無料で良いケースでしたが、phcのインストール方法が面倒なので、「BrendanLong」が真実を語りました。しかし結果は魔法であり、イオンなどの有名な名前があります

  • php locker:入手してテストしました。コンパイルされたコードでエラーが発生し、php5未満でリリースされました。絶対に無料ではなく、ccr-ac * ksがphpロッカー用にそれを見つけることを考えている人にとっては不可能です。

  • Zend Guard:ガードするのに最適な方法ですが、サーバーにZendランタイム環境(ZRE)が必要であり、Zend Guardは絶対に必要であるため、phcやionよりも困難です。無料ではありませんが、Zendの人(zendフレームワーク+ zend IDE + zend Guard)の場合は、ZendGuardがzend IDEと互換性があり、コードブロックプロセスが非常に簡単になることを知っておく必要があります。 zendフレームワークとzendガードのどちらかが明らかにランタイム速度を下げるので、mはZendの人ではありません。私はphpスピードのランタイムが大好きです。

  • php -> C/C++ compiling(YES IT'S POSSIBLE)(BEST PERFORMANCE THROUGH THE WORLD):それほど有名ではないので、誰も話さなければ普通です。

  • facebook hiphop:このツールは、Facebookがc ++/cでphpファイルをコンパイルしてパフォーマンスを向上させていますが、最終的にコンパイルされたコードが読み取れなくなりました。覚えていませんが、LinuxまたはMicrosoft Visual C++のphp再コンパイルメカニズムについて十分な知識が必要だと思います。 (しかし、私の弱い記憶を信用してググってはいけません)(そしてPHP php_manual.chmの最新リリースを参照してください)について学ぶために)

最後に、php 5.3と複雑なスクリプトで機能する正規表現を使用して、自己単純なphp難読化ツールを作成したので、OpenSSLとさまざまな暗号化メカニズムに移行し、phpセキュア開発のレビューを取得しました。

あなたが成功することを願っています。

12

これはかなり遅れていますが、あなたが望むことをするはずです。

C++ dllにコンパイルするときに、zendエンジンを使用して独自のカスタム拡張機能を作成します。そのdllをphpディレクトリのextの場所に追加します。その後、独自のphpスクリプトをphp関数として呼び出すことができます。 phpはサーバー側のみであるため、サーバーからコピーして配布しない限り、スクリプトを取得することはできません。

お持ちのバージョンのphpソースライブラリをダウンロードします。 [windows.php.net]必要なzendのものが含まれます。

手順1.新しいプロジェクトを作成し、Visual C++と空のプロジェクトオプションで[一般]を選択します。名前を付けて[OK]をクリックします。私はProject1なので、これを使用します。

手順2.ソリューション名を右クリックして、プロパティを選択します。 [構成のプロパティ]/[一般]項目の[プロジェクトのデフォルト]/[構成タイプ]で[ダイナミックライブラリ(.dll)]を選択します。リリースは使用されていないため、デバッグ構成を変更していることを確認してください。

手順3.VC++ディレクトリで、インクルードライブラリの下に次を追加します。C:\ php-7.1.8-src\Zend C:\ php-7.1.8-src\win32 C:\ php-7.1.8-src\TSRM C:\ php-7.1.8-src\main C:\ php-7.1.8-srcライブラリ:C:\ php-7.1.8\dev

手順4.C/C++プリプロセッサで、ZEND_DEBUG = 0; ZTS = 1; ZEND_WIN32; PHP_WIN32をプリプロセッサ定義に追加します

ステップ5.リンカー入力の下にphp7ts.libを追加します。これは、ご使用のバージョンのphpのライブラリと一致する必要があります

[OK]をクリックして、ソリューションのプロパティ設定を保存します。

次に、関数のコードファイルを追加しましょう(Project1)

ソースファイルフォルダの下で右クリックしてコードを追加します。私はProject1.cppと呼んでおり、ここにソースがあります。 config.w32.h.inの名前をconfig.w32.hに変更し、必要なディレクトリにコピーする必要があります。 Intellisenseは、それがどこを探しているかを教えてくれ、config.w32.h.inはC:\ php-7.1.8-src\win32ディレクトリにあります。

// this needs to match the compiler version that php was compiled with
#define _CRT_SECURE_NO_WARNINGS
#define PHP_COMPILER_ID "VC14"

#pragma once
/* You must include config.w32.h first */
#include "win32/config.w32.h"

#include "php.h"

ZEND_FUNCTION(ReturnString);

zend_function_entry Project1_functions[] =
{
    ZEND_FE(ReturnString, NULL)
    {
        NULL, NULL, NULL
    }
};

zend_module_entry Project1_module_entry =
{
    STANDARD_MODULE_HEADER,
    "Project1 Module",
    Project1_functions,
    NULL, NULL, NULL, NULL, NULL,
    NO_VERSION_YET, STANDARD_MODULE_PROPERTIES
};

ZEND_GET_MODULE(Project1)

ZEND_FUNCTION(ReturnString)
{
    zval* value;

    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &value) == FAILURE)
    {
        RETURN_FALSE;
    }

    convert_to_string(value);

    RETURN_STRING(Z_STRVAL_P(value), true);
}

F7を押してコンパイルすると、Project1\Debug\Project1.dllが作成されます。 Project1をextディレクトリC:\ php-7.1.8\extにコピーし、extension = Project1.dllをphp.iniに追加すれば、準備は完了です。それが機能しない場合は、プロパティを再確認して、何かを見逃していないことを確認してください。

The script is quite simple:

<?php
echo ReturnString("The Returning String");
?>
4
developer68

「バイナリ」の意味によって異なります。

PHPコードをコンパイル(または単に難読化)して、他の誰かが変更しないようにする場合は、バイトコードコンパイラを使用します。1つの例は、 Zend のツールです。その他(ZendのツールはPHPの背後にある主要な会社であり、すべてのバージョンのPHPに対してすべてのツールを完全にQAするため)が好きです)。

PHPコードをコンパイルし、PHPランタイムをそれにリンクしてから(C\C++のように)デプロイしたい場合は、いいえ。おそらく理論上はそれは可能ですが、混乱するでしょう(実用的または実現可能ではなく、誰かが何かをまとめて試してみたとは思わず、出力も特定のアーキテクチャに関連付けられます)。

1
Zac Bowling

WebサーバーがLinuxベースの場合、 。deb または 。rpm (Linuxディストリビューションに応じて)のようなパッケージを作成し、簡単に配布/デプロイできます。

BR、Dawid。

1
Czlowiekwidmo