• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Wer kennt PHP-Protector von phpprotector.net und hat Erfahrung damit?

schlegel.berlin

New member
Hallo Ihr Lieben,

auf der Suche nach einer einfachen Möglichkeit, PHP-Quellcode zu verschlüsseln, bin ich, nach einer üppigen Google-Odyssee, auf den PHP-Protecor gestoßen (www.phpprotector.net). Das Ding ist sicher nicht vergleichbar mit z.B ioncube, aber dafür halt sehr preisgünstig (< 50 Euro), und vor allem extrem "easy to intall & easy to handle". Der benötigt keinen PHP-Loader und nix, was zusätzlichen Installationsaufwand bedeutet. Einfach enkodieren, auf den Server hoch und schon läuft es.
Hab's mit der Demoversion versucht und benötigte, inklusive Programinstallation, enkodieren der PHP-Quellcodes, auf den Server hochladen und ausprobieren, keine 15 Minuten ...

Die Frage ist nur, wie sicher ist das Ding in Bezug auf das Dekodieren der verschlüsselten Codes?
Hat da jemand Erfahrung?

Es geht eigentlich nur darum, dass ein Kunde eine Sicherheits-Kopie der kompletten WebPäsenz auf CD haben will (der Kunde sitzt in Italien) und ich wenigstens einigermaßen geschützt gegen "Klauen" sein möchte. Ich gehe davon aus, dass der Kunde selbst kaum über das notwenige Wissen verfügt, wie man so was bewerkstelligen kann. Ich weiß es ja, mindestens diesen Encoder betreffend, selbst nicht, weshalb ich hier diese Frage an Euch stelle ...

Kann mir jemand raten?

Einen schönen Sonntag (den Rest davon) an Euch alle, liebe Grüße, Karin
 
Das das Resultat immer noch als ganz normales PHP-Script lauffähig ist, ist das vermutlich weniger ein Encoder als vielmehr ein obfuscator.
Sprich: Variablennamen- und Funktionsnamen werden durch Kauderwelsch ersetzt, Übersichtlichkeit wird durch entfernen von newlines und einrückungen reduziert und eventuell Komplexität gesteigert durch Einstreuen von alibi-code der nie wirklich läuft.
Alles in allem nicht sehr sicher, dafür spricht auch die Erklärung die der Hersteller zur Sicherheit der Software abgibt: PHP Protector - FAQs
Eine Hürde allemal, aber keine Verschlüsselung.
Aber kannst ja mal vergleichen:
Minify Javascript Online / Online JavaScript Packer
dort ein normales Javascript-File reinwerfen und schaun was rauskommt.
Gleiches prinzip.

Wäre allerdings interessant, was das Ding wirklich macht, wenn du also mal ein Beispielscript anhängen magst bist du herzlichst dazu eingeladen.
 
Erst einmal danke für die Antwort, aber ich bin mir recht sicher, das es sich um einen "ENCODER", oder genauer gesagt, einen "Verschlüsseler" handelt. Jedenfalls sieht das Ergebis "seiner Arbeit" genau so aus.
Die Scripte bleiben in der Tat lauffähig. Lesen kann die allerdings "kein Schwein" mehr. Aber nach einem "einfachen Obfuscator" sieht das eben nicht aus.
Schau(t) doch mal:

PHP:
<?php 
$_F=__FILE__;$_X='P2lCP1ouWg1WJG5RPEFPVzlNej5TPiRfbTdwVGonblE8QU9XOU16J2Q7DVYkfXM5PS5fWWVSPlM+JF9tN3BUaid9czk9Ll9ZZVInZDsNViR9czk9Ll9Zc0g+Uz4
kX203cFRqJ31zOT0uX1lzSCdkOw1WJC5Nc3guPV9ZZVI+Uz4kX203cFRqJy5Nc3guPV9ZZVInZDsNViQuTXN4Lj1fWXNIPlM+JF9tN3BUaicuTXN4Lj1fWXNIJ2Q7DVYkfXM5PS5fSE1
9PlM+JF9tN3BUaid9czk9Ll9ITX0nZDsNViQuTXN4Lj1fSE19PlM+JF9tN3BUaicuTXN4Lj1fSE19J2Q7DVYkWWVSXzxxPU0+Uz4kX203cFRqJ1llUl88cT1NJ2Q7DVYkPS5
RWTxIZXNXPlM+JF9tN3BUaic9LlFZPEhlc1cnZDsNViRURW5zNU0+Uz4kX203cFRqJ1RFbnM1TSdkOw1WJHBuczVNPlM+JF9tN3BUaidwbnM1TSdkO2hoTTIuTz4kcG5zNU1YIkI
8emkiOw1WDVYNViRPejlITXpfSGVZTT5TPjxlbk1IZVlNPig5c3pIZVlNKF9fcjNJS19fKSk7DVYkQU9XOU16X0hPPlM+ ...  usw.
Mein Frage bleibt also nach wie vor gültig: Gibt es eine Möglichkeit, das wieder in plain code zurück zu dekodieren, bzw. zu entschlüssen ?

