Czy istnieje PHP obfuscator kodu? [Zamknięte]


212

Czy ktoś używał dobrego obfuscatora dla PHP? Próbowałem, ale nie działają one przy bardzo dużych projektach. Nie obsługują na przykład zmiennych zawartych w jednym pliku i używanych w innym.

A może masz jakieś inne sztuczki, aby zatrzymać rozprzestrzenianie się kodu?


11
Czy na pewno potrzebujesz?
Wesoły

5
@ StevenA.Lowe: strzeż się żartowania z PHP. :-)
Marco Demaio

89
Jeszcze jedno bardzo dobre, konstruktywne pytanie związane z programowaniem w doskonałym formacie pytań i odpowiedzi, które zostaje zamknięte jako niekonstruktywne. Wstyd z powodu przepełnienia stosu ...
Petr

6
To przepełnienie stosu. Jedyną rzeczą bardziej płodną niż pytania zamknięte, które nie powinny być zamknięte, jest płomień użytkownika, gdy przychodzi tu jakiś słaby slob i prosi o pomoc.
Mac

2
Jeśli uważasz, że nie należy tego zamykać, głosuj, aby ponownie otworzyć.
Ira Baxter,

Odpowiedzi:


240

Możesz wypróbować ochronę PHP, która jest darmowym obfuscatorem PHP do zaciemnienia kodu PHP.
Jest bardzo ładny, łatwy w użyciu, a także bezpłatny.
EDYCJA: Ta usługa nie jest już dostępna.

Co do tego, co napisali tutaj inni o nieużywaniu zaciemnienia, ponieważ można je złamać itp .:
Mam tylko jedną odpowiedź, aby im odpowiedzieć - nie zamykaj drzwi domu, ponieważ każdy może otworzyć zamek.
Dokładnie tak jest, zaciemnianie nie ma na celu zapobiec 100% kradzieży kodu. Wystarczy, że będzie to czasochłonne zadanie, więc taniej będzie zapłacić oryginalnemu programistowi. Mam nadzieję że to pomoże.


105
+1 za zwrócenie uwagi na fakt, że zaciemnianie polega na utrudnianiu, a nie niemożliwym.
Ashkan Kh. Nazary

3
zwróć uwagę, że szyfrowanie kodu źródłowego zamiast zaciemniania nie uniemożliwia też odszyfrowania, jest to po prostu bardzo trudne.
xorinzor

9
Próbowałem, ale mi się nie podobało. Zmienia tylko nazwy zmiennych, nie usuwa też komentarzy.
Pisu,

1
@ Schwern, Zostaw otwarte drzwi, a następnie zatrudnij Columbo i naprawdę dobrego prawnika, aby się na siebie zakrył;)
David Newcomb

2
@David Newcomb - Kto chce zapłacić naprawdę dobrego prawnika, kiedy można po prostu zamknąć drzwi?
azoundria

109

Ludzie będą oferować ci zaciemnienia, ale żadna ilość zaciemnienia nie może uniemożliwić komuś dostępu do twojego kodu. Żaden. Jeśli komputer może go uruchomić, lub w przypadku filmów i muzyki, jeśli można go odtworzyć, użytkownik może to zrobić. Nawet skompilowanie go do kodu maszynowego tylko utrudnia zadanie. Jeśli używasz zaciemniacza, po prostu oszukujesz siebie. Co gorsza, nie zezwalasz również użytkownikom na naprawianie błędów lub wprowadzanie modyfikacji.

Firmy muzyczne i filmowe jeszcze się z tym nie pogodziły, wciąż wydają miliony na DRM.

W tłumaczonych językach, takich jak PHP i Perl, jest to banalne. Perl miał wiele zaciemniaczy kodu, a potem zdaliśmy sobie sprawę, że można je w prosty sposób dekompilować.

perl -MO=Deparse some_program

PHP ma takie funkcje jak DeZender i Show My Code .

Moja rada? Napisz licencję i uzyskaj prawnika. Jedyną inną opcją jest niepodawanie kodu i uruchomienie hostowanej usługi.

