Frage

Nehmen wir an, dass es ein großes kommerzielles Projekt gibt (a.k.a. Projekt), das Python unter der Haube verwendet, um Plugins zum Konfigurieren neuer Steueroberflächen zu verwalten, die von Project angehängt und verwendet werden können.

Es gab ein kleines Informationsleck, ein Teil der Python-API des Projekts ging an die öffentlichen Informationen durch und die Benutzer konnten Python-Skripte schreiben, die von der zugrunde liegenden Python-Implementierung als Teil des Plugin-Lademechanismus von Project aufgerufen wurden.

Darüber hinaus konnten die Benutzer mithilfe des inspect-Moduls und der rohen __dict__-Messwerte einen Großteil der zugrunde liegenden Python-Implementierung des Projekts herausfinden.

Gibt es eine Möglichkeit, die Python-Geheimcodes geheim zu halten?

Ein kurzer Blick auf die Python-Dokumentation ergab eine Möglichkeit, den Import eines inspect-Moduls folgendermaßen zu unterdrücken:

import sys
sys.modules['inspect'] = None

Löst es das Problem vollständig?

War es hilfreich?

Lösung

Nein, dies löst das Problem nicht. Jemand könnte das Inspektionsmodul einfach in etwas anderes umbenennen und es importieren.

Was Sie versuchen, ist nicht möglich. Der Python-Interpreter muss in der Lage sein, Ihren Bytecode zu übernehmen und auszuführen. Jemand wird immer in der Lage sein, den Bytecode zu dekompilieren. Sie können immer einen AST erstellen und den Codefluss mit Variablen- und Klassennamen anzeigen.

Beachten Sie, dass dieser Vorgang auch mit kompiliertem Sprachcode ausgeführt werden kann. Der Unterschied besteht darin, dass Sie eine Montage erhalten. Einige Tools können aus der Baugruppe auf die C-Struktur schließen, aber ich habe nicht genug Erfahrung damit, um die Details zu kommentieren.

Welche spezifischen Informationen möchten Sie verbergen? Könnten Sie die Server-Seite des Algorithmus beibehalten und Ihre Software zu einem Client machen, der Ihren Webdienst berührt? Nur wenn Sie den Code auf einem Computer behalten, den Sie steuern, können Sie den Code wirklich kontrollieren. Sie können niemandem eine verschlossene Box und die Schlüssel für die Box geben und verhindern, dass er die Box öffnet, wenn er sie öffnen muss, um sie auszuführen. Dies ist der gleiche Grund, warum DRM nicht funktioniert.

Abgesehen davon ist es immer noch möglich, das Reverse Engineering zu erschweren, aber es wird niemals unmöglich sein, wenn der Client über die ausführbare Datei verfügt.

Andere Tipps

Es gibt keine Möglichkeit, Ihren Anwendungscode absolut geheim zu halten.

Ehrlich gesagt, wenn eine Gruppe engagierter und entschlossener Hacker (im guten Sinne, nicht im abwertenden Sinne) das Sicherheitsmodell für die Codesignatur der PlayStation knacken kann, hat Ihre App keine Chance. Sobald Sie Ihre App in die Hände von Personen außerhalb Ihres Unternehmens gegeben haben, kann sie rückentwickelt werden.

Wenn Sie sich jetzt etwas Mühe geben möchten, können Sie Ihre eigene eingebettete Python-Datei kompilieren, unnötige Module entfernen, den kompilierten Python-Bytecode verschleiern und ihn in ein Malware-Rootkit packen, das sich weigert, Ihre App zu starten wenn ein Debugger ausgeführt wird.

Aber Sie sollten wirklich über Ihr Geschäftsmodell nachdenken. Wenn Sie die Menschen, die sich für Ihr Produkt begeistern, als Bedrohung ansehen, wenn Sie diejenigen sehen, die bereit sind, Zeit und Mühe in die Anpassung Ihres Produkts zu investieren, um ihre Erfahrung als Gefahr zu personalisieren, müssen Sie möglicherweise Ihren Sicherheitsansatz überdenken . Angenommen, Sie sind nicht im DRM-Geschäft tätig oder haben ein ähnliches Modell, bei dem Geld von widerstrebenden Verbrauchern abgequetscht wird, sollten Sie einen Ansatz entwickeln, bei dem Informationen mit Ihren Benutzern ausgetauscht werden und diese Ihr Produkt gemeinsam verbessern können.

Gibt es eine Möglichkeit, die Python-Geheimcodes geheim zu halten?

Nein, gibt es nicht.

Python ist besonders einfach zurückzuentwickeln, aber andere Sprachen, auch kompilierte, lassen sich leicht rückgängig machen.

Sie können das Reverse Engineering von Software nicht vollständig verhindern. Wenn es darauf ankommt, können Sie immer die Assembler-Anweisungen analysieren, aus denen Ihr Programm besteht.

Sie können den Prozess jedoch erheblich verkomplizieren, indem Sie beispielsweise mit Python-Interna herumspielen.Bevor Sie jedoch zu wie gehen, empfehlen wir Ihnen, zu prüfen, ob dies zu tun ist.Es ist normalerweise schwieriger, Ihren Code zu "stehlen" (man muss ihn vollständig verstehen, um ihn schließlich erweitern zu können), als ihn selbst zu codieren.Eine reine, unverhüllte Python-Plugin-Oberfläche kann jedoch von entscheidender Bedeutung sein, um ein ganzes Ökosystem rund um Ihr Programm zu erstellen, das die möglichen Nachteile eines Blickes auf Ihre möglicherweise nicht perfekt gestalteten Codierungs-Interna bei weitem überwiegt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top