Mal seh'n, ob sich noch jemand meldet, der das Ding kennt ...

Liebe Grüße, Karin
 
Zuletzt bearbeitet:
Ich seh das genau so wie skooli.
Mein Frage bleibt also nach wie vor gültig: Gibt es eine Möglichkeit, das wieder in plain code zurück zu dekodieren, bzw. zu entschlüssen ?

Stell doch mal ein kompettes lauffähiges mini-script (paar Zuweisungen + einige echos) zur Verfügung. Bin mir zu 90% sicher, daß es jemand schafft den Code sichtbar zu machen.
Damit haben Profis kein Problem, aber du, wenn der Code weitergegeben wird. Und Amateure können auch mit PHP-Klartext nichts anfangen.
 
Das ist keine Verschlüsslung!
Dein (leider) unvollständig geposteter code oben:
Code:
?iB?Z.Z
V$nQ<AOW9Mz>S>$_m7pTj'nQ<AOW9Mz'd;
V$}s9=._YeR>S>$_m7pTj'}s9=._YeR'd;
V$}s9=._YsH>S>$_m7pTj'}s9=._YsH'd;
V$.Msx.=_YeR>S>$_m7pTj'.Msx.=_YeR'd;
V$.Msx.=_YsH>S>$_m7pTj'.Msx.=_YsH'd;
V$}s9=._HM}>S>$_m7pTj'}s9=._HM}'d;
V$.Msx.=_HM}>S>$_m7pTj'.Msx.=_HM}'d;
V$YeR_<q=M>S>$_m7pTj'YeR_<q=M'd;
V$=.QY<HesW>S>$_m7pTj'=.QY<HesW'd;
V$TEns5M>S>$_m7pTj'TEns5M'd;
V$pns5M>S>$_m7pTj'pns5M'd;hhM2.O>$pns5MX"B<zi";
V
V
V$Oz9HMz_HeYM>S><enMHeYM>(9szHeYM(__r3IK__));
V$AOW9Mz_HO
Das kann man so noch net gut lesen (müsstest du mal alles posten) Aber man erkennt schon typische merkmale: Wiederholende Variablennnamen. ".=" operatoren. Das semikolon am ende, etc
Ich würde mich also meinen beiden vorpostern anschlißene, dass hier keine verschlüsslung stattfindet.

Lg Kasalop
 
Hallo alle mireinander,

nun bin ich gespannt:

Code:
<?php $_F=__FILE__;$_X='P2lCPw1Wbk1ubnNPSF9uPWV6PSgpOz4NVkFRSDI9c09IPnplSDlPWW49enNIeCgkV01IeD0uPlM+a2YpPl0NViQyLmV6bj5
TPiJlPDI5TUF4LnMKeVdZSE9adnpuPVFjfVJxNUZvLzRLckN0MzhHSXVFN213Z3BUIDZ7RGJOMGtKVUxbMWZQYSI7DVZuemVIOSgoOU9
RPFdNKVlzMnpPPXNZTSgpKjBhYWFhYWEpOw1WJHM+Uz5hOw1WfS5zV00+KCRzPkI+JFdNSHg9Lik+XQ1WJEhRWT5TPnplSDkoKT4lPm49eldNSCgkMi5lem
4pOw1WJD1ZWj5TPm5RPG49eigkMi5lem4sPiRIUVksPjApOw1WJFplbm4+Uz4kWmVubj5YPiQ9WVo7DVYkcysrOw1WbA1Wek09UXpIPiRaZW5uOw1WbA1
WTTIuTz4kX3BLcHAzN0VqJ0hlWU0nZD5TPnplSDlPWW49enNIeChrZik7DVY/aQ1W';$_D=strrev('edoced_46esab');eval($_D('JF9YPWJhc2U2NF9
kZWNvZGUoJF9YKTskX1g9c3RydHIoJF9YLCdTZ1BPOVlaV0ZLbXF5ZnhjakxKUnp1TTV2TnRzMWIue0I0bkNdaS8yRGwwRWhlQQpbZDg9UXA+VlhvIEh9
NkdJdzdrYTNUclU8JywnPVI5b2RtcGxBRVB5azhndls1M3hyTWV6cVpIaTdZaFc8RHNHez5DY1h9MU4vYWZqNl1KdHVTIAouQlVud1ZLTFFPMjBJVEY0
YicpOyRfUj1zdHJfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOyRfWD0wOw='));?>
 