Zobacz także wpis perlfaq na ten temat .


220
W większości się z tobą zgadzam, ale OP poprosił o rekomendację produktu, a nie wykład na temat zalet open source.
Eli

36
Nie ma to nic wspólnego z Open Source, które polega na pomieszaniu kodu, a nie tylko jego zobaczeniu. W rzeczywistości każdy kod lub dane, które działają na komputerze użytkownika, są ostatecznie przezroczyste, bez względu na to, jak je skompilujesz, zaciemnisz lub zaszyfrujesz, z pełnym zatrzymaniem. PO musi to zrozumieć.
Schwern,

7
@JamShady: zaciemnianie nie oznacza, że ​​nie można naprawiać błędów ani dokonywać modyfikacji. Jeśli głupio zaciemnisz kod źródłowy, wyrzucisz oryginał i nalegasz na utrzymanie zaciemnionego wyniku, tak, nie będziesz w stanie nic zrobić. Dobry obfuscator nalega, abyś zachował swój kod i mapowanie do zaciemnionego wyniku; możesz debugować / modyfikować oryginalny kod, wysyłać zaciemnione łaty do swoich klientów, a nawet diagnozować jego problemy, korzystając z mapy do przekształcania zaciemnionych skarg z powrotem w czytelne. Nie ma mapy, co czyni to bezpiecznym.
Ira Baxter

34
Pytanie: Jak, odpowiedź: Nie powinieneś = nie był pomocny
cmc

26
@cmc Jestem przekonany, że wiele osób bezpośrednio odpowie na pytanie, więc nie muszę ponosić straty z innym podejściem. Połowa sedna pytania od eksperta polega na tym, że wiedzą, kiedy zadajesz niewłaściwe pytanie, aby rozwiązać prawdziwy problem. Jest to aplikacja „5 Whys”. en.wikipedia.org/wiki/5_Whys Prawdziwy problem / pytanie brzmi: „Jak mogę powstrzymać ludzi przed czytaniem / kradzieżą mojego kodu PHP”? Odpowiedź brzmi: jeśli wyślesz kod, nie możesz, ale możesz zmarnować mnóstwo czasu i pieniędzy, próbując uzyskać fałszywe poczucie bezpieczeństwa. Czy to nie było bardziej pomocne niż lista obfuskatorów?
Schwern

31

Nic nie będzie idealne. Jeśli chcesz tylko coś powstrzymać nie-programistów, oto krótki skrypt, który napisałem, z którego możesz skorzystać:

<?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
Niesamowite? Każda strona zawiera kompletne rozwiązanie pozwalające uzyskać źródło: uruchom „gzuncompress (base64_decode ($ a))”. Tak, to zatrzyma nie-programistów. Ale wtedy oryginalny kod źródłowy zatrzyma nie-programistów, kto potrzebuje do tego kodowania? Jedyną osobą, która przyjrzy się temu zamiarowi inżynierii wstecznej, jest programista PHP.
Ira Baxter,

2
Przez większość czasu nie-programiści próbują przeszukać niektóre ciągi kodu źródłowego, które chcą zmienić, szukam również takiego rozwiązania, które powstrzymałoby tylko nie-programistów przed zmianą kodu źródłowego, np. Nazwa domeny, nazwa bazy danych, użytkownicy itp.
Asad kamran

To dla mnie bardzo pomocna odpowiedź. Interesuje mnie tylko to, aby użytkownik nie mógł łatwo otworzyć mojej „database.php” w notatniku i zobaczyć moją nazwę użytkownika i hasło do bazy danych.
TimH - Codidact,

20

Nie jestem pewien, czy można uznać zaciemnianie interpretowanego języka za bezcelowe (nie jestem w stanie dodać komentarza do postu Schwern, więc oto nowy wpis).

Wydaje mi się, że trochę krótkowzrocznie jest założenie, że znasz wszystkie możliwe scenariusze, w których ktoś chciałby zaciemnić kod, i zakładasz, że każdy rzeczywiście będzie chciał zrobić wszystko, co konieczne, aby wyświetlić ten kod po zaciemnieniu. Rozważ mój obecny scenariusz:

