Как скомпилировать файл PHP?


Есть ли способ преобразовать PHP файл в bytecode " или что-то подобное, а затем выполнить его так, родной? Нужно что некоторые файлы в системе, были предварительно скомпилированных за счет производительности, в некоторых случаях, и "безопасности" от посторонних глаз в другие.

Поиск, нашел файлы, PHAR, но не нашел, если они являются чисто пакета descompilável как .jar, или bytecode.

Author: Calebe Oliveira, 2014-01-28

2 answers

TL;DR -

Технику, упрощенным, которые вы можете использовать, чтобы защитить себя "от любопытных глаз" и иметь простой тип (низкий) "безопасность" затмить код.

, можно получить более высокий уровень безопасности с ofuscadores код, однако имеющихся средств (что я знаю), оплачиваются и требуют установки расширения в PHP, что не было бы возможно в жилые помещения, на этаже, по пример.

Мотивации

В Частности, несколько лет назад я использовал простой метод запутывания, когда я разработал CMS (, Content Management System) сам, что он был установлен на веб-сайты различных клиентов, то есть жилые помещения, которые находились во власти тех же. Это было в то время, когда расширение PHAR-прежнему была экспериментальной.

Моя цель с obfuscation было избежать, что "племянник" любой (псевдо-вебмастеру), кто знал бы использовать FTP-клиент начал копаться в системе, при попытке скопировать на другой сайт, etc. На самом деле, уже произошла клиента любопытно, учитывая понимать, подглядывать в источник, чтобы попытаться обойти определенные проверки. Итак, это был тип "безопасности for dummies".

Внедрения Упрощенно

Я знала, что "безопасность" получен через daze был только против ищеек без возможности программирования, так как я использовал метод очень простой.

Первый установил Phing, рода Ant для PHP, чтобы я мог автоматизировать процесс запутывания.

Затем я создал task, где, для каждого файла:

  1. , Использовала метод php_strip_whitespace чтобы очистить исходный код.
  2. Codificava содержание в base-64 и положил его в String.
  3. результат был помещен в новый файл в структуре папок параллельный, который носил eval, чтобы добиться выполнения кода.

Код был похож этот, что я нашел в SOEN:

<?php
$infile=$_SERVER['argv'][4];
$outfile=$_SERVER['argv'][5];
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);

Большая разница В том, что изначально я не capturava вывод в переменной и не носил сжатия.

Обратите Внимание, что этот подход является крайне упрощенным. Например, этот метод не принимает во внимание производительность. На личный пример, что я привел не было заметно влияние, но если существует объем посещений и/или разумное количество файлов, это должно быть проблемой. Кроме того, это просто для разработчика, декомпилировать исходный код.

Решений "на рынке

Вместо того, чтобы изобретать колесо, есть некоторые инструменты, которые вы можете использовать, чтобы сделать obfuscation. В самом деле, некоторые могут даже хранить и слепить код, что идет вразрез с той частью вопроса, что относится к производительности.

Обратите Внимание, что у меня есть опыт работы с этими инструментами, так как их не было, когда я нуждался. Однако, я предлагаю вам сделать несколько тестов и проверить на себе, пытаясь вернуться obfuscation, если вы в состоянии сделать это, и с какой трудности. Кроме того, вычислите разницу во времени запросов при использовании кода "нормальной", а код "составлен" или тени.

ТУРЦИЯ

, ofuscador с открытым кодом, который, помимо обфускации кода в целом, изменение названий функций и переменных, чтобы затруднить чтение, даже если удастся сделать обратное проектирование.

PHP Protect

Бесплатный инструмент который обрабатывает все сценарии в папке. Вероятно, использует простой метод запутывания.

Thicket Obfuscator for PHP

Инструмент платит. Говорит использовать различные техники, чтобы улучшить производительность скрипта тени.

IonCube PHP Encoder

Инструмент платит, что позволяет хранить код, зашифровать его, ofuscá его, добавить по истечении времени, ограничения использования, MAC Address, etc. Она уже есть task Phing вызова IoncubeEncoderTask для обработки файлов автоматически.

Это один из инструментов более подробные категории. Однако, для запуска закодированных файлов, необходимо установить расширение в PHP. Вскоре это решение не представляется возможным shared hosts.

Zend Guard

Инструмент платит Zend (компания, которая разрабатывает на PHP), который позволяет затмить код и защитить выполнения скрипта несколькими способами (похож на описанный ранее в IconCube).

Соображений

Никакой защиты гарантирует 100% безопасности. Даже лучшие решения оплачены, представленные выше, не являются 100% безопасными. Сайт zendecode.com, например, утверждает, декомпилировать мгновенно кода Zend Guard и IconCube.

Во всяком случае, на мой взгляд, лучшая защита не находится в коде, но и в предоставлении услуг высокого качества и профессионализма. В конце концов, для нашего счастья или несчастья, не есть много поставщиков программного обеспечения хороших там и скопировать свой код (что это содержит некоторую информацию, конфиденциальную) не даст множество конкурентных преимуществ для потенциальных конкурентов.

 17
Author: utluiz, 2019-06-03 15:59:01

, phar - это не байт, поймите, что может быть сделано на основе потребности:

Рассылки Облегчается

Phar

- Это на самом деле пакет, содержащий файлы, на самом деле не компилируется или байт-код был разработан, чтобы помочь распределения систем.

Performance

APC

Расширение PHP, которое может предварительно скомпилировать файлы в PHP cache bytecode см документации

HHVM

Проект запущен opensource в Facebook, компилирует файлы PHP во время выполнения. Речь идет об альтернативной реализации PHP ориентирована на производительность

Zephir

Linguágem для определения функций и классов php, компилируемые в C, и выставить с помощью расширений php, в основном вы пишете классы и функции так же, как PHP (syntaxe немного отличается) и компилирует его как расширение, хорошим примером является framework phalcon, который полностью собран и установлен, как расширение вашего intalaçåo PHP

И Безопасностью

IonCube и ZendGuard

Запатентованных Средств, которые шифруют свой код, чтобы предотвратить шрифт читается непосредственно (читаются только по engine такие же, установленные рядом с php)

 6
Author: hernandev, 2014-01-28 10:07:33