Gibt es einen Code-Verschleierer für PHP? [geschlossen]


212

Hat jemand einen guten Verschleierer für PHP verwendet? Ich habe einige ausprobiert, aber sie funktionieren nicht für sehr große Projekte. Sie können beispielsweise keine Variablen verarbeiten, die in einer Datei enthalten sind und in einer anderen verwendet werden.

Oder haben Sie andere Tricks, um die Verbreitung Ihres Codes zu stoppen?


11
Sind Sie sicher, dass Sie müssen?
Fröhlich

5
@ StevenA.Lowe: Hüte dich davor, dich über PHP lustig zu machen. :-)
Marco Demaio

89
Noch eine wirklich gute, konstruktive programmierbezogene Frage im perfekten Q & A-Format, die als nicht konstruktiv geschlossen wird. Schade um Stapelüberlauf ...
Petr

6
Das ist Stapelüberlauf. Das einzige, was produktiver ist als geschlossene Fragen, die nicht geschlossen werden sollten, sind die Benutzerflammen, wenn ein armer Kerl hierher kommt und um Hilfe bittet.
Mac

2
Wenn Sie der Meinung sind, dass dies nicht geschlossen werden sollte, stimmen Sie ab, um es wieder zu öffnen.
Ira Baxter

Antworten:


240

Sie können PHP Protect ausprobieren , einen kostenlosen PHP-Verschleierer, um Ihren PHP-Code zu verschleiern.
Es ist sehr schön, einfach zu bedienen und auch kostenlos.
EDIT: Dieser Dienst ist nicht mehr live.

Was andere hier darüber geschrieben haben, dass keine Verschleierung verwendet wird, weil sie kaputt gehen kann usw .:
Ich habe nur eine Antwort: Schließen Sie Ihre Haustür nicht ab, weil jeder Ihr Schloss öffnen kann.
Dies ist genau der Fall, die Verschleierung soll nicht 100% Code-Diebstahl verhindern. Es muss nur eine zeitaufwändige Aufgabe sein, damit es billiger ist, den ursprünglichen Codierer zu bezahlen. Hoffe das hilft.


105
+1 für den Hinweis, dass es bei der Verschleierung darum geht, es härter und nicht unmöglich zu machen.
Ashkan Kh. Nazary

3
Beachten Sie, dass das Verschlüsseln Ihres Quellcodes, anstatt ihn zu verschleiern, das Entschlüsseln nicht unmöglich macht. Es ist nur sehr schwer, dies zu tun.
Xorinzor

9
Versuchte es, aber es gefiel mir nicht. Es ändert nur Variablennamen, es entfernt auch keine Kommentare ..
Pisu

1
@Schwern, lassen Sie Ihre Tür unverschlossen, dann stellen Sie Columbo und einen wirklich guten Anwalt ein, um sich zu versichern;)
David Newcomb

2
@ David Newcomb - Wer möchte einen wirklich guten Anwalt bezahlen, wenn Sie nur die Tür abschließen können?
Azoundria

109

Die Leute werden Ihnen Verschleierer anbieten, aber keine Verschleierung kann jemanden daran hindern, an Ihren Code zu gelangen. Keiner. Wenn Ihr Computer es ausführen kann oder wenn Filme und Musik es abspielen können, kann der Benutzer darauf zugreifen. Selbst das Kompilieren in Maschinencode macht die Arbeit etwas schwieriger. Wenn Sie einen Verschleierer verwenden, täuschen Sie sich nur. Schlimmer noch, Sie verbieten Ihren Benutzern auch, Fehler zu beheben oder Änderungen vorzunehmen.

Musik- und Filmunternehmen haben sich noch nicht ganz damit abgefunden, sie geben immer noch Millionen für DRM aus.

In interpretierten Sprachen wie PHP und Perl ist das trivial. Perl hatte früher viele Code-Verschleierer, dann haben wir festgestellt, dass Sie sie trivial dekompilieren können.

perl -MO=Deparse some_program

PHP hat Dinge wie DeZender und Show My Code .

Mein Rat? Schreiben Sie eine Lizenz und holen Sie sich einen Anwalt. Die einzige andere Möglichkeit besteht darin, den Code nicht herauszugeben und stattdessen einen gehosteten Dienst auszuführen.