Pracuję dla firmy konsultingowej, która rozwija dużą i dość wyrafinowaną stronę opartą na PHP. Projekt będzie hostowany na serwerze klienta, który hostuje inne strony opracowane przez inne firmy konsultingowe. Technicznie każdy kod, który piszemy, jest własnością klienta, więc nie możemy go licencjonować. Jednak każda inna firma doradcza (konkurent) z dostępem do serwera może skopiować nasz kod bez uprzedniej zgody klienta. Dlatego mamy prawdziwy powód do zaciemnienia - do podjęcia wysiłku, aby konkurent zrozumiał nasz kod bardziej niż wysiłek stworzenia kopii naszej pracy od zera.


16

Zobacz nasz SD Thicket PHP Obfuscator aby znaleźć obfuscator, który działa dobrze z dowolnie dużymi zestawami stron. Działa głównie poprzez szyfrowanie nazw identyfikatorów. Przy skromnych i dużych aplikacjach może to uczynić kod niezwykle trudnym do zrozumienia, co stanowi cały cel.

Nie marnuje energii na schematy „eval (dekodowanie ( kodowany kod programu ))”, które robi wiele „ obfuscatorów ” PHP [są to „enkodery”, a nie „obfuscatory”, ponieważ każdy grud może znaleźć to wywołanie i sam wykonaj eval-dekoduj i pobierz dekodowany kod.

Do przetwarzania PHP używa parsera precyzyjnego dla języka; poinformuje cię, czy twój program jest nieprawidłowo składniowy. Co ważniejsze, zna dokładnie cały język; nie zostanie zgubiony ani zdezorientowany, a także nie złamie twojego kodu (inaczej dzieje się, jeśli zaciemnisz „niepoprawnie”, np. nie zidentyfikujesz poprawnie publicznego interfejsu API kodu).

Tak, zaciemnia identyfikatory identycznie na stronach; gdyby tego nie zrobił, wynik nie działałby.


1
Flagger: możesz uprzejmie powiedzieć, dlaczego to oznaczyłeś. Odpowiada bezpośrednio na pytanie PO, w tym jego konkretny problem.
Ira Baxter,

Z tego, co mogę powiedzieć, jest to plik EXE działający tylko w systemie Windows? Przynajmniej eval to plik .exe ...
Craig Jacobs

Plik eval jest instalatorem opartym na .exe. Skomplikowana prawda jest taka, że ​​zainstalowany produkt zwykle działa ze skryptu .cmd, ponieważ jest pod nim równoległy język programowania, ale nigdy tego nie zobaczysz. Został zaprojektowany przede wszystkim jako produkt Windows; Jeśli jednak zainstalujesz go w systemie Linux z Wine, będzie on działał ze skryptami .sh, które są z nim instalowane tak, jakby był rodzimym narzędziem Linuksa. Jeśli używasz części GUI (opcjonalnie, większość ludzi chce uruchomić ją jako skrypt w procesie kompilacji produkcyjnej), używa natywnej Java w systemie Windows i natywnej Java w systemie Linux.
Ira Baxter,

Czy to prawda, że ​​Thicket wymaga dodatku do przestrzeni hostingowej? Jeśli tak, jak to się instaluje na hostingu współdzielonym?
Stephen Adelakun

@StephenAdelakun: Thicket nie wymaga żadnych zmian na serwerze. Pobierz go i sprawdź dokumentację.
Ira Baxter

14

Najlepsze, co widziałem, to Zend Guard .


2
SD PHP Obfuscator jest równie dobry i kosztuje około 1/5.
Ira Baxter,

1
@SalmanPK A powód tego powinien być oczywisty?
The Pellmeister

@SalmanPK Wymaga dodatku do przestrzeni hostingowej. Zend Guard prawdopodobnie też. Nie jestem pewien, który jest najbardziej popularny. W każdym razie problem polega na tym, że ogranicza to potencjalnych odbiorców.
James P.

1
SD Obfuscator PHP konwertuje wszystko na małe litery. To będzie problem, jeśli używasz frameworka.
Amil Waduwawara,

1
@JamesPoulson: Nie jest jasne, czy twoja uwaga jest skierowana na obfuscator SD PHP. Żeby było jasne, nie wymaga żadnego dodatku do przestrzeni hostingowej.
Ira Baxter,

10

Spróbuj tego: http://www.pipsomania.com/best_php_obfuscator.do

Niedawno napisałem to w Javie, aby zaciemnić moje projekty PHP, ponieważ nie znalazłem żadnego dobrego i kompatybilnego gotowego napisanego w sieci, postanowiłem umieścić go online jako saas, więc wszyscy używają go za darmo. Nie zmienia nazw zmiennych między różnymi skryptami dla maksymalnej kompatybilności, ale zaciemnia je bardzo dobrze, z losową logiką, również dla każdej instrukcji. Sznurki ... wszystko. Uważam, że jest znacznie lepszy niż ten błędny kodek, który jest napisany w PHP i bardzo wolno :)


