Wie schützt man Python-Quellcode?

8

Ist es möglich, nur die Bytecode-Version (.pyc-Datei) eines Python-Skripts anstelle der ursprünglichen .py-Datei zu verteilen? Meine App bettet den Python-Interpreter ein und ruft PyImport_Import auf, um ein Skript zu laden. Wie kann ich ihm mitteilen, dass er nach einer .pyc-Datei suchen und diese importieren soll?

    
Nathan Osman 13.01.2010, 08:30
quelle

5 Antworten

5

Ich habe es geschafft, indem ich die .py-Bibliothek und das einfache .py-Programm erstellt habe, das diese Bibliothek verwendet. Dann kompilierte ich die Bibliothek nach .pyc und verteilte: Programm als .py Quelle und Bibliothek als kompilierte .pyc.

    
Michał Niklas 13.01.2010, 08:38
quelle
13

Verwenden Sie das Einfrieren -Tool, das in der Python-Quellstruktur als Tools/freeze . Es konvertiert Python-Byte-Code in C-Arrays; Mit einem C-Compiler können Sie alle Ihre Module in ein neues Programm einbetten, das dann mit den Standard-Python-Modulen verknüpft wird.

Beachten Sie, dass ein Einfrieren einen C-Compiler erfordert.

Andere Dienstprogramme:

1- PyInstaller

2- Py2Exe

3- Squeeze

4- cx_freeze

weitere Informationen zu effbot. org

    
Michel Gokan 13.01.2010 08:44
quelle
5

Da Sie Ihr Hauptprogramm in C ++ schreiben, können Sie alles tun, um Ihre Python-Dateien zu schützen. Sie könnten sie für die Verteilung verschlüsseln und sie dann rechtzeitig entschlüsseln, um sie zum Beispiel in den Python-Interpreter zu importieren.

Da Sie PyImport_Import verwenden, können Sie Ihren eigenen __import__ Hook schreiben, um die Module nicht aus einer Datei, sondern aus einem Speicherpuffer zu importieren, sodass Ihre Umwandlung in .pyc-Datei im gesamten Speicher ohne verständlichen Python-Code erfolgen kann auf der Festplatte überhaupt.

    
Ned Batchelder 13.01.2010 12:44
quelle
2

Dies sollte kein Problem sein. Wenn Sie ein eigenständiges Programm mit py2exe erstellen, erhalten Sie nur die .pyc-Dateien.

Normalerweise müssen Sie Python nicht sagen, dass es nach .pyc-Dateien sucht, es tut es trotzdem. Nur wenn es eine neuere .py-Quelldatei gibt, wird diese verwendet.

Der Schutz des Quellcodes ist jedoch möglicherweise nicht sehr hoch.

    
Ber 13.01.2010 08:37
quelle
2

Im interaktiven Interpreter ist das automatisch - wenn es kein .py gibt, wird die .pyc trotzdem verwendet:

%Vor%

Könnten Sie es einfach versuchen, wenn das mit der API genauso funktioniert?

Bearbeitet um hinzuzufügen: Ich stimme Ber darin zu, dass Ihr Code-Schutz eher schwach sein wird. -O wird Docstrings entfernen, wenn dies nicht das Verhalten Ihres Programms ändert, was das Verhalten schwieriger machen könnte, aber was Sie wirklich brauchen, um eine Art Bytecode zu verschleiern.

Ich weiß nicht, ob ein fertiges Verschleierungstool für Python existiert, aber das klingt machbar, wenn du die Zeit investieren willst / kannst (und dich nicht allzu dumm dabei fühlen, und können schicke deinen eigenen Dolmetscher).

    
Bernd Haug 13.01.2010 08:46
quelle

Tags und Links