Есть ли обфускатор кода для PHP? [закрыто]

212

Кто-нибудь использовал хороший обфускатор для PHP? Я пробовал некоторые, но они не работают для очень больших проектов. Например, они не могут обрабатывать переменные, которые включены в один файл и используются в другом.

Или у вас есть какие-то другие приемы, чтобы остановить распространение вашего кода?

user29593
источник
11
Вы уверены, что вам нужно?
Веселый
5
@ StevenA.Lowe: остерегайтесь высмеивать PHP. :-)
Марко Демайо
89
Еще один действительно хороший, конструктивный вопрос, связанный с программированием, в идеальном формате вопросов и ответов, который закрыт как неконструктивный. Позор на переполнении стека ...
Петр
6
Это переполнение стека. Единственное, что является более плодотворным, чем закрытые вопросы, которые не следует закрывать, - это пламя пользователя, когда сюда приходит какой-то негодяй и просит помощи.
Mac
2
Если вы думаете, что это не должно быть закрыто, то проголосуйте за повторное открытие.
Ира Бакстер

Ответы:

240

Вы можете попробовать PHP protect, который является бесплатным обфускатором PHP, чтобы запутать ваш PHP-код.
Это очень приятно, легко и бесплатно.
РЕДАКТИРОВАТЬ: Эта услуга больше не работает.

Что касается того, что другие писали здесь о том, что не следует использовать запутывание, потому что оно может быть сломано и т. Д. У
меня есть только одно, чтобы ответить на них - не запирайте дверь дома, потому что любой может взломать ваш замок.
Это как раз тот случай, когда обфускация не предназначена для предотвращения 100% кражи кода. Нужно только сделать это трудоемкой задачей, поэтому дешевле будет заплатить оригинальный кодер. Надеюсь это поможет.

Йосси
источник
105
+1 за то, что указал на тот факт, что запутывание - это сделать его труднее, а не невозможно.
Ашкан Х. Назар
3
обратите внимание, что шифрование исходного кода вместо того, чтобы запутывать его, также не делает невозможным его дешифрование, это действительно очень трудно сделать.
xorinzor
9
Пробовал, но не понравилось. Он только меняет имена переменных, но и не удаляет комментарии ..
Пису
1
@Schwern, оставь свою дверь незапертой, а затем найми Коломбо и действительно хорошего адвоката, чтобы прикрыться;)
Дэвид Ньюкомб
2
@ Дэвид Ньюкомб - Кто хочет заплатить действительно хорошему адвокату, когда ты можешь просто запереть дверь?
Азундрия
109

Люди предложат вам обфускаторы, но никакая обфускация не сможет помешать кому-то получить ваш код. Никто. Если ваш компьютер может запустить его, или в случае фильмов и музыки, если он может воспроизводить его, пользователь может получить его. Даже компиляция его в машинный код только усложняет работу. Если вы используете обфускатор, вы просто обманываете себя. Хуже того, вы также запрещаете своим пользователям исправлять ошибки или вносить изменения.

Музыкальные и кинокомпании еще не совсем смирились с этим, они все еще тратят миллионы на DRM.

В интерпретируемых языках, таких как PHP и Perl, это тривиально. Раньше в Perl было много обфускаторов кода, а потом мы поняли, что их можно легко декомпилировать.

perl -MO=Deparse some_program

В PHP есть такие вещи, как DeZender и Show My Code .

Мой совет? Написать лицензию и получить адвоката. Единственный другой вариант - не выдавать код и вместо этого запускать размещенный сервис.

Смотрите также запись perlfaq на эту тему .

