Decompile compiled python binaries (exe, elf) - Retreive from .pyc

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)

支持HackTricks的其他方式:

漏洞赏金提示注册Intigriti,一个由黑客创建的高级漏洞赏金平台!立即加入我们,访问https://go.intigriti.com/hacktricks,开始赚取高达**$100,000**的赏金!

从编译的二进制文件到 .pyc

从一个ELF编译的二进制文件中,您可以使用以下方法获取**.pyc**:

在一个Python可执行二进制文件中编译,您可以通过运行以下命令获取 .pyc 文件

从 .pyc 文件到 Python 代码

对于 .pyc 数据("已编译"的 Python),您应该开始尝试 提取 原始 Python 代码

确保二进制文件的扩展名为".pyc"(如果不是,则uncompyle6将无法工作)

在执行uncompyle6时,您可能会遇到以下错误:

错误:未知的魔术数字227

要修复这个问题,您需要在生成的文件开头添加正确的魔术数字

魔术数字随Python版本而变化,要获取Python 3.8的魔术数字,您需要打开Python 3.8终端并执行:

在这种情况下,Python3.8 的魔术数字是**0x550d0d0a,为了修复这个错误,您需要在.pyc 文件开头**添加以下字节:0x0d550a0d000000000000000000000000

一旦您添加了这个魔术头部,错误应该就会被修复。

这是一个正确添加的**.pyc Python3.8 魔术头部**的样子:

错误:反编译通用错误

其他错误,如: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 工具 作为几个社区可用工具的组合,旨在帮助研究人员解压和反编译使用py2exe和pyinstaller创建的Python可执行文件。它包括YARA规则,用于识别可执行文件是否基于Python,并确认创建工具。

ImportError:文件名:'unpacked/malware_3.exe/pycache/archive.cpython-35.pyc' 不存在

一个常见问题涉及到一个不完整的Python字节码文件,这是由于使用unpy2exe或pyinstxtractor进行解包过程而导致的,然后由于缺少Python字节码版本号而无法被uncompyle6识别。为了解决这个问题,添加了一个prepend选项,它附加了必要的Python字节码版本号,从而促进了反编译过程。

问题示例:

分析Python汇编

如果您无法按照先前的步骤提取Python的“原始”代码,那么您可以尝试提取汇编代码(但它并不是非常描述性的,所以请尝试再次提取原始代码)。在这里我找到了一个非常简单的代码来反汇编_.pyc_二进制文件(祝您好运理解代码流程)。如果_.pyc_是来自Python2,请使用Python2:

Python转可执行文件

首先,我们将向您展示如何在py2exe和PyInstaller中编译有效载荷。

使用py2exe创建有效载荷:

  1. http://www.py2exe.org/安装py2exe软件包。

  2. 对于有效载荷(在本例中,我们将其命名为hello.py),使用类似于图1中的脚本。选项“bundle_files”值为1将把所有内容,包括Python解释器,捆绑到一个exe文件中。

  3. 一旦脚本准备就绪,我们将发出命令“python setup.py py2exe”。这将创建可执行文件,就像图2中所示。

使用PyInstaller创建payload:

  1. 使用pip安装PyInstaller(pip install pyinstaller)。

  2. 然后,我们将发出命令“pyinstaller –onefile hello.py”(提醒一下,‘hello.py’是我们的payload)。这将把所有内容捆绑到一个可执行文件中。

参考资料

漏洞赏金提示注册Intigriti,这是一家由黑客创建的高级漏洞赏金平台!立即加入我们,访问https://go.intigriti.com/hacktricks,开始赚取高达**$100,000**的赏金!

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)

支持HackTricks的其他方式:

最后更新于