Siehe auch den Perlfaq-Eintrag zu diesem Thema .


220
Ich stimme Ihnen größtenteils zu, aber das OP bat um eine Produktempfehlung, nicht um einen Vortrag über die Vorzüge von Open Source.
Eli

36
Hat nichts mit Open Source zu tun, bei dem es darum geht, den Code zu mischen und nicht nur zu sehen. Die Realität ist, dass jeder Code oder jede Daten, die auf dem Computer eines Benutzers ausgeführt werden, letztendlich transparent ist, unabhängig davon, wie Sie ihn kompilieren, verschleiern oder verschlüsseln. Das OP muss das verstehen.
Schwern

7
@ JamShady: Verschleierung bedeutet nicht, dass Sie keine Fehler beheben oder Änderungen vornehmen können. Wenn Sie den Quellcode dumm verschleiern, das Original wegwerfen und darauf bestehen, das verschleierte Ergebnis beizubehalten, können Sie nichts tun. Gute Verschleierer bestehen darauf, dass Sie Ihren Code und die Zuordnung zum verschleierten Ergebnis beibehalten. Sie können Ihren Originalcode debuggen / ändern, verschleierte Patches an Ihre Kunden senden und sogar seine Probleme diagnostizieren, indem Sie die Karte verwenden, um verschleierte Beschwerden wieder in lesbare umzuwandeln. Er hat keine Karte, was das sicher macht.
Ira Baxter

34
Frage: Wie, Antwort: Sie sollten nicht = nicht hilfreich
cmc

26
@cmc Ich bin zuversichtlich, dass viele Leute die Frage direkt beantworten werden, daher gibt es keinen Verlust, wenn ich einen anderen Weg gehe. Der halbe Sinn eines Experten besteht darin, zu wissen, wann Sie die falsche Frage stellen, um das eigentliche Problem zu lösen. Dies ist eine Anwendung der "5 Warum". en.wikipedia.org/wiki/5_Whys Das eigentliche Problem / die eigentliche Frage lautet: "Wie kann ich verhindern, dass Leute meinen PHP-Code lesen / stehlen können?" Die Antwort ist, wenn Sie den Code versenden, können Sie nicht, aber Sie können viel Zeit und Geld verschwenden, um ein falsches Sicherheitsgefühl zu erlangen. War das nicht hilfreicher als eine Liste von Verschleiern?
Schwern

31

Nichts wird perfekt sein. Wenn Sie nur möchten, dass Nicht-Programmierer durch etwas gestoppt werden, können Sie Folgendes verwenden:

<?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
Genial? Jede Seite enthält die vollständige Lösung zum Abrufen der Quelle: Führen Sie "gzuncompress (base64_decode ($ a))" aus. Ja, dies stoppt Nicht-Programmierer. Aber dann stoppt der ursprüngliche Quellcode Nicht-Programmierer. Wer braucht dafür eine Codierung? Die einzige Person, die sich mit diesem Reverse Engineering befassen wird, ist ein PHP-Programmierer.
Ira Baxter

2
Meistens versuchen Nicht-Programmierer, einige Zeichenfolgen im Quellcode zu durchsuchen, die sie ändern möchten. Ich suche auch nach einer solchen Lösung, die nur Nicht-Programmierer daran hindert, den Quellcode zu ändern, z. B. Domänenname, Datenbankname, Benutzer usw.
Asad Kamran

Dies ist eine sehr hilfreiche Antwort für mich. Ich möchte nur verhindern, dass der Benutzer meine "database.php" einfach im Editor öffnet und meinen Datenbankbenutzernamen und mein Passwort sieht.
TimH - Codidact

20

Ich bin mir nicht sicher, ob Sie die Verschleierung einer interpretierten Sprache als sinnlos bezeichnen können (ich kann Schwerns Beitrag keinen Kommentar hinzufügen, daher hier ein neuer Eintrag).

Ich denke, es ist ein wenig kurzsichtig anzunehmen, dass Sie alle möglichen Szenarien kennen, in denen jemand Code verschleiern möchte, und Sie gehen davon aus, dass jeder tatsächlich bereit ist, alle erforderlichen Anstrengungen zu unternehmen, um diesen Code anzuzeigen, sobald er verschleiert ist. Betrachten Sie mein aktuelles Szenario:

