Decompile compiled python binaries (exe, elf) - Retreive from .pyc
AWSハッキングを学び、練習する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、練習する:
HackTricks Training GCP Red Team Expert (GRTE)
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F4226785378-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FpWAf1y9UWEMh8PEO1vPV%252Fuploads%252Fgit-blob-ce4fbfd491ab398bd58639023728b416b0758bc1%252Fi3.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=60797913&sv=1)
バグバウンティのヒント:Intigritiにサインアップしてください。これは、ハッカーによって、ハッカーのために作られたプレミアムバグバウンティプラットフォームです!今日、https://go.intigriti.com/hacktricksに参加し、最大**$100,000**のバウンティを獲得し始めましょう!
コンパイルされたバイナリから.pycへ
ELFコンパイルバイナリから**.pycを取得する**ことができます:
In a python exe binary compiled you can get the .pyc by running: python exe バイナリ をコンパイルすると、次のコマンドを実行することで .pyc を取得できます:
From .pyc to python code
.pycデータ(「コンパイルされた」Python)については、元の Python コードを抽出しようとすることから始めるべきです:
必ずバイナリが拡張子「.pyc」を持っていることを確認してください(そうでない場合、uncompyle6は機能しません)
uncompyle6を実行していると、以下のエラーが発生することがあります:
エラー: 不明なマジックナンバー 227
この問題を解決するには、生成されたファイルの先頭に正しいマジックナンバーを追加する必要があります。
マジックナンバーはPythonのバージョンによって異なります。Python 3.8のマジックナンバーを取得するには、Python 3.8のターミナルを開いて、次のコマンドを実行する必要があります:
The magic number in this case for python3.8 is 0x550d0d0a
, then, to fix this error you will need to add at the beginning of the .pyc file the following bytes: 0x0d550a0d000000000000000000000000
Once you have added that magic header, the error should be fixed.
This is how a correctly added .pyc python3.8 magic header will look like:
エラー: ジェネリックエラーのデコンパイル
他のエラーとして: class 'AssertionError'>; co_code should be one of the types (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); is type <class 'NoneType'>
が表示されることがあります。
これはおそらく、マジックナンバーを正しく追加していないか、正しいマジックナンバーを使用していないことを意味しますので、正しいものを使用していることを確認してください(または新しいものを試してください)。
前のエラーのドキュメントを確認してください。
自動ツール
python-exe-unpackerツールは、Pythonで書かれた実行可能ファイルをアンパックおよびデコンパイルするために設計された、いくつかのコミュニティで利用可能なツールの組み合わせとして機能します。特に、py2exeおよびpyinstallerで作成されたものに対応しています。Pythonベースの実行可能ファイルを識別するためのYARAルールが含まれており、作成ツールを確認します。
ImportError: ファイル名: 'unpacked/malware_3.exe/pycache/archive.cpython-35.pyc' が存在しません
一般的な問題は、unpy2exeまたはpyinstxtractorを使用したアンパックプロセスの結果として不完全なPythonバイトコードファイルが発生し、その後Pythonバイトコードバージョン番号が欠落しているためにuncompyle6によって認識されないことです。これに対処するために、必要なPythonバイトコードバージョン番号を追加するprependオプションが追加され、デコンパイルプロセスを容易にします。
問題の例:
Analyzing python assembly
もし前の手順に従ってpythonの「オリジナル」コードを抽出できなかった場合は、抽出を試みることができますが、それはあまり説明的ではないので、再度オリジナルコードを抽出することを試みてください。ここで、.pyc バイナリを逆アセンブルするための非常にシンプルなコードを見つけました(コードフローを理解するのは幸運を祈ります)。.pyc がpython2からのものであれば、python2を使用してください:
Python to Executable
最初に、payloadがpy2exeとPyInstallerでどのようにコンパイルされるかを示します。
py2exeを使用してpayloadを作成するには:
http://www.py2exe.org/ からpy2exeパッケージをインストールします。
payload(この場合、hello.pyと名付けます)には、図1のようなスクリプトを使用します。値が1のオプション“bundle_files”は、Pythonインタプリタを含むすべてを1つのexeにバンドルします。
スクリプトが準備できたら、“python setup.py py2exe”というコマンドを発行します。これにより、図2のように実行可能ファイルが作成されます。
PyInstallerを使用してペイロードを作成するには:
pipを使用してPyInstallerをインストールします(pip install pyinstaller)。
その後、「pyinstaller –onefile hello.py」というコマンドを発行します(‘hello.py’は私たちのペイロードです)。これにより、すべてが1つの実行可能ファイルにバンドルされます。
References
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F4226785378-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FpWAf1y9UWEMh8PEO1vPV%252Fuploads%252Fgit-blob-ce4fbfd491ab398bd58639023728b416b0758bc1%252Fi3.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=60797913&sv=1)
バグバウンティのヒント: ハッカーによって、ハッカーのために作られたプレミアム バグバウンティプラットフォーム Intigritiにサインアップ しましょう!今日、https://go.intigriti.com/hacktricks に参加して、最大 $100,000 の報酬を得始めましょう!
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated