Hallo,
Wenn du den Sourcecode, z.B. PHP verschlüsseln möchtest, brauchst du ein professionelles Tool. Diese sind häufig ab 200€ zu haben.
Sorry, aber die verschlüsseln auch nicht. Was hier im Thread für Vorstellungen von Verschlüsselung aufgekommen sind, ist irgendwie extrem abenteuerlich.
Es gibt zwei Arten von Tools für PHP, die den Code verbergen:
* Tools, die obfuscating betreiben: Diese benennen Bezeichner in ganz
komische Namen um, ändern die Struktur des Codes ohne die Funktionalität
zu ändern, so dass ein normaler Mensch es schwer hat, den Code noch zu
lesen. Nützt aber nur bei kompletten Scripten etwas - auf Klassen-
sammlungen angewendet ist der Nutzen nämlich extrem gering, da
öffentliche Klasseneigenschaften und -Methoden natürlich weiterhin so
heißen müssen, wie sie heißen - und somit ein Großteil des Effekts
verloren geht. Außerdem gibt es inzwischen mit Sicherheit Tools, mit
denen man sowas rückgängig machen kann - man muss ja nur aufspüren, wo
ein bestimmter Bezeichner überall verwendet wird um zu sehen, wofür er in
etwa gut ist, und kann ihn dann global umbennnen in etwas sinnvolles. Ist
zwar etwas Arbeit, aber mit vertretbaren Aufwand kommt man wieder an
lesbaren Code. Nützt also nicht wirklich etwas.
* Tools, die nur Opcodes speichern: Dazu muss man wissen, wie PHP Dateien
denn tatsächlich verarbeitet. PHP hat nämlich 2 Durchgänge, um Dateien
auszuführen: Zuerst werden sie "kompiliert", d.h. in sogenannte "Opcodes"
gewandelt, danach werden die Opcodes ausgeführt. Im folgenden mal ein
Beispiel, wie so etwas aussieht:
Betrachten wir folgende PHP-Datei:
<?php
function ersetzeEuro ($arg) {
return str_replace ('€', 'EUR', $arg);
}
$betraege = array ('4 €', '5 €', '6 €');
$ausgabe = array_map ('ersetzeEuro', $betraege);
var_dump ($ausgabe);
?>
Mit geeigneten Extensions kann man sich nun ansehen, welche Opcodes PHP aus dieser Datei generiert:
Branch analysis from position: 0
filename: - schnipp -
function name: (null)
number of ops: 12
compiled vars: !0 = $betraege, !1 = $ausgabe
line # op fetch ext return operands
-------------------------------------------------------------------------------
3 0 NOP
7 1 INIT_ARRAY ~0 '4 €'
2 ADD_ARRAY_ELEMENT ~0 '5 €'
3 ADD_ARRAY_ELEMENT ~0 '6 €'
4 ASSIGN !0, ~0
8 5 SEND_VAL 'ersetzeEuro'
6 SEND_VAR !0
7 DO_FCALL 2 'array_map'
8 ASSIGN !1, $2
9 9 SEND_VAR !1
10 DO_FCALL 1 'var_dump'
12 11 RETURN 1
Function ersetzeeuro%00:
Branch analysis from position: 0
Return found
filename: - schnipp -
function name: ersetzeEuro
number of ops: 7
compiled vars: !0 = $arg
line # op fetch ext return operands
-------------------------------------------------------------------------------
3 0 RECV 1
4 1 SEND_VAL '€'
2 SEND_VAL 'EUR'
3 SEND_VAR !0
4 DO_FCALL 3 'str_replace'
5 RETURN $0
5 6* RETURN null
End of function ersetzeeuro%00.
Wenn jetzt eine Software diese Opcodes in einer Datei in Binärform speichert, dann kommt einem die Datei auch unleserlich vor. Es ist allerdings relativ leicht, aus den generierten Opcodes wieder PHP-Code zu erzeugen, der zu genau diesen Opcodes führt (sogar die Variablennamen bleiben erhalten - müssen sie übrigens auch, weil PHP es ja anbietet über $$name, über variable Variablennamen auf Variablen zuzugreifen) - ich weiß zwar nicht, ob es fertige Tools für sowas gibt (d.h. Opcodes wieder zu PHP-Code zurückwandeln), aber sowas wäre definitiv nicht allzu schwierig zu schreiben.
Insofern: Wirklich schützen kann man seine PHP-Scripte nie, man kann nur den Aufwand erhöhen, an den Source heranzukommen.
Viele Grüße,
Christian