Schwern
источник
220
Я в основном согласен с вами, но ОП попросил рекомендации по продукту, а не лекцию о достоинствах открытого исходного кода.
Илай
36
Не имеет ничего общего с открытым исходным кодом, который состоит в том, чтобы запутать код, а не просто увидеть его. Реальность такова, что любой код или данные, которые выполняются на компьютере пользователя, в конечном итоге прозрачны, независимо от того, как вы их компилируете, запутываете или шифруете - полная остановка. ОП должен это понимать.
Шверн
7
@JamShady: Запутывание не означает, что вы не можете исправить ошибки или внести изменения. Если вы тупо запутываете исходный код, выбрасываете оригинал и настаиваете на сохранении запутанного результата, да, вы ничего не сможете сделать. Хорошие обфускаторы настаивают на том, чтобы вы сохранили свой код и отображение на обфусцированный результат; Вы можете отлаживать / изменять исходный код, отправлять запутанные исправления своим клиентам и даже диагностировать его проблемы, используя карту для преобразования запутанных жалоб обратно в читаемые. У него нет карты, которая делает это безопасным.
Ира Бакстер
34
Вопрос: Как, Ответ: Вы не должны = не
помогать
26
@cmc Я уверен, что многие люди прямо ответят на этот вопрос, так что нет никаких потерь, если я выберу другую тактику. Половина смысла спрашивать эксперта - они знают, когда вы задаете неправильный вопрос, чтобы решить реальную проблему. Это приложение из "5 Whys". en.wikipedia.org/wiki/5_Whys Настоящая проблема / вопрос заключается в том, «как я могу помешать людям читать / красть мой код PHP». Ответ таков: если вы отправите код, который вы не можете, но вы можете потратить много времени и денег, пытаясь получить ложное чувство безопасности. Разве это не было более полезным, чем список обфускаторов?
Шверн
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.
Ира Бакстер
2
Большую часть времени непрограммисты пытаются путем поиска некоторых строк в исходном коде, которые они хотят изменить, я также ищу такое решение, которое только помешает непрограммистам изменить исходный код, например, имя домена, имя базы данных, пользователей и т. Д.
Асад Камран
Это очень полезный ответ для меня. Я заинтересован только в том, чтобы запретить пользователю легко открывать мой «database.php» в блокноте и видеть имя пользователя и пароль моей базы данных.
TimH - Codidact
20

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

Я думаю, что немного недальновидно предполагать, что вы знаете все возможные сценарии, когда кто-то хотел бы запутать код, и вы предполагаете, что кто-то действительно захочет пойти на любую необходимую длину, чтобы просмотреть этот код после обфускации. Рассмотрим мой текущий сценарий:

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

tomfumb
источник
16

Смотрите наш SD Thicket PHP Obfuscator для обфускатора, который прекрасно работает с произвольно большими наборами страниц. Он работает главным образом путем скремблирования имен идентификаторов. В скромных и больших приложениях это может сделать код чрезвычайно сложным для понимания, что и является целью.

Он не тратит энергию на схемы «eval ( decode ( encodedprogramcode ))», что делают многие «обфускаторы» PHP [это «кодировщики», а не «обфускаторы»], потому что любой ком может найти этот вызов и выполнить eval-decode сам и получить декодированный код.

Он использует точный синтаксический анализатор для обработки PHP; он скажет вам, если ваша программа синтаксически неверна. Что еще более важно, он знает весь язык точно; он не будет потерян или запутан, и он не сломает ваш код (за исключением того, что происходит, если вы запутываете «неправильно», например, не можете правильно определить публичный API кода).

Да, он одинаково запутывает идентификаторы на разных страницах; если этого не сделать, результат не сработает.

Ира Бакстер
источник
1
Flagger: вы могли бы любезно сказать, почему вы отметили это. Он напрямую отвечает на вопрос ОП, включая его конкретную проблему.
Ира Бакстер
Из того, что я могу сказать, это EXE, который работает только под Windows? По крайней мере, eval - это файл .exe ...
Крейг Джейкобс
Файл eval является установщиком на основе .exe. Сложная правда в том, что установленный продукт обычно запускается из сценария .cmd, потому что под ним находится язык параллельного программирования, но вы этого никогда не увидите. Это было разработано как прежде всего продукт Windows; однако, если вы установите его в Linux с Wine, он будет работать со сценариями .sh, которые устанавливаются вместе с ним, как если бы это был встроенный инструмент Linux. Если вы используете часть с графическим интерфейсом (необязательно, большинство людей хотят запускать ее как сценарий в процессе производственной сборки), она использует собственную Java в Windows и собственную Java в Linux.
Ира Бакстер
Правда ли, что Thicket требует аддона к хостингу? Если да, то как это устанавливается на виртуальном хостинге?
Стивен Аделакун,
@StephenAdelakun: Тикет не требует никаких изменений на сервере. Загрузите его и проверьте документацию.
Ира Бакстер
14

