Чи є обфускатор коду для PHP? [зачинено]


212

Хтось використовував хороший обфускатор для PHP? Я спробував деякі, але вони не працюють для дуже великих проектів. Наприклад, вони не можуть обробляти змінні, які містяться в одному файлі та використовуються в іншому.

Або у вас є якісь інші хитрощі для зупинки розповсюдження вашого коду?


11
Ви впевнені, що вам потрібно?
Веселий

5
@ StevenA.Lowe: остерігайтеся висміяти PHP. :-)
Марко Демайо

89
Ще одне дійсно добре, конструктивне питання, пов’язане з програмуванням, в ідеальному форматі запитань, яке закривається як неконструктивне. Ганьба за переповнення стека ...
Петро

6
Це стек переповнення. Єдине, що більш плодотворне, ніж закриті питання, які не слід закривати, - це полум'я користувача, коли сюди приходить якась бідна особа і просить допомоги.
Mac

2
Якщо ви вважаєте, що це не повинно бути закритим, голосуйте за повторне відкриття.
Іра Бакстер

Відповіді:


240

Ви можете спробувати захист PHP, який є безкоштовним обфускатором PHP, щоб притупити ваш PHP-код.
Це дуже приємно, просте у використанні, а також безкоштовно.
EDIT: Ця послуга більше не працює.

Щодо того, що тут писали інші про непритуплення, тому що воно може бути зламане тощо:
я маю на них відповісти лише одне - не замикайте двері вашого будинку, тому що ваш замок може забрати будь-хто.
Це саме так, припухлість не призначена для запобігання крадіжки 100% коду. Потрібно лише зробити це трудомістким завданням, тому дешевше заплатити за оригінальний кодер. Сподіваюсь, це допомагає.


105
+1 за вказівку на те, що затьмарення - це важче, не неможливо.
Ашкан Х. Назарій

3
зауважте, що шифрування вихідного коду замість обмацування не робить також неможливим його розшифрування, просто зробити це дуже важко.
xorinzor

9
Спробував це, але не сподобалось. Він змінює лише назви змінних, він не видаляє жодних коментарів ..
Пісу

1
@Schwern, Залиште незамкненими двері, тоді найміть Колумбо та дійсно доброго адвоката, щоб прикрити себе;)
Девід Ньюкомб

2
@David Newcomb - Хто хоче заплатити за дійсно хорошого юриста, коли можна просто зачинити двері?
azoundria

109

Люди запропонують вам обскураторів, але жодна кількість обфускування не може перешкодити комусь отримати ваш код. Жоден. Якщо ваш комп'ютер може запустити його, або у випадку з фільмами та музикою, якщо він може відтворити його, користувач може отримати на нього. Навіть компіляція його до машинного коду просто ускладнює роботу. Якщо ви використовуєте обфускатор, ви просто обманюєте себе. Гірше, ви також забороняєте своїм користувачам виправляти помилки чи вносити зміни.

Музичні та кінокомпанії ще не дуже з цим погодилися, вони все ще витрачають мільйони на DRM.

У інтерпретованих мовах, таких як PHP та Perl, це банально. У Perl було багато обкускуторів коду, тоді ми зрозуміли, що ви можете тривіально їх декомпілювати.

perl -MO=Deparse some_program

У PHP є такі речі, як DeZender та Show My Code .

Моя порада? Напишіть ліцензію та знайдіть адвоката. Єдиний інший варіант - не видавати код і замість цього запустити розміщену службу.

Дивіться також запис perlfaq на цю тему .


220
Я з вами згодний здебільшого, але ОП попросив рекомендації щодо продукту, а не лекції про достоїнства відкритого коду.
Елі

36
Не має нічого спільного з Open Source, що полягає в розмиванні коду, а не просто в змозі його побачити. Реальність полягає в тому, що будь-який код або дані, які працюють на машині користувача, є в кінцевому підсумку прозорими, незалежно від того, як ви їх компілюєте або обмацуєте або шифруєте, повну зупинку. ОП має це розуміти.
Шверн

7
@JamShady: Заплутаність не означає, що ви не можете виправити помилки або внести зміни. Якщо ви тупо обдумуєте вихідний код, кидаєте оригінал і наполягаєте на збереженні затмілого результату, так, ви нічого не зможете зробити. Хороші обскуратори наполягають на тому, щоб ви зберегли свій код і відображення до результату, який ви отримали; ви можете налагоджувати / змінювати свій оригінальний код, надсилати заморожені патчі своїм клієнтам і навіть діагностувати його проблеми, використовуючи карту для перетворення прихованих скарг назад у читабельні. У нього немає карти, що робить це безпечним.
Іра Бакстер

34
Питання: Як, відповідь: Вам не слід = не корисно
cmc

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 - Кодидакт

20

Я не впевнений, що ви можете охарактеризувати опустошення інтерпретованої мови як безглузде (я не в змозі додати коментар до публікації Шверна, тому тут йде новий запис).

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

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


