797 Stimmen

Wie schütze ich Python-Code davor, dass er von Benutzern gelesen werden kann?

Ich entwickle eine Software in Python, die an die Kunden meines Arbeitgebers verteilt werden soll. Mein Arbeitgeber möchte die Nutzung der Software mit einer zeitlich begrenzten Lizenzdatei einschränken.

Verteilt man die .py Dateien oder sogar .pyc Dateien ist es einfach, den Code, der die Lizenzdatei prüft, zu (dekompilieren und) zu entfernen.

Ein weiterer Aspekt ist, dass mein Arbeitgeber nicht möchte, dass der Code von unseren Kunden gelesen wird, da er befürchtet, dass der Code oder zumindest die "neuen Ideen" gestohlen werden könnten.

Gibt es eine gute Möglichkeit, dieses Problem zu lösen?

51voto

Lmwangi Punkte 2316

Haben Sie schon einen Blick auf pyminifier ? Es minimiert, verschleiert und komprimiert Python-Code. Der Beispielcode sieht für gelegentliches Reverse Engineering ziemlich übel aus.

$ pyminifier --nonlatin --replacement-length=50 /tmp/tumult.py
#!/usr/bin/env python3
=ImportError
=print
=False
=object
try:
 import demiurgic
except :
 ("Warning: You're not demiurgic. Actually, I think that's normal.")
try:
 import mystificate
except :
 ("Warning: Dark voodoo may be unreliable.")
=
class ():
 def __init__(self,*args,**kwargs):
  pass
 def (self,dactyl):
  =demiurgic.palpitation(dactyl)
  =mystificate.dark_voodoo()
  return 
 def (self,whatever):
  (whatever)
if __name__=="__main__":
 ("Forming...")
 =("epicaricacy","perseverate")
 .("Codswallop")
# Created by pyminifier (https://github.com/liftoff/pyminifier)

39voto

Vitaly Gordon Punkte 899

Utilice Cython . Es kompiliert Ihre Module zu hochperformanten C-Dateien, die dann zu nativen Binärbibliotheken kompiliert werden können. Im Vergleich zu .pyc-Bytecode ist dies im Grunde unumkehrbar!

Ich habe einen ausführlichen Artikel darüber geschrieben, wie man Cython für ein Python-Projekt einrichtet, lesen Sie ihn:

Schutz von Python-Quellen mit Cython

36voto

Aaron Digulla Punkte 308693

Ist Ihrem Arbeitgeber bewusst, dass er alle Ideen, die andere Leute aus Ihrem Code gewinnen, "stehlen" kann? Ich meine, wenn sie Ihre Arbeit lesen können, können Sie auch die ihre lesen. Vielleicht wäre es sinnvoller, zu überlegen, wie Sie von der Situation profitieren können, als zu befürchten, wie viel Sie verlieren könnten.

[EDIT] Antwort auf Nicks Kommentar:

Nichts gewonnen und nichts verloren. Der Kunde hat, was er will (und er hat dafür bezahlt, da er die Änderung selbst vorgenommen hat). Da er die Änderung nicht freigibt, ist es so, als wäre sie für alle anderen nicht geschehen.

Wenn der Kunde nun die Software verkauft, muss er den Urheberrechtsvermerk ändern (was illegal ist, Sie können also klagen und werden gewinnen -> einfacher Fall).

Wenn sie den Urheberrechtsvermerk nicht ändern, werden die Kunden der zweiten Ebene bemerken, dass die Software von Ihnen stammt, und sich fragen, was da los ist. Die Chancen stehen gut, dass sie sich mit Ihnen in Verbindung setzen und Sie so von dem Weiterverkauf Ihrer Arbeit erfahren.

Auch hier haben wir zwei Fälle: Der ursprüngliche Kunde hat nur ein paar Exemplare verkauft. Das bedeutet, dass er sowieso nicht viel Geld verdient hat, also warum sich die Mühe machen. Oder er hat eine große Menge verkauft. Das bedeutet, dass Sie bessere Chancen haben, zu erfahren, was sie tun, und etwas dagegen zu unternehmen.

Letztendlich versuchen die meisten Unternehmen jedoch, sich an die Gesetze zu halten (wenn ihr Ruf erst einmal ruiniert ist, ist es viel schwieriger, Geschäfte zu machen). Daher werden sie Ihre Arbeit nicht stehlen, sondern mit Ihnen zusammenarbeiten, um sie zu verbessern. Wenn Sie also den Quellcode mitliefern (mit einer Lizenz, die Sie vor dem einfachen Weiterverkauf schützt), ist die Wahrscheinlichkeit groß, dass sie die Änderungen, die sie vorgenommen haben, einfach wieder zurücknehmen, da dies sicherstellt, dass die Änderungen in der nächsten Version enthalten sind und sie sie nicht mehr pflegen müssen. Das ist eine Win-Win-Situation: Sie bekommen die Änderungen und sie können die Änderungen selbst vornehmen, wenn sie sie wirklich dringend brauchen, auch wenn Sie nicht bereit sind, sie in die offizielle Version aufzunehmen.

24voto

Konrads Punkte 2029

Verlassen Sie sich nicht auf eine Verschleierung. Wie Sie bereits richtig festgestellt haben, bietet sie nur sehr begrenzten Schutz. UPDATE: Hier ist ein Link zum Papier die den verschleierten Python-Code in Dropbox zurückentwickelt. Der Ansatz - Opcode-Remapping - ist ein gutes Hindernis, aber es kann eindeutig umgangen werden.

Stattdessen sollten Sie es, wie bereits von vielen Postern erwähnt, selbst machen:

  • Reverse-Engineering-Zeit nicht wert (Ihre Software ist so gut, dass es sich lohnt, dafür zu bezahlen)
  • Lassen Sie sie einen Vertrag unterschreiben und führen Sie, falls möglich, ein Lizenzaudit durch.

Oder, wie es die hervorragende Python-IDE WingIDE tut: Verschenken Sie den Code . Richtig, verschenken Sie den Code und lassen Sie die Leute für Upgrades und Support zurückkommen.

20voto

Erik Forsberg Punkte 4690

Der Versand von .pyc-Dateien hat seine Tücken - sie sind mit keiner anderen Python-Version als derjenigen kompatibel, mit der sie erstellt wurden, was bedeutet, dass Sie wissen müssen, welche Python-Version auf den Systemen läuft, auf denen das Produkt laufen soll. Das ist ein sehr einschränkender Faktor.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X