Decompile compiled python binaries (exe, elf) - Retreive from .pyc
最后更新于
最后更新于
从一个ELF编译的二进制文件中,您可以使用以下方法获取**.pyc**:
在一个Python可执行二进制文件中编译,您可以通过运行以下命令获取 .pyc 文件:
对于 .pyc 数据("已编译"的 Python),您应该开始尝试 提取 原始 Python 代码:
确保二进制文件的扩展名为".pyc"(如果不是,则uncompyle6将无法工作)
在执行uncompyle6时,您可能会遇到以下错误:
要修复这个问题,您需要在生成的文件开头添加正确的魔术数字。
魔术数字随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字节码文件,这是由于使用unpy2exe或pyinstxtractor进行解包过程而导致的,然后由于缺少Python字节码版本号而无法被uncompyle6识别。为了解决这个问题,添加了一个prepend选项,它附加了必要的Python字节码版本号,从而促进了反编译过程。
问题示例:
首先,我们将向您展示如何在py2exe和PyInstaller中编译有效载荷。
对于有效载荷(在本例中,我们将其命名为hello.py),使用类似于图1中的脚本。选项“bundle_files”值为1将把所有内容,包括Python解释器,捆绑到一个exe文件中。
一旦脚本准备就绪,我们将发出命令“python setup.py py2exe”。这将创建可执行文件,就像图2中所示。
使用pip安装PyInstaller(pip install pyinstaller)。
然后,我们将发出命令“pyinstaller –onefile hello.py”(提醒一下,‘hello.py’是我们的payload)。这将把所有内容捆绑到一个可执行文件中。
漏洞赏金提示:注册Intigriti,一个由黑客创建的高级漏洞赏金平台!立即加入我们,访问,开始赚取高达**$100,000**的赏金!
作为几个社区可用工具的组合,旨在帮助研究人员解压和反编译使用py2exe和pyinstaller创建的Python可执行文件。它包括YARA规则,用于识别可执行文件是否基于Python,并确认创建工具。
如果您无法按照先前的步骤提取Python的“原始”代码,那么您可以尝试提取汇编代码(但它并不是非常描述性的,所以请尝试再次提取原始代码)。在我找到了一个非常简单的代码来反汇编_.pyc_二进制文件(祝您好运理解代码流程)。如果_.pyc_是来自Python2,请使用Python2:
从安装py2exe软件包。
漏洞赏金提示:注册Intigriti,这是一家由黑客创建的高级漏洞赏金平台!立即加入我们,访问,开始赚取高达**$100,000**的赏金!
如果您想看到您的公司在HackTricks中做广告或下载PDF格式的HackTricks,请查看!
获取
探索,我们的独家
加入 💬 或 或关注我们的Twitter 🐦 。
通过向和 github仓库提交PR来分享您的黑客技巧。