Ich arbeite für ein Beratungsunternehmen, das eine große und ziemlich ausgefeilte PHP-basierte Site entwickelt. Das Projekt wird auf dem Server eines Kunden gehostet, auf dem andere Websites gehostet werden, die von anderen Beratungsunternehmen entwickelt wurden. Technisch gesehen gehört jeder Code, den wir schreiben, dem Client, daher können wir ihn nicht lizenzieren. Jede andere Beratung (Mitbewerber) mit Zugriff auf den Server kann unseren Code jedoch kopieren, ohne zuvor die Erlaubnis des Kunden einzuholen. Wir haben daher einen echten Grund zur Verschleierung - die Anstrengungen zu unternehmen, die ein Wettbewerber benötigt, um unseren Code besser zu verstehen, als die Mühe, eine Kopie unserer Arbeit von Grund auf neu zu erstellen.


16

In unserem SD Thicket PHP Obfuscator finden Sie einen Obfuscator, der mit beliebig großen Seitenmengen einwandfrei funktioniert. Es funktioniert hauptsächlich durch Verwürfeln von Identifikatornamen. Bei bescheidenen bis großen Anwendungen kann dies den Code extrem schwer verständlich machen, was der gesamte Zweck ist.

Es verschwendet keine Energie für "eval ( decode ( encodedprogramcode ))" - Schemata, die viele PHP- "Obfuscators" ausführen [dies sind "Encoder", nicht "Obfuscator"], da jeder Clod diesen Aufruf finden kann und führen Sie die Auswertung selbst aus und erhalten Sie den dekodierten Code.

Es verwendet einen sprachgenauen Parser, um das PHP zu verarbeiten. Hier erfahren Sie, ob Ihr Programm syntaktisch ungültig ist. Noch wichtiger ist, dass es die ganze Sprache genau kennt; Es geht nicht verloren oder wird verwirrt, und Ihr Code wird nicht beschädigt (außer wenn Sie "falsch" verschleiern, z. B. wenn Sie die öffentliche API des Codes nicht korrekt identifizieren).

Ja, es werden Bezeichner über Seiten hinweg identisch verschleiert. Andernfalls würde das Ergebnis nicht funktionieren.


1
Flagger: Sie könnten die Höflichkeit haben zu sagen, warum Sie dies markiert haben. Es beantwortet die Frage des OP direkt, einschließlich seines spezifischen Problems.
Ira Baxter

Soweit ich weiß, handelt es sich um eine EXE-Datei, die nur unter Windows ausgeführt wird. Zumindest ist die Bewertung eine .exe-Datei ...
Craig Jacobs

Die eval-Datei ist ein EXE-basiertes Installationsprogramm. Die komplizierte Wahrheit ist, dass das installierte Produkt normalerweise über ein .cmd-Skript ausgeführt wird, da sich darunter eine parallele Programmiersprache befindet, die Sie jedoch nie sehen werden. Es wurde hauptsächlich als Windows-Produkt entwickelt. Wenn Sie es jedoch unter Linux mit Wine installieren, wird es mit .sh-Skripten ausgeführt, die damit installiert werden, als wäre es ein natives Linux-Tool. Wenn Sie den GUI-Teil verwenden (optional, die meisten Benutzer möchten ihn als Skript in einem Produktionserstellungsprozess ausführen), wird das native Java unter Windows und das native Java unter Linux verwendet.
Ira Baxter

Stimmt es, dass Thicket ein Addon zum Hosting-Bereich benötigt? Wenn ja, wie wird das auf einem Shared Hosting installiert?
Stephen Adelakun

@StephenAdelakun: Thicket erfordert keine Änderungen am Server. Laden Sie es herunter und überprüfen Sie die Dokumentation.
Ira Baxter

14

Das Beste, was ich gesehen habe, ist Zend Guard .


2
Der SD PHP Obfuscator ist genauso gut und kostet ungefähr 1/5.
Ira Baxter

1
@SalmanPK Und der Grund dafür soll offensichtlich sein?
Der Pellmeister

@SalmanPK Es wird ein Addon zum Webhosting-Bereich benötigt. Zend Guard wahrscheinlich auch. Ich bin mir nicht sicher, welches der Mainstream ist. Das Problem ist jedenfalls, dass es Ihr potenzielles Publikum einschränkt.
James P.

