web-dev-qa-db-ja.com

.pydファイルをリバースエンジニアリングするのはどれくらい難しいですか?

Python code? を保護するにはどうすればよいですか?)==を読んだ後、Windowsで非常に単純な拡張モジュールを試すことにしました。以前にLinuxで独自の拡張モジュールをコンパイルしましたが、これはWindowsでコンパイルしたのは初めてです。dllファイルを取得することを期待していましたが、代わりに.pydファイルを取得しました。 Docs は同じようなものだと言っていますが、 init[insert-module-name]()関数。

仮定するのは安全ですか、dllファイルのようにそれらをリバースエンジニアリングするのは難しいです。そうでない場合、.pycファイルから.dllファイルへのスケールでリバースエンジニアリングするためのそれらの硬さは何ですか?

16
yasar

すでにご存知のように、これらは特定の構造を持つDLLファイルと同等です。原則として、リバースエンジニアリングも同様に困難であり、マシンコードであり、メタデータはほとんど必要ありません。コードが認識できないほど最適化されている可能性があります。

ただし、必要な構造、および多くの関数がPyObject *sおよびその他の明確に定義されたCPythonタイプを処理することを知っていると、何らかの効果がある場合があります。アセンブリコードをCにマッピングするのにはあまり役立ちません(どちらかといえば、CPython固有のマクロのために難しくなります)。主にPython型と相互作用するコードは、C構造体を操作するコードとはかなり異なって見えます(そして比較的肥大化しています)。これにより、理解がさらに難しくなるか、何も面白くないコードが提供される可能性があります。リバースエンジニアがそれをスキップして、より早く企業秘密に到達できるようにします。

これらの懸念は、純粋なCコードである(つまり、Pythonと相互作用しない)コードには当てはまりません。そして、あなたはおそらくそれらをたくさん持っています。したがって、最終的には大きな違いはないはずです。

10
user395760

それらは基本的にネイティブコードです。しかし、すべての関数には面白い引数リストがあるため、各関数が何をするのかを理解するのは難しいかもしれません。難しいとは言わないまでも、dllと同じくらい難しいと思います。

2
quantum