2012-08-22 6 views
12

Nach dem Lesen How do I protect Python code?, entschied ich mich, ein wirklich einfaches Erweiterungsmodul unter Windows zu versuchen. Ich habe mein eigenes Erweiterungsmodul bereits auf Linux kompiliert, aber dies ist das erste Mal, dass ich es unter Windows kompiliert habe. Ich habe erwartet, eine .dll-Datei zu erhalten, aber stattdessen habe ich eine .pyd-Datei. Docs sagt, sie sind irgendwie gleich, aber es muss eine init[insert-module-name]() Funktion haben.Wie schwierig, .pyd-Dateien zurückzuentwickeln?

Ist es sicher anzunehmen, es ist genauso schwierig, sie als DLL-Dateien zurück zu entwickeln. Wenn nicht, was ist ihre Härte, um in einer Skala von .pyc-Datei zu .dll-Dateien zurückzuentwickeln?

+0

Wenn es heißt "Ja, .pyd-Dateien sind dll's", was ist der Sinn zu fragen, wenn sie weniger schwierig sind, Reverse Engineering als DLL-Dateien? Das ist immer noch native Code ... –

+0

@MatteoItalia Ich habe schwer zu verstehen, wie unterschiedlich sie tatsächlich sind. Zum Beispiel sind .pyc-Dateien auch kompilierter Code, aber sie sind einfacher zu rekonstruieren als DLL-Dateien. – yasar

+1

@ yasar11732 .pyc-Dateien sind jedoch kein systemeigener Code. – delnan

Antwort

9

Sie entsprechen, wie Sie bereits festgestellt haben, DLL-Dateien mit einer bestimmten Struktur. Im Prinzip sind sie ebenso schwierig zu reverse-engineering, sie sind Maschinencode, benötigen sehr wenig Metadaten und der Code wurde möglicherweise bis zur Unkenntlichkeit optimiert.

Die erforderliche Struktur und das Wissen, dass viele Funktionen PyObject * s und andere wohldefinierte CPython-Typen behandeln, kann jedoch Auswirkungen haben. Es wird nicht wirklich helfen, den Assembler-Code auf C abzubilden (wenn überhaupt, wird es aufgrund von CPython-spezifischen Makros schwieriger). Code, der hauptsächlich mit Python-Typen interagiert, sieht ganz anders aus als Code-manipulierende C-Strukturen (und vergleichsweise aufgebläht). Dies macht es vielleicht noch schwieriger zu verstehen, oder es gibt Code preis, der nichts Interessantes tut und es einem Reverse-Engineer ermöglicht, darüber zu springen und zu Ihren Geschäftsgeheimnissen früher zu gelangen.

Keines dieser Bedenken gilt für Code-Teile, die reiner C-Code sind (d. H. Nicht mit Python interagieren). Und Sie haben wahrscheinlich viele davon. Es sollte also am Ende keinen wesentlichen Unterschied machen.

1

Sie sind im Grunde nativen Code. Aber weil jede Funktion lustige Argumentlisten hat, ist es vielleicht schwieriger zu sehen, was jede Funktion macht. Ich würde sagen, sie sind so hart wie Dll, wenn nicht sogar härter.

Verwandte Themen