2009-12-11 3 views
35

Ich habe ein Perl-Skript entwickelt, das eine vertrauliche Geschäftslogik hat.Wie kann ich mein Perl-Skript verschleiern, um das Reverse Engineering zu erschweren?

Ich muss dieses Skript einem anderen Perl-Codierer geben, um es in seiner Umgebung zu testen. Er könnte versuchen, die Logik in meinem Programm zu extrahieren. Also möchte ich mein Skript sehr schwer verständlich machen.

Irgendwelche Vorschläge?

+19

1) Es ist Perl, nicht PERL. 2) Viel Glück. Das ist unmöglich. Eine so komplizierte Sprache wie Perl hat so viel Verschleierungspotential und so viele weitere Script-Kiddies, die jede dunkle Ecke dieses Verschleierungspotentials kennen werden. Am besten schreiben Sie es in den Maschinencode und verteilen Sie die Binärdatei mit der XS-Verknüpfung, aber am Ende wird nichts, was Sie tun, wirklich jemanden verlangsamen, der Ihren Code verstehen will. –

+14

Denken Sie daran, dass alles, was Sie, einen Ansatz wie folgt wählen: http://search.cpan.org/~jjore/B-Deobfuscate-0.20/lib/B/Deobfuscate.pod könnte sehr wahrscheinlich in Verhängnis gelingen Ihre Arbeit. –

+7

@Chris Lutz: Script Kiddies sind per Definition keine guten Programmierer. – user359996

Antwort

124

Ich schlage vor, dass Sie diese Person und sein Management dazu bringen, eine rechtlich durchsetzbare Vereinbarung zu unterschreiben, die jegliche Form von Reverse Engineering und jegliche andere Möglichkeit des Zugriffs auf die Dinge, die Sie schützen wollen, verbietet.

Verschleierung kann Sie nicht vor einem entschlossenen Versuch zum Reverse Engineering schützen. Es ist theoretisch und praktisch unmöglich.

3

Sie könnten sich perlcc ansehen. Es garantiert keine Korrektheit, aber es sollte in Ordnung sein, wenn Sie in Ihren Skripten nichts zu Funky machen.

+14

-1 Perl Bashing ist eine angemessene Zeitvertreib für Kommentare, aber die Antworten sollten informativ sein, und relativ unvoreingenommen. Auch ist "perlcc" immer noch experimentell und funktioniert möglicherweise nicht und sollte mit äußerster Vorsicht und nicht für Produktionscode verwendet werden. Und das wird nicht wirklich jemanden aufhalten, der entschlossen ist. –

+1

Bearbeitet die Snarkiness. –

+3

Zurückgezogen -1, aber 'perlcc' ist immer noch eine schlechte Lösung (zu einem zugegebenermaßen unlösbaren Problem, also keine Strafe für den Versuch). –

7

Verwenden Sie Acme::Bleach, um den Code sauber zu bleichen. Dann verschleiern Sie den resultierenden gebleichten Code. Jeder codierte/verschleierte Code kann jedoch decodiert werden, da der Perl-Interpreter diesen ohnehin decodieren muss.

+0

nein, zuerst verschleiern, dann bleichen – ysth

+0

Das ist sogar besser als Acme :: EyeDrops – mob

9

Zunächst möchte ich sagen, dass Sie den falschen Baum bellen. Was Sie tun wollen, ist aus vielen Gründen falsch.

Zweitens, überprüfen Sie Filter::Crypto (und PAR::Filter::Crypto). Lesen Sie das gesamte Handbuch vor dem Start.

42

Versuchen Sie nicht, Ihre Perl zu verschleiern. Du verschwendest deine Zeit dort. Ich zeige vielen Leuten, wie man solche Sachen in Mastering Perl bricht, nur damit sie nicht versuchen, es zu tun.

Haben Sie in Betracht gezogen, das sensible Zeug in C zu implementieren und eine vorkompilierte Binärdatei mit einer Perl-Schnittstelle zu versenden? Es ist relativ einfach zu machen und hat die gleiche Wirkung, ohne sich auf einen cleveren Trick zu verlassen. Die entschlossene, erfahrene Person kann sie immer noch zurückentwickeln, aber das gilt für jede Lösung. Sie müssen die Bibliothek für jede Plattform kompilieren, aber wenn dieses Zeug wichtig genug ist, um es zu schützen, ist es wichtig genug zu laden, um es zu benutzen.

Alternativ können Sie die sensiblen Dinge hinter einen Webservice stellen, damit sie nie den Code bekommen.

Eine kluge Taktik, die ich gesehen habe, beinhaltet eine Datei, die auf jeden Client zugeschnitten ist, sei es durch Formatierung oder Inhalt. Dies dient als etwas wie ein Wasserzeichen niedriger Qualität, das banalen Code, Kommentare oder Dokumente verwendet. Finde diese seltsame Textsequenz und du kennst die Quelle des Lecks.

Die geschäftliche Antwort ist, Leuten, denen Sie nicht vertrauen, das Programm nicht zu geben, oder die Strafen steif genug zu machen, um sie zu entmutigen.

1

Auf OSX zumindest bieten sie drei große Befehle:

parl 
par.pl 
pp 

parl - eine Par-Datei in eine ausführbare Binärdatei konvertieren, die nicht Perl oder anderen Modulen

par laufen muss.pl - machen par Dateien von Ihrem Perl-Skripte

pp - ein Perl-Skript in eine binäre kompilieren (aber es bedarf noch Perl)

nicht sicher, ob diese für Windows oder Linux zur Verfügung stehen.

Eine interessante Sache, die ich bemerkte, war, dass, als ich einen Befehl in meinem kompilierten Perl-Skript verwendete, um das aktuelle Arbeitsverzeichnis anzuzeigen, es dasselbe wie das Verzeichnis meiner neuen binären ausführbaren Datei war. Ich hätte gedacht, dass es etwas in/tmp dekomprimiert und von dort ausgeführt hätte, aber das war nicht der Fall.

Verwandte Themen