Лучшее, что я видел, это Zend Guard .

CMS
источник
2
SD PHP Obfuscator так же хорош, и стоит около 1/5.
Ира Бакстер
1
@SalmanPK И причина этого должна быть очевидной?
Pellmeister
@SalmanPK Требуется дополнение к пространству веб-хостинга. Zend Guard, вероятно, тоже. Не уверен, что является наиболее распространенным. В любом случае, проблема в том, что это сокращает вашу потенциальную аудиторию.
Джеймс П.
1
PHP Obfuscator от SD преобразует все в нижний регистр. Это будет проблемой, если вы используете фреймворк.
Амил Вадувавара
1
@JamesPoulson: неясно, направлено ли ваше замечание на обфускатор SD PHP. Просто чтобы быть ясно, это не требует каких-либо дополнений к пространству веб-хостинга.
Ира Бакстер
10

Попробуйте это: http://www.pipsomania.com/best_php_obfuscator.do

Недавно я написал это на Java, чтобы запутать свои проекты PHP, потому что я не нашел ни одной хорошей и совместимой готовой программы, написанной в сети, я решил выложить ее в Интернет как saas, чтобы все использовали ее бесплатно. Он не меняет имена переменных между различными скриптами для максимальной совместимости, но очень хорошо запутывает их, со случайной логикой, каждой инструкцией. Струны ... все. Я считаю, что это намного лучше, чем этот глючный кодеклип, который, кстати, написан на PHP и очень медленный :)

PatlaDJ
источник
Выглядит хорошо ... но это безопасно? Я имею в виду, могут ли другие расшифровать это легко?
Шаси Кант
Я могу заверить вас, что к этому моменту НИКТО не сможет обфусцировать код, запутанный этим обфускатором.
PatlaDJ
3
[цитата нужна] - доморощенное шифрование - это безопасность через неизвестность, которая вовсе не является безопасностью.
Крис Бейкер
8
«Я могу заверить вас, что к этому моменту НИКТО не сможет обфусцировать код» Даже PHP? Если PHP может это сделать, может кто-то другой. Посмотрев пример кода на вашем сайте, где-то у вас будет оценка eval, которая выводит код, измените его на эхо, и ваш код будет отображаться.
3
ПРЕДУПРЕЖДЕНИЕ. Этот метод можно легко декодировать обратно к исходным именам переменных, см. Lombokcyber.com/en/detools/decode-pipsomania
Зейн Хупер,
3

Thicket ™ Обфускатор для PHP

Инструмент PHP Obfuscator скремблирует исходный код PHP, чтобы его было очень трудно понять или перепроектировать (пример). Это обеспечивает значительную защиту интеллектуальной собственности исходного кода, которая должна быть размещена на веб-сайте или отправлена ​​клиенту. Он является членом семьи Обфускаторов исходного кода SD.

