2010-08-12 4 views
6

Ich wollte wissen, wie einfach es ist, Python-Byte-Code zu dekompilieren. Ich habe eine Anwendung in Python gemacht, deren Quelle ich sicher sein will. Ich benutze py2exe, das im Grunde auf Python kompilierte Dateien beruht.Ist es einfach kompilierte (* .pyc) Python-Dateien vollständig zu dekompilieren?

Schützt das den Code?

+0

mögliche Duplikate von [Wie schütze ich Python-Code?] (Http://StackOverflow.com/questions/261638/how-doi-i-protect-python-code) –

+2

Ah ... Nach 3 Jahren, ich erkennen, wie absurd Code-Schutz ist. Tatsächlich existiert unter den weit verbreiteten Sprachen wie C/C++ keine andere Sprache, die nicht dekompiliert werden kann. – Shubham

Antwort

6

Hängt von Ihrer Definition von "vollständig" ab (in "vollständig dekompilieren") ... ;-). Sie werden nicht einfach die ursprüngliche Python-Quelle zurückbekommen - aber den Bytecode zu bekommen ist einfach und das Standardbibliotheksmodul dis existiert genau, um Bytecode leicht lesbar zu machen (obwohl es immer noch Bytecode ist, nicht voller Python-Quellcode ;-) .

+0

Nun, es gibt auch C++ - Decompiler, aber sie sind einfach nutzlos. Sie erhalten nicht den ursprünglichen Quellcode, sondern nur einige Anweisungen auf Baugruppenebene. SO bei voller Dekompatibilität ich meine das * eigentlich * den * tatsächlichen * Quellcode erzeugt. – Shubham

+0

Sie erhalten nicht den "tatsächlichen Quellcode". Kommentare werden weg sein. Aber Variablennamen, Methodennamen, Konstanten, Strings und all die Logik, die Sie auf sie anwenden, werden von jemandem gelesen werden, der interessiert genug ist. –

+1

@Shubham, yep, @Ned ist richtig: Python-Bytecode ist der Python-Quelle viel näher, als die Assembler-Sprache der C++ - Quelle, aus der sie erstellt wurde. Jeder Python-Experte, der es wert ist, kann die Logik der Quelle genau aus dem Bytecode rekonstruieren, ohne auch nur ewig damit zu arbeiten (nicht, dass es aus Assembler-Code so viel schwieriger ist - schau, wie lange es für jedes neue braucht) alberner "Kopierschutz" -Schema für ein Spiel, das demontiert, verstanden und kaputt gemacht werden soll ... ;-). –

1

Wenn Sie online suchen, können Sie Dekompiler für Python-Bytecode finden: Es gibt eine kostenlose Version zum Download, die aber nur Bytecode bis Python 2.3 verarbeitet, und eine online service, die bis Version 2.6 dekompiliert.

Es scheint noch keine Dekompilierern für neuere Versionen von Python-Bytecode zu geben, aber das ist fast sicher, nur weil niemand das Bedürfnis verspürt hat, eine grundlegende Schwierigkeit mit dem Bytecode selbst zu schreiben.

Einige Leute haben versucht, Python-Bytecode zu schützen, indem Sie den Interpreter ändern: Es gibt keinen besonderen Grund, warum Sie nicht Ihren eigenen Interpreter mit den verschiedenen Werten für den Bytecode kompilieren können: das verhindert eine einfache Überprüfung des Codes mit import dis, Aber es wird nicht lange auf einen entschlossenen Angriff warten und es kostet Geld, dass Code besser in die Verbesserung des Programms selbst investiert wird.

Kurz gesagt, wenn Sie Ihr Programm schützen wollen, dann verwenden Sie das Gesetz, um es zu tun: Verwenden Sie eine entsprechende Softwarelizenz und verfolgen Sie diejenigen, die es ignorieren. Code ist teuer zu schreiben, aber das Endergebnis ist selten der wertvolle Teil eines Softwarepakets: Daten sind viel wertvoller.