16

Дивіться наш SD-точний PHP Obfuscator щодо обфускатора, який добре працює з довільно великими наборами сторінок. Він функціонує головним чином шляхом шифрування імен ідентифікаторів. Завдяки скромному та великому застосуванню, це може зробити код надзвичайно важким для розуміння, у чому полягає вся мета.

Він не витрачає жодної енергії на схеми "eval (декодування ( кодований код програми ))", що робить багато PHP "обфускаторів" [це "кодер", а не "обфускатор", тому що будь-який clod може знайти цей виклик і виконати сам eval-декодування і отримати розшифрований код.

Він використовує мовний точний аналізатор для обробки PHP; він підкаже, чи ваша програма синтаксично недійсна. Що ще важливіше, вона точно знає всю мову; він не загубиться або заплутається, і він не порушить ваш код (інше, що трапиться, якщо ви придушите "неправильно", наприклад, не вдасться правильно визначити публічний API коду).

Так, він обфускує ідентифікатори однаково на сторінках; якби цього не зробити, результат не працював.


1
Флаггер: ви можете з люб'язністю сказати, чому ви позначили це. Він відповідає безпосередньо на питання ОП, включаючи його конкретне питання.
Іра Бакстер

З чого я можу сказати, це EXE, який працює лише під Windows? Принаймні, eval - це .exe файл ...
Крейг Джейкобс

Файл eval - це інсталятор на основі .exe. Складна істина полягає в тому, що встановлений продукт зазвичай працює із сценарію .cmd, оскільки під ним паралельна мова програмування, але цього ви ніколи не побачите. Він був розроблений як передусім продукт Windows; однак, якщо ви встановите його на Linux із Wine, він запускатиметься із скриптами .sh, які встановлені разом із ним, як ніби він є рідним інструментом Linux. Якщо ви використовуєте частину графічного інтерфейсу (необов’язково, більшість людей хоче запустити його як сценарій у процесі збирання виробництва), він використовує вбудовану Java у Windows та рідну Java на Linux.
Іра Бакстер

Це правда, що товсті потрібен аддон до хостингового простору? Якщо так, то як це встановити на спільному хостингу?
Стівен Аделакун

@StephenAdelakun: Толстовка не потребує змін на сервері. Завантажте його і перевірте документацію.
Іра Бакстер

14

Найкраще, що я бачив, - це Zend Guard .


2
SD PHP Obfuscator настільки ж хороший і коштує приблизно 1/5.
Іра Бакстер

1
@SalmanPK А причина цього повинна бути очевидною?
The Pellmeister

@SalmanPK Потрібен додаток до простору веб-хостингу. Мабуть, робить і Zend Guard. Не впевнений, який найбільш мейнстрім. У будь-якому випадку, проблема полягає в тому, що вона скорочує вашу потенційну аудиторію.
Джеймс П.

1
PHP Obfuscator SD в SD перетворює все в малі регістри. Це буде проблемою, якщо ви використовуєте рамку.
Аміл Вадувавара

1
@JamesPoulson: Незрозуміло, чи буде ваше зауваження вказано на обфускатора SD PHP. Щоб було зрозуміло, він не потребує додатку до веб-хостингу.
Іра Бакстер

10

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

Нещодавно я написав це на Java, щоб придушити свої проекти PHP, тому що я не знайшов жодного гарного та сумісного готового написаного в мережі, я вирішив викласти його в Інтернет як saas, тому всі користуються ним безкоштовно. Це не змінює імена змінних між різними сценаріями для максимальної сумісності, але обтяжує їх дуже добре, з випадковою логікою, і кожна інструкція. Струни ... все. Я вважаю, що це набагато краще, ніж цей баггі-кодекліпс, це, до речі, написано в PHP і дуже повільно :)


Виглядає добре ... але це безпечно? Я можу сказати, чи можуть інші легко розшифрувати це легко?
shasi kanth

Я можу запевнити вас, що до цього моменту NOBODY може знешкодити код, затуманений цим обфускатором.
PatlaDJ

3
[цитування необхідне] - шифрування домашньою мовою - це безпека через незрозумілість, яка взагалі не є безпекою.
Кріс Бейкер

8
"Я можу запевнити вас, що до цього моменту NOBODY може знезаразити код" Навіть PHP? Якщо PHP може це зробити, може хтось інший. Дивлячись на зразок коду на вашому веб-сайті, десь ви матимете eval stament, який скидає код, змінить його на відлуння, і вам буде показаний код.

3
УВАГА: Цей метод може бути тривіальним декодируется назад в вихідні імена змінних, см: lombokcyber.com/en/detools/decode-pipsomania
Зейн Хупер

3

Thicket ™ Obfuscator для PHP

Інструмент PHP Obfuscator розшифровує вихідний код PHP, щоб зробити його дуже важким для розуміння чи реверсивного інженера (приклад). Це забезпечує значний захист інтелектуальної власності вихідного коду, яка повинна розміщуватися на веб-сайті або відправлятися замовнику. Він є членом родини SD Obfuscators вихідного коду.