Wygląda dobrze ... ale czy jest bezpieczny? To znaczy, czy inni mogą to łatwo odszyfrować?
shasi kanth

Mogę was zapewnić, że do tego momentu NIKT nie może zaciemnić kodu zaciemnionego przez ten zaciemniacz.
PatlaDJ

3
[potrzebne źródło] - szyfrowanie homebrew to bezpieczeństwo poprzez zaciemnienie, które w ogóle nie jest zabezpieczeniem.
Chris Baker

8
„Zapewniam cię, że w tej chwili nikt nie może zaciemnić kodu”. Nawet PHP? Jeśli PHP może to zrobić, może to zrobić ktoś inny. Patrząc na przykładowy kod na twojej stronie, gdzieś będziesz mieć ewaluację, która zrzuci kod, zmień go na echo, a twój kod zostanie wyświetlony.

3
OSTRZEŻENIE: Metodę tę można w prosty sposób zdekodować z powrotem do pierwotnych nazw zmiennych, patrz: lombokcyber.com/en/detools/decode-pipsomania
Zane Hooper

3

Thicket ™ Obfuscator dla PHP

Narzędzie PHP Obfuscator szyfruje kod źródłowy PHP, aby bardzo trudno go zrozumieć lub poddać inżynierii wstecznej (przykład). Zapewnia to znaczną ochronę własności intelektualnej kodu źródłowego, która musi być hostowana na stronie internetowej lub wysyłana do klienta. Jest członkiem rodziny SD Obfuscators kodu źródłowego.


TrueBug.com jest nieosiągalny. Wiem, że zamieszczam komentarz po ponad 3 latach, ale czy możesz mi pomóc, jeśli to możliwe, nowy adres URL trueBug?
Stephen Adelakun

@StephenAdelakun Czy potrzebujesz tylko TrueBug? Użyj tego: TruBug PHP Obfuscator .
Praveen Kumar Purushothaman

Przepraszamy, link nie działa. A może coś mi brakuje?
Stephen Adelakun

@StephenAdelakun Właśnie sprawdziłem, działa.
Praveen Kumar Purushothaman