1
Der PHP Obfuscator von SD konvertiert alles in Kleinbuchstaben. Das ist ein Problem, wenn Sie ein Framework verwenden.
Amil Waduwawara

1
@ JamesPoulson: Es ist unklar, ob Ihre Bemerkung auf den SD PHP-Verschleierer gerichtet ist. Um ganz klar zu sein, ist kein Addon zum Webhosting-Bereich erforderlich.
Ira Baxter

10

Versuchen Sie dies: http://www.pipsomania.com/best_php_obfuscator.do

Kürzlich habe ich es in Java geschrieben, um meine PHP-Projekte zu verschleiern, da ich keine guten und kompatiblen Ready-Dateien im Internet gefunden habe. Ich habe beschlossen, es als Saas online zu stellen, damit jeder es kostenlos nutzen kann. Es ändert nicht die Variablennamen zwischen verschiedenen Skripten, um maximale Kompatibilität zu gewährleisten, sondern verschleiert sie sehr gut, mit zufälliger Logik auch für jede Anweisung. Saiten ... alles. Ich glaube, es ist viel besser als diese fehlerhafte Codeeclipse, die übrigens in PHP geschrieben und sehr langsam ist :)


Sieht gut aus ... aber ist es sicher? Ich meine, können andere es leicht entschlüsseln?
Shasi Kanth

Ich kann Ihnen versichern, dass bis zu diesem Moment NIEMAND den von diesem Verschleierer verschleierten Code entschlüsseln kann.
PatlaDJ

3
[Zitieren erforderlich] - Homebrew-Verschlüsselung ist Sicherheit durch Dunkelheit, was überhaupt keine Sicherheit ist.
Chris Baker

8
"Ich kann Ihnen versichern, dass bis zu diesem Moment NIEMAND den Code verschleiern kann." Sogar PHP? Wenn PHP das kann, kann es auch jemand anderes. Wenn Sie den Beispielcode auf Ihrer Site betrachten, haben Sie irgendwo eine Bewertungsanweisung, die den Code ausgibt. Ändern Sie ihn in ein Echo, und Ihr Code wird angezeigt.

3
WARNUNG: Diese Methode kann trivial zurück zu den ursprünglichen Variablennamen dekodiert werden, siehe: lombokcyber.com/de/detools/decode-pipsomania
Zane Hooper

3

Thicket ™ Obfuscator für PHP

Das PHP Obfuscator- Tool verschlüsselt den PHP-Quellcode, um das Verständnis oder das Reverse Engineering zu erschweren (Beispiel). Dies bietet einen erheblichen Schutz für das geistige Eigentum des Quellcodes, das auf einer Website gehostet oder an einen Kunden versendet werden muss. Es ist ein Mitglied der SD-Familie von Quellcode-Obfuscatoren.


TrueBug.com ist nicht erreichbar. Ich weiß, dass ich nach mehr als 3 Jahren einen Kommentar poste, aber können Sie bitte mit der neuen URL von trueBug helfen, falls vorhanden?
Stephen Adelakun

@StephenAdelakun Benötigen Sie nur TrueBug? Verwenden Sie dies: TruBug PHP Obfuscator .
Praveen Kumar Purushothaman

Entschuldigung, der Link funktioniert nicht. Oder fehlt mir etwas?
Stephen Adelakun

@ StephenAdelakun Ich habe gerade überprüft, es funktioniert.
Praveen Kumar Purushothaman