TrueBug.com недоступний. Я знаю, що я публікую коментар більше ніж 3 роки, але чи можете ви допомогти з новою URL-адресою trueBug, якщо така є?
Стівен Аделакун

@StephenAdelakun Вам потрібен лише TrueBug? Використовуйте це: TruBug PHP Obfuscator .
Praveen Kumar Purushothaman

На жаль, посилання не працює. Або я щось пропускаю?
Стівен Аделакун

@StephenAdelakun Я щойно перевірив, він працює.
Praveen Kumar Purushothaman

1
@StephenAdelakun Чому тільки це? :(Це все одно мертве програмне забезпечення. Зараз є кращі та дивовижніші?
Praveen Kumar Purushothaman

2

Використання SourceGuardian добре, оскільки поставляється із прохолодним та простим у користуванні графічним інтерфейсом.

Але майте на увазі:

Зверніть увагу на його інші забавні умови ліцензування.

  • Вам дозволяється запускати лише 1 на машині - поки це прийнятно
  • Якщо ви хочете запустити інтерфейс командного рядка на іншій машині, скажімо, на своєму веб-сервері, ВИ ПОТРІБНЕ ДРУГА ЛІЦЕНЗІЯ (Так, це смішно, і я теж чую, як ви смієтеся).

2
Це мені здається нормальним! 2 машини = 2 ліцензії! Зазвичай те, що люди роблять, - це кодувати все це на одній машині, а потім завантажувати його на іншу.
Девід Ньюкомб

@davidnewcomb ти, схоже, не розумієш. Зазвичай ви шифруєте код на своєму розробниковому апараті перед його доставкою. Якщо вам потрібно зробити це в Інтернеті, інтерфейс командного рядка також вимагає додаткової ліцензії, що, очевидно, не вірно. Ви, як правило, розміщуєте інтерфейс командного рядка на веб-сервері, а не на локальному вікні.
Гер

2
TL; DR хороший захист, дурні умови ліцензування.
Гер

1
Має бути 1 ліцензія на користувача, а не на машину.
beppe9000

@ beppe9000 Повністю згоден!
Гер

-16

Obfuscation лише додає до вашої програми ще один шар потенційних помилок та вразливості безпеки. Будь ласка, не робіть цього.

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

Якщо ваш код "чудовий", сухарики пройдуть велику довжину, щоб розповсюдити його, незалежно від того, чи він затуманений чи ні. Якщо ніхто не знає / не піклується про ваш код, вони, ймовірно, не будуть.


7
Некваліфікований? На основі яких доказів? Я їх пишу. Перевірте мою біографію перед тим, як вирушати на широкі узагальнення. semanticdesigns.com/Company/People/idbaxter
Іра Бакстер

5
@Ira: Моє твердження все ще справедливо. Більшість прихованих кодів можна зламати протягом декількох хвилин. Я конкретно мав на увазі, більшість людей, які роблять це, некваліфіковані, не всі . Перше, що прийшло в голову - Ioncube, і, звичайно, досить, воно було опубліковано вразливістю: osvdb.org/show/osvdb/41708 . Потім знову, можливо, ви можете частково звинувачувати це в незрозумілих вимогах безпеки PHP.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

3
Припухлість, якщо це зроблено з надійним інструментом, нічого не змінює щодо надійності програми. Двійкова компіляція - це своєрідна надзвичайна заплутаність, і все ж я думаю, ви впевнені, що двигун PHP Zend надійний. (Заплутаність або компіляція, виконана з поганими інструментами, не повинна зараховуватися).
Іра Бакстер

1
той, хто має половину мозку, знає, що php бореться (читайте "не існує") на реальному світовому ринку корпоративного програмного забезпечення, тому що він не затуманений на "asp.net". Мені так нудно слабко налаштованих євангелістів, що говорять що-небудь ще. (і так, ось у чому полягає навмисне невігластво) Open Source був занадто довгим, і його судили і занадто часто хотіли, щоб вони хотіли отримати якесь інше, ніж це: хобі? Відкрите джерело. Робота? Шифрувати. Тільки дурні / ідіоти / люди, які живуть у бульбашці / мають багатий патер, можуть коли-небудь коли-небудь думати інше.
conners

2
Цей коментар для мене майже незрозумілий, але, мабуть, це означає, що немає сенсу продавати програмне забезпечення з відкритим кодом або програмне забезпечення, яке базується на програмному забезпеченні з відкритим кодом. Якщо ви цього не помітили, Java - "підприємство", з відкритим кодом та настільки ж успішне, як і .NET річ. моя компанія заробляє мільйони доларів, і нам ніколи не довелося користуватися придушенням. Запитайте себе в цьому: яке благо продає програмне забезпечення, якщо ви не можете його підтримувати / вдосконалювати (тобто: ви просто зламали чуже програмне забезпечення і перепродали його)?
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.