Hallo alle mireinander,

nun bin ich gespannt.
Hier kleines Testscript, das ein Session startet, ihr einen random string zuweist und den per echo ausgibt. Das Gnaze extra bisschen umständlich, damit es nicht so leicht durchschaubar ist.
Es geht übrigens nicht darum, dass der Kunde direkt was damit anfangen kann, aber die Weitergabe der CD an z.B. seinen Neffen, der sich seit einigerZeit auch mit Webdesign beschäftigt, könnte den ja "beflügeln", was ich natürlich nicht will.
Wenn das da unten also keine "Verschlüsselung" ist, die nicht so leicht knackbar ist, dann ist das ganze Programm (PHP Ptotctor) ja so was von sinnlos, dass man es echt mit der Hmbeere des Jahres auszeichnen könnte. Was biite schö wird da prtected, wenn nicht der PHP code?
Und, die Frage schließt sich an, wie kann man "meine Kuh" anderweitig (sprich mit anderen Verfahren) vom Eis kriegen?

Hier jetzt der Schnipsel:

Code:
<?php $_F=__FILE__;$_X='P2lCPw1Wbk1ubnNPSF9uPWV6PSgpOz4NVkFRSDI9c09IPnplSDlPWW49enNIeCgkV01IeD0uPlM+a2YpPl0NViQyLmV6bj5
TPiJlPDI5TUF4LnMKeVdZSE9adnpuPVFjfVJxNUZvLzRLckN0MzhHSXVFN213Z3BUIDZ7RGJOMGtKVUxbMWZQYSI7DVZuemVIOSgoOU9
RPFdNKVlzMnpPPXNZTSgpKjBhYWFhYWEpOw1WJHM+Uz5hOw1WfS5zV00+KCRzPkI+JFdNSHg9Lik+XQ1WJEhRWT5TPnplSDkoKT4lPm49eldNSCgkMi5lem
4pOw1WJD1ZWj5TPm5RPG49eigkMi5lem4sPiRIUVksPjApOw1WJFplbm4+Uz4kWmVubj5YPiQ9WVo7DVYkcysrOw1WbA1Wek09UXpIPiRaZW5uOw1WbA1
WTTIuTz4kX3BLcHAzN0VqJ0hlWU0nZD5TPnplSDlPWW49enNIeChrZik7DVY/aQ1W';$_D=strrev('edoced_46esab');eval($_D('JF9YPWJhc2U2NF9
kZWNvZGUoJF9YKTskX1g9c3RydHIoJF9YLCdTZ1BPOVlaV0ZLbXF5ZnhjakxKUnp1TTV2TnRzMWIue0I0bkNdaS8yRGwwRWhlQQpbZDg9UXA+VlhvIEh9
NkdJdzdrYTNUclU8JywnPVI5b2RtcGxBRVB5azhndls1M3hyTWV6cVpIaTdZaFc8RHNHez5DY1h9MU4vYWZqNl1KdHVTIAouQlVud1ZLTFFPMjBJVEY0
YicpOyRfUj1zdHJfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOyRfWD0wOw='));?>
 
Code:
<?
	session_start(); 
	function randomstring($length = 28) {
		$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHItKLMNOPQRSTUVWXYZ1234567890";
		srand((double)microtime()*1000000);
		$i = 0;
		while ($i < $length) {
			$num = rand() % strlen($chars);
			$tmp = substr($chars, $num, 1);
			$pass = $pass . $tmp;
			$i++;
		}
		return $pass;
	}
	echo $_SESSION['name'] = randomstring(28);
?>

Lg Kasalop
 
Echt cool, man !!!!

Aber wie hast Du das gemacht?
Und wie mach ich das jetzt mit einem einigermaßen sicheren "verschlüsseln"?

Abgesehen davon, muss ich ja auch immer noch das eine Script, dass ich versehentlich überschrieben hatte, wieder zurück in "Klartext" verwandeln, um es dann eventuell mit einer anderen Methode (die ihr mir vielleicht anraten könnt?) besser zu "sichern" ...

