Python3.9をデコンパイルする方法がわからない
Python3.9でコンパイルされたexeファイルをコードに戻す方法が見当たらない!
そんな悩みを抱えた私がひたすら調べたこと・成功した方法をまとめていく
方法
pyinstxtractorをダウンロードしよう
下記のGithubからzip形式でダウンロードし解凍しておいてください
https://github.com/WithSecureLabs/python-exe-unpacker
exeファイルを展開しよう
先ほどダウンロードしたファイル内から「pyinstxtractor.py」を見つけてください。
そのファイルを使って展開します。
>>cd "pyinstxtractorのカレントディレクトリのパス"
>>python pyinstxtractor.py "展開したいexeファイルのパス"
実行して「You can now use a python decompiler on the pyc files within the extracted directory」と表示されれば完了です。exeファイルのカレントディレクトリに「〇〇.exe_extracted」というフォルダが生成されているので、開いてください。
そして「exeファイル名」だけの拡張子のないファイルがあるので「exeファイル名.pyc」と拡張子をつけてあげてください。
欠損値の補完
exeファイル名.pycの状態ではバイナリデータが欠損しており、このままデコンパイルするとエラーになります。ここでは詳しいやり方は省略しますが下記のサイトがとても分かりやすいので参考にしてください。しかしデコンパイルの方法は違うので、欠損値を補完したらこのサイトに戻ってきてくださいね。
https://manumaruscript.com/exe-decompile/
デコンパイル
まず初めに下記のライブラリをインストールします。
>>pip install pydumpck
インストールが完了したら、インストールしたライブラリのフォルダを開きます。
>>where python
C:\Users\ユーザー名\AppData\Local\Programs\Python\Python37\python.exe
実行するとpythonの実行ファイルのパスが出てくるので
「C:\Users\ユーザー名\AppData\Local\Programs\Python\Python37\」に「Lib\site-packages\pydumpck\pyc_checker\lib_pycdc\pycdc.exe」を加え、パスを作成します。
そのパスを下記のようにcmdに入力し、デコンパイルを行います。
>>C:\Users\ユーザー名\AppData\Local\Programs\Python\Python37\Lib\site-packages\pydumpck\pyc_checker\lib_pycdc\pycdc.exe exeのファイル名.pyc
実行するとコンソール上にソースコードが表示されるはずです。
もし一部文字化けしている場合は、
>>chcp 65001
と入力し、再度デコンパイルを行うと正しく表示されるかと思います。
番外編
デコンパイル中に下記のエラーが発生した場合は、バイナリでPythonのバージョンを表す先頭2文字を「61」から「55」に変更することで解決する可能性が高いです。55はPython3.8のバージョンを表しています。
まとめ
久しぶりに作成したので綺麗ではありませんが、皆さんのお役に立つことを願っています。