コンパイルされた.pycファイルを.pyファイルに逆コンパイルすることは可能ですか?


回答:


169

Uncompyle6はPython 3.xおよび2.7で動作します。これは最新のツールであるため推奨オプションであり、以前のフォークを統合して自動化された単体テストに焦点を当てることを目的としています。GitHubのページには、より多くの詳細を持っています。

  • あなたは、Python 3.7+を使用している場合、あなたも試みることができるdecompile3、3.7と高いに焦点を当てUncompyle6のフォークを。
  • 必要に応じて、これらのプロジェクトでGitHubの問題を提起します-両方とも、一連のPythonバージョンで単体テストスイートを実行します

古いUncompyle2はPython 2.7のみをサポートしています。これは、しばらく前に.pycバイトコードを.pyに逆コンパイルするのにうまくいきましたが、unpyclibは例外でクラッシュしました。

これらすべてのツールを使用すると、変数名を含めてコードを取り戻すことができますが、コメントはありません。


7
どうもありがとう。.pycではなく.pyファイルを誤って削除してしまいました。これにより、最初から書き直す必要がなくなりました。
avmohan 2014年

20
間違ったファイルを誤って削除してしまったため、ソース管理を強くお勧めします。
Andrew Palmer

30

はい、それはpypiunpyclibで見つけることができます。

$ pip install unpyclib

.pycファイルを逆コンパイルできます

$ python -m unpyclib.application -Dq path/to/file.pyc

20
私はこれを試しましたが、例外があり、複雑なコードのない非常に小さなファイル(Django settings.py)でクラッシュしました-代わりにuncompyle2が正常に動作しました。そのため、-1。
RichVel 2013

9
Python 3.6のlib \ site-packages \ unpyclib \ applcation.pyでクラッシュしましたprint __copyright- print括弧なしのPython 2.7バージョンを使用しているのはなぜですか?
David Ching

1
@DavidChing unpyclibの最初と最後のリリースは2009年で、Python 2のみのプログラムであると言っても安全です。
ボリス

28

Easy Python Decompilerを試すことができます。Decompyle ++とUncompyle2に基づいています。pythonバージョン1.0-3.3の逆コンパイルをサポートしています

注:私は上記のツールの作成者です。


5
それはその仕事をします。よくできました。ところで、あなたはこのツールをPythonで書きましたか?
しんぞう2015年

1
私にとってはうまくいきました(簡単なドラッグアンドドロップ)。Linuxディストリビューションがいいのは事実ですが、ウィンドウボックスを開くのはそれほど難しいことではありません。
ブライアンジャクソン

2015年の最後のリリースであり、クローズドソースのようですか?
ボリス


4

はい

私はuncompyle6逆コンパイルを使用します(最新のPython 3.8.0もサポートします)。

uncompyle6 utils.cpython-38.pyc > utils.py

そして、元のpythonと逆コンパイルされたpythonの比較は次のようになります:

pyc unutil utils

あなたが見ることができるように、ALMOST同じ、逆コンパイル効果があるVERY GOOD


3

はい、可能です。

Decompyle ++ https://github.com/zrax/pycdc/と呼ばれる完璧なオープンソースのPython(.PYC)デコンパイラーがあります

Decompyle ++は、コンパイルされたPythonバイトコードを有効で人間が読めるPythonソースコードに変換することを目的としています。他のプロジェクトでもさまざまな成功を収めてこれを達成していますが、Decompyle ++は、Pythonの任意のバージョンのバイトコードをサポートしようとする点で独特です。


2
pycdcは優れていますが、完全ではありません。github.com/zrax/pycdc/issuesを見ると、逆コンパイルで発生する問題には50種類以上あります。ただし、これはpythonの16程度のリリースにまたがっており、言語とコードの両方が大幅に変更されています。あなたが試したことが問題を見つけることができなかったのかもしれません。しかし、私の意見では、何かを「完璧」に分類するには、各バージョンのPythonライブラリ全体を言い、それを逆コンパイルして、独自のテストに適切に合格させる必要があります。デコンパイラーはまだそれを行うことができません。
岩が多い

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.