Vielen Dank, für die Hilfe und LG, Karin
 
Du kannst eine Software auf deinem WebServer installieren, welches eine komplette Verschlüsslung deiner php Dateien vornimmt. Allerdings läuft die Software dann nur auf einem WebServer mit entsprechender Software. Sicherheitskopie = ja, aber nicht lauffähig, nur genau auf diesem Websevre (bzw je nach einstellung des Servers)

Sonst kannste auch hier mal lesen: Zend Guard - Schützen Sie Ihren Code und IP - Zend.com

Lg Kasalop

EDIT: schau auch mal nach microCode (microCODE is a PHP module that allows inclusion of encrypted PHP sourcecode instead of plain PHP scripts. Protect your intellectual property using standard encryption algorithms like DES or AES.) Link: http://sourceforge.net/projects/microcode/
 
Zuletzt bearbeitet:
Hi Kasalop,

danke, hab ich mir angeschaut und das ist auch genau das was ich brauche. Da die Scripte ja ohnehin nur auf diesem bestimmten webserber laufen sollen, muss die Sicherheitskopie ja sonst auch nirgends laufen. Es ist eben eine Sicherheitskoüpi - und sonst nix.

Also, vielen Dank, Du hast mir echt weitergeholfen ... !!!

Dennoch würde ich schon gerne wissen, wie Du meinen Codeschnipsel in "Klartext" zurück verwandelt hast, weil ich ja immer noch das eine Script habe, das mir nur noch unlesbar vorliegt, weil ich blöde Kuh es "überspielt" habe ...

Danke nochmal und LG, Karin
 
Dennoch würde ich schon gerne wissen, wie Du meinen Codeschnipsel in "Klartext" zurück verwandelt hast, weil ich ja immer noch das eine Script habe, das mir nur noch unlesbar vorliegt, weil ich blöde Kuh es "überspielt" habe ...

blöde kuh? :D naja sei mal nicht so selbstkritisch ;)
Denk einfach mal nach, es ist eigentlich ganz einfach:
1) Das php script wird ja einfach nur aufgerufen und dann ausgeführt, das heißt der code muss irgendwo drinstecken:
PHP:
<?php $_F=__FILE__;$_X='P2lCPw1Wbk1ubnNPSF9uPWV6PSgpOz4NVkFRSDI9c09IPnplSDlPWW49enNIeCgkV01IeD0uPlM+a2YpPl0NViQyLmV6bj5
TPiJlPDI5TUF4LnMKeVdZSE9adnpuPVFjfVJxNUZvLzRLckN0MzhHSXVFN213Z3BUIDZ7RGJOMGtKVUxbMWZQYSI7DVZuemVIOSgoOU9
RPFdNKVlzMnpPPXNZTSgpKjBhYWFhYWEpOw1WJHM+Uz5hOw1WfS5zV00+KCRzPkI+JFdNSHg9Lik+XQ1WJEhRWT5TPnplSDkoKT4lPm49eldNSCgkMi5lem
4pOw1WJD1ZWj5TPm5RPG49eigkMi5lem4sPiRIUVksPjApOw1WJFplbm4+Uz4kWmVubj5YPiQ9WVo7DVYkcysrOw1WbA1Wek09UXpIPiRaZW5uOw1WbA1
WTTIuTz4kX3BLcHAzN0VqJ0hlWU0nZD5TPnplSDlPWW49enNIeChrZik7DVY/aQ1W';$_D=strrev('edoced_46esab');eval($_D('JF9YPWJhc2U2NF9
kZWNvZGUoJF9YKTskX1g9c3RydHIoJF9YLCdTZ1BPOVlaV0ZLbXF5ZnhjakxKUnp1TTV2TnRzMWIue0I0bkNdaS8yRGwwRWhlQQpbZDg9UXA+VlhvIEh9
NkdJdzdrYTNUclU8JywnPVI5b2RtcGxBRVB5azhndls1M3hyTWV6cVpIaTdZaFc8RHNHez5DY1h9MU4vYWZqNl1KdHVTIAouQlVud1ZLTFFPMjBJVEY0
YicpOyRfUj1zdHJfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOyRfWD0wOw='));?>
formatiert ist das:
PHP:
<?php
  $_F=__FILE__;
  $_X='P2lCPw1Wbk1ubnNPSF9uPWV6PSgpOz4NVkFRSDI9c09IPnplSDlPWW49enNIeCgkV01IeD0uPlM+a2YpPl0NViQyLmV6bj5