1
@StephenAdelakun Dlaczego tylko to? :(W każdym razie to martwe oprogramowanie. Są teraz lepsze i niesamowite.
Praveen Kumar Purushothaman

2

Korzystanie z SourceGuardian jest dobre, ponieważ zawiera fajny i łatwy w użyciu interfejs GUI.

Ale pamiętaj:

Zwróć uwagę na jego - raczej zabawne - warunki licencyjne.

  • Możesz uruchomić tylko 1 na maszynę - jak dotąd jest to dopuszczalne
  • Jeśli chcesz uruchomić interfejs wiersza poleceń na innym komputerze, powiedz na swoim serwerze internetowym, POTRZEBUJESZ INNEJ LICENCJI (Tak, to zabawne i słyszę, jak się śmiejesz).

2
To wydaje mi się normalne! 2 maszyny = 2 licencje! Zwykle ludzie robią to, kodując wszystko na jednym komputerze, a następnie przesyłając na inny (e).
David Newcomb

@ Davidnewcomb wydaje się, że nie rozumiesz. Zwykle szyfrujesz kod na urządzeniu deweloperskim przed jego wysłaniem. W przypadku, gdy musisz to zrobić online, interfejs wiersza poleceń wymaga również dodatkowej licencji, co oczywiście nie jest poprawne. Zwykle umieszczasz interfejs wiersza poleceń na serwerze internetowym, a nie na lokalnym urządzeniu.
Herr

2
TL; DR dobra ochrona, głupie warunki licencyjne.
Herr

1
Powinna wynosić 1 licencja na użytkownika, a nie na maszynę.
beppe9000,

@ beppe9000 Całkowicie się zgadzam!
Herr

-16

Zaciemnianie dodaje tylko kolejną warstwę potencjalnych błędów i luk w zabezpieczeniach do twojego programu. Proszę nie rób tego.

Ludzie, którzy piszą oprogramowanie zaciemniające, zazwyczaj wydają się bardzo pobieżni i niewykwalifikowani.

Jeśli Twój kod jest „świetny”, crackerzy robią wszystko, aby go rozprzestrzeniać, niezależnie od tego, czy jest zaciemniony. Jeśli nikt nie wie / nie troszczy się o twój kod, prawdopodobnie też nie.


7
Niewykwalifikowani? Na podstawie jakich dowodów? Piszę je. Sprawdź moją biografię zanim zaczniesz robić szerokie uogólnienia. semanticdesigns.com/Company/People/idbaxter
Ira Baxter

5
@Ira: Moje oświadczenie nadal obowiązuje. Większość zaciemnionego kodu można złamać w ciągu kilku minut. Miałem konkretnie na myśli, że większość ludzi, którzy to robią, są niewykwalifikowani, nie wszyscy . Pierwszą rzeczą, która przyszła mi do głowy, była Ioncube, i na pewno opublikowano lukę: osvdb.org/show/osvdb/41708 . Z drugiej strony prawdopodobnie możesz częściowo winić to za niejasne wymagania bezpieczeństwa PHP.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

3
Jeśli zaciemnienie jest wykonywane za pomocą niezawodnego narzędzia, nic nie zmienia niezawodności programu. Kompilacja binarna jest rodzajem skrajnego zaciemnienia, a jednak zgaduję, że masz pewność, że silnik PHP Zend jest niezawodny. (Zaciemnianie lub kompilacja przy użyciu złych narzędzi nie powinny się liczyć).
Ira Baxter

1
każdy, kto ma pół mózgu, wie, że php walczy (czytaj „nieistniejący”) na rynku oprogramowania dla przedsiębiorstw w świecie rzeczywistym, ponieważ nie jest to zaciemnione na stronie asp.net. Mam już dość słabo myślących ewangelistów, którzy mówią coś jeszcze. (i tak, to właśnie jest umyślna ignorancja) Open Source jest zbyt długo wypróbowywany i okazuje się, że zbyt często pragnie, aby istniał jakikolwiek inny wniosek poza tym: hobby? Otwarte źródło. Praca? Szyfruj. Tylko głupcy / idioci / ludzie, którzy żyją w bańce / mają bogatego ojca, mogą kiedykolwiek kiedykolwiek myśleć inaczej.
łączy

2
Ten komentarz jest dla mnie prawie niezrozumiały, ale wydaje się sugerować, że nie ma sensu sprzedawać oprogramowania open source lub oprogramowania opartego na oprogramowaniu open source. W przypadku, gdy nie zauważyłeś, Java jest „korporacyjna”, open source i równie dobrze odnosi sukces jak ta .NET. moja firma zarabia miliony dolarów i nigdy nie musieliśmy używać zaciemniania. Zadaj sobie pytanie: po co sprzedawać oprogramowanie, jeśli nie możesz go wesprzeć / ulepszyć (tj. Właśnie złamałeś oprogramowanie innej osoby i odsprzedałeś ją)?
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.