1
@ StephenAdelakun Warum nur das? :(Das ist sowieso tote Software. Es gibt jetzt bessere und großartige, oder?
Praveen Kumar Purushothaman

2

Die Verwendung von SourceGuardian ist gut, da es eine coole und einfach zu bedienende Benutzeroberfläche bietet.

Aber sei dir bewusst:

Beachten Sie die - eher witzigen - Lizenzbedingungen.

  • Sie dürfen nur 1 pro Maschine ausführen - dies ist bisher akzeptabel
  • Wenn Sie die Befehlszeilenschnittstelle auf einem anderen Computer ausführen möchten, sagen Sie Ihrem Webserver, dass Sie eine weitere Lizenz benötigen (Ja, es ist lustig und ich kann Sie auch lachen hören).

2
Das scheint mir normal zu sein! 2 Maschinen = 2 Lizenzen! Normalerweise verschlüsseln die Benutzer alles auf einem Computer und laden es dann auf den anderen Computer hoch.
David Newcomb

@davidnewcomb Sie scheinen den Punkt nicht zu verstehen. Normalerweise verschlüsseln Sie den Code auf Ihrem Entwicklungscomputer, bevor Sie ihn versenden. Für den Fall, dass Sie dies online tun müssen, erfordert die Befehlszeilenschnittstelle auch eine zusätzliche Lizenz, was offensichtlich nicht richtig ist. Sie neigen dazu, die Befehlszeilenschnittstelle auf dem Webserver und nicht auf Ihrer lokalen Box zu platzieren.
Herr

2
TL; DR guter Schutz, dumme Lizenzbedingungen.
Herr

1
Sollte 1 Lizenz pro Benutzer sein, nicht pro Maschine.
beppe9000

@ beppe9000 Stimme voll und ganz zu!
Herr

-16

Durch die Verschleierung wird Ihrem Programm nur eine weitere Ebene potenzieller Fehler und Sicherheitslücken hinzugefügt. Bitte tu es nicht.

Die Art von Leuten, die Verschleierungssoftware schreiben, scheint normalerweise sowieso sehr lückenhaft und unqualifiziert zu sein.

Wenn Ihr Code "großartig" ist, werden Cracker große Anstrengungen unternehmen, um ihn zu verbreiten, unabhängig davon, ob er verschleiert ist oder nicht. Wenn niemand Ihren Code kennt / sich darum kümmert, wird er dies wahrscheinlich auch nicht tun.


7
Nicht qualifiziert? Basierend auf welchen Beweisen? Ich schreibe sie. Überprüfen Sie meine Biografie, bevor Sie umfassende Verallgemeinerungen vornehmen. semanticdesigns.com/Company/People/idbaxter
Ira Baxter

5
@Ira: Meine Aussage gilt immer noch. Der meiste verschleierte Code kann innerhalb von Minuten beschädigt werden. Ich meinte speziell, die meisten Leute, die es tun, sind ungelernt, nicht alle . Das erste, was mir in den Sinn kam, war Ioncube, und es wurde sicherlich eine Sicherheitslücke veröffentlicht: osvdb.org/show/osvdb/41708 . Andererseits könnten Sie dies wahrscheinlich teilweise auf die obskuren Sicherheitsanforderungen von PHP zurückführen.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

3
Wenn die Verschleierung mit einem zuverlässigen Werkzeug durchgeführt wird, ändert dies nichts an der Zuverlässigkeit eines Programms. Die binäre Kompilierung ist eine Art extreme Verschleierung, und dennoch sind Sie sicher, dass die PHP-Engine von Zend zuverlässig ist. (Verschleierung oder Kompilierung mit schlechten Werkzeugen sollte nicht zählen).
Ira Baxter

1
Jeder mit einem halben Gehirn weiß, dass PHP auf dem realen Markt für Unternehmenssoftware Probleme hat (lesen Sie "nicht existent"), da es auf dem asp.net nicht verschleiert ist. Ich habe es so satt, dass schwachsinnige Evangelisten etwas anderes sagen. (und ja, das ist es, was vorsätzliche Ignoranz ist) Open Source ist zu lange draußen und wurde versucht und als zu oft zu wünschen, dass es eine andere Schlussfolgerung als diese gibt: Hobby? Open Source. Job? Verschlüsseln. Nur Dummköpfe / Idioten / Menschen, die in einer Blase leben / einen reichen Vater haben, können jemals jemals jemals anders denken.
Conners

2
Dieser Kommentar ist für mich fast unverständlich, aber es scheint zu implizieren, dass es keinen Sinn macht, Open Source-Software oder Software zu verkaufen, die auf Open Source-Software aufbaut. Falls Sie es nicht bemerkt haben, ist Java "Enterprise", Open Source und genauso erfolgreich wie diese .NET-Sache. Meine Firma verdient Millionen von Dollar, und wir mussten nie Verschleierung anwenden. Fragen Sie sich Folgendes: Was nützt es, Software zu verkaufen, wenn Sie sie nicht unterstützen / verbessern können (dh Sie haben gerade die Software eines anderen geknackt und weiterverkauft)?
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.