TPiJlPDI5TUF4LnMKeVdZSE9adnpuPVFjfVJxNUZvLzRLckN0MzhHSXVFN213Z3BUIDZ7RGJOMGtKVUxbMWZQYSI7DVZuemVIOSgoOU9
RPFdNKVlzMnpPPXNZTSgpKjBhYWFhYWEpOw1WJHM+Uz5hOw1WfS5zV00+KCRzPkI+JFdNSHg9Lik+XQ1WJEhRWT5TPnplSDkoKT4lPm49eldNSCgkMi5lem
4pOw1WJD1ZWj5TPm5RPG49eigkMi5lem4sPiRIUVksPjApOw1WJFplbm4+Uz4kWmVubj5YPiQ9WVo7DVYkcysrOw1WbA1Wek09UXpIPiRaZW5uOw1WbA1
WTTIuTz4kX3BLcHAzN0VqJ0hlWU0nZD5TPnplSDlPWW49enNIeChrZik7DVY/aQ1W';
  $_D=strrev('edoced_46esab');
  eval($_D('JF9YPWJhc2U2NF9
kZWNvZGUoJF9YKTskX1g9c3RydHIoJF9YLCdTZ1BPOVlaV0ZLbXF5ZnhjakxKUnp1TTV2TnRzMWIue0I0bkNdaS8yRGwwRWhlQQpbZDg9UXA+VlhvIEh9
NkdJdzdrYTNUclU8JywnPVI5b2RtcGxBRVB5azhndls1M3hyTWV6cVpIaTdZaFc8RHNHez5DY1h9MU4vYWZqNl1KdHVTIAouQlVud1ZLTFFPMjBJVEY0
YicpOyRfUj1zdHJfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOyRfWD0wOw='));
?>
eval führt ja nur neuen php code aus, das heißt $_D('...') muss also wieder php code sein, dann schauen wir uns diesen doch mal an. also einfach eval durch die ersetzten. Ausgabe:
Code:
$_X=base64_decode($_X);$_X=strtr($_X,'SgPO9YZWFKmqyfxcjLJRzuM5vNts1b.{B4nC]i/2Dl0EheA [d8=Qp>VXo H}6GIw7ka3TrU<','=R9odmplAEPyk8gv[53xrMezqZHi7YhWCcX}1N/afj6]JtuS .BUnwVKLQO20ITF4b');$_R=str_replace('__FILE__',"'".$_F."'",$_X);eval($_R);$_R=0;$_X=0;
formatiert:
PHP:
$_X=base64_decode($_X);
$_X=strtr($_X,'SgPO9YZWFKmqyfxcjLJRzuM5vNts1b.{B4nC]i/2Dl0EheA [d8=Qp>VXo H}6GIw7ka3TrU<','=R9odmplAEPyk8gv[53xrMezqZHi7YhWCcX}1N/afj6]JtuS .BUnwVKLQO20ITF4b');
$_R=str_replace('__FILE__',"'".$_F."'",$_X);
eval($_R);$_R=0;$_X=0;
und schon wieder ein eval... $_X würde wenn man den code nur so ausführt natürlcih auf eine undefinierte Variable zeigen, aber in wirklichkeit steht ja dieser code in einem eval und somit gelten die vorher definierten script von oben auch hier und dort ist $_X definiert.

Nun ersetzten wir einfach nochmal eval durch die() und schon bekommen wir was wir haben wollen. Das Ursprungsskript. Du musst nur ein bisschen auf die encodingsachten und auf was du kopierst. ich würde in das die immer noch ein base64_encode() setzten, damit eben mehrere leerzeichen nicht zu einem werden, etc. Was browser eben so "optimieren" oder du machst anstatt eines die() direkt ein file_put_contents() und schreibst den kram in eine php datei. (im nachhinein finde ich das sogar die bessere variante)

Lg Kasalop
 
Danke Kasalop, du hast mir ("blöde Kuh") das Denken erspart.
Na ja, immrhin hat's dazu gereicht, zu verstehen.
Echt super erklärt und so richtig ausführlich, für "böde Kühe" halt :))
Vielen Dank und fühle Dich virtuell gedrückt, LG, Karin

PS: Hab Deine Anregung beeits umgesetzt und meine "Kauderwelsch" wieder in s Reine gebracht ...
 
@Kasalop:
PHP:
header("content-type: text/plain");
hilft bei diesen "encodingsachen" und der Anzeige in Browsern immer sehr.
 
Zurück
Oben