あちこち検索しましたが、Python 2.7 .pyc で動作する逆コンパイラが見つかりません。Python 2.7で動作するものを知っている人はいますか? ありがとう
5 に答える
今日はずっと午前中だったので、誰かがまだこれに苦労している場合は、自分に合った解決策を見つけました。
インストール手順:
git clone https://github.com/gstarnberger/uncompyle.git
cd uncompyle/
sudo ./setup.py install
プログラムがインストールされると (注: システム全体でアクセス可能な Python パッケージにインストールされるため、 にあるはず$PATH
です)、次のように Python ファイルを復元できます。
uncompyler.py thank_goodness_this_still_exists.pyc > recovered_file.py
逆コンパイラは、主にコメントの形でノイズを追加しますが、驚くほどクリーンで、元のコードに忠実であることがわかりました。コードを実行できるようにするには、復元されたファイルの終わり近くにある +++ で始まる小さなテキスト行を削除する必要があります。
Decompyle++ (pycdc) は、さまざまな Python バージョンで動作するようです: https://github.com/zrax/pycdc
例えば:
git clone https://github.com/zrax/pycdc
cd pycdc
make
./bin/pycdc Example.pyc > Example.py
更新(2019-04-22)-私が最初に述べた答えではなく、最近はuncompyle6を使用したいようです。
これはうまくいくようです:http ://code.google.com/p/unpyc/
問題8は2.7をサポートしていると言っています:http ://code.google.com/p/unpyc/updates/list
更新(2013-09-03)-コメントや他の回答に記載されているように、unpycの代わりにhttps://github.com/wibiti/uncompyle2またはhttps://github.com/gstarnberger/uncompyleを参照する必要があります。
これは、pyc ファイルを逆コンパイルするための優れたツールです。
私がコーディングしたもので、python 1.0 - 3.3 をサポートしています。
その uncompyle2 と decompyle++ に基づいています
Ned Batchelder は、.pyc ファイルをアンマーシャリングし、その中のすべてのコード オブジェクトを逆アセンブルする短いスクリプトを投稿したので、Python バイトコードを確認できます。Python の新しいバージョンでは、setmodtime
と print の行をコメントアウトする必要があるようです (ただし、sets の行はコメントしないでくださいmoddate
)。
それを Python ソースに戻すことは、理論的には可能ですが、やや難しくなります。Python の古いバージョンで動作するこれらすべてのプログラムは、それを行うと思います。