Правин Кумар Пурушотаман
источник
TrueBug.com недоступен. Я знаю, что публикую комментарий более чем через 3 года, но не могли бы вы помочь с новым URL-адресом trueBug, если таковой имеется?
Стивен Аделакун
@StephenAdelakun Вам нужен только TrueBug? Используйте это: TruBug PHP Obfuscator .
Правин Кумар Пурушотаман
Извините, ссылка не работает. Или я что-то упустил?
Стивен Аделакун,
@ StefhenAdelakun Я только что проверил, все работает.
Правин Кумар Пурушотхаман
1
@StephenAdelakun Почему только это? :(Это мертвое программное обеспечение в любом случае. Есть лучшие и классные, правда?
Правин Кумар Пурушотаман
2

Использование SourceGuardian хорошо, так как поставляется с классным и простым в использовании графическим интерфейсом.

Но учтите:

Обратите внимание на его - другие смешные - условия лицензирования.

  • Вам разрешено запускать только 1 на машину - пока это приемлемо
  • Если вы хотите запустить интерфейс командной строки на другом компьютере, скажем, на своем веб-сервере, ВАМ НУЖНА ДРУГАЯ ЛИЦЕНЗИЯ (Да, это смешно, и я тоже слышу, как вы смеетесь).
Herr
источник
2
Это кажется нормальным для меня! 2 машины = 2 лицензии! Обычно люди делают все это на одном компьютере, а затем загружают его на другой компьютер.
Дэвид Ньюкомб
@ davidnewcomb вы, похоже, не поняли. Вы обычно шифруете код на своем компьютере разработчика перед его отправкой. В случае, если вам нужно сделать это онлайн, интерфейс командной строки также требует дополнительной лицензии, что, очевидно, не правильно. Вы склонны размещать интерфейс командной строки на веб-сервере, а не на локальном компьютере.
герр
2
TL; DR хорошая защита, глупые условия лицензирования.
герр
1
Должно быть 1 лицензия на пользователя, а не на машину.
beppe9000
@ beppe9000 Полностью согласен!
герр
-16

Запутывание только добавляет еще один слой потенциальных ошибок и уязвимостей в вашу программу. Пожалуйста, не делай этого.

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

Если ваш код «великолепен», взломщики пройдут немало усилий, чтобы распространить его, независимо от того, скрыт он или нет. Если никто не знает / не заботится о вашем коде, они, вероятно, тоже не будут.

L̳o̳̳n̳̳g̳̳p̳o̳̳k̳̳e̳̳
источник
7
Nonskilled? На основании каких доказательств? Я пишу их. Проверьте мою биографию, прежде чем делать обширные обобщения. semanticdesigns.com/Company/People/idbaxter
Ира Бакстер
5
@ Ира: Мое заявление все еще в силе. Большая часть запутанного кода может быть взломана за считанные минуты. Я специально имел в виду, что большинство людей, которые это делают, не все . Первым, что пришло на ум, был Ioncube, и, конечно же, у него была опубликована уязвимость: osvdb.org/show/osvdb/41708 . С другой стороны, вы, вероятно, можете частично обвинить в неясных требованиях безопасности PHP.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
3
Запутывание, если оно выполнено с помощью надежного инструмента, ничего не меняет в надежности программы. Бинарная компиляция - это своего рода крайняя запутанность, и все же я думаю, вы уверены, что PHP-движок Zend надежен. (Запутывание или компиляция с использованием плохих инструментов не должны учитываться).
Ира Бакстер
1
Любой, у кого полусознания, знает, что php борется (читай «несуществующий») на реальном рынке корпоративного программного обеспечения, потому что он не запутан на сайтах asp.net. Я так устал от слабоумных евангелистов, которые говорят что-то еще. (и да, вот что такое преднамеренное невежество) Открытый исходный код слишком долго отсутствовал, его пытались найти, и он слишком часто нуждался в каких-либо других выводах, кроме этого: хобби? Открытый источник. Работа? Зашифровать. Только дураки / идиоты / люди, которые живут в пузыре / имеют богатого патера, могут когда-либо когда-либо думать иначе.
Коннерс
2
Этот комментарий для меня практически непонятен, но, похоже, он подразумевает, что нет смысла продавать программное обеспечение с открытым исходным кодом или программное обеспечение, основанное на программном обеспечении с открытым исходным кодом. В случае, если вы не заметили, Java - это «предприятие», с открытым исходным кодом, и такая же успешная, как и эта вещь .NET. моя компания зарабатывает миллионы долларов, и нам никогда не приходилось использовать запутывание. Спросите себя: что хорошего в продаже программного обеспечения, если вы не можете его поддерживать / улучшать (то есть: вы просто взломали чужое программное обеспечение и перепродали его)?
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