您如何对使用 PyInstaller“编译”的 EXE 进行逆向工程

逆向工程 Python 聚乙烯
2021-06-29 00:42:50

最近观看/阅读了Dave Kennedy 在 DEF CON 20 [PDF] 上的演讲,我想知道如何反编译用PyInstaller编译的 Python 脚本

在他的演讲中,他正在用 Python 创建一个基本的反向 shell 脚本,并使用 PyInstaller 将其转换为 EXE。

我的问题是您如何使用 PyInstaller 创建的 EXE 并完全或一般地从原始 Python 脚本中检索逻辑/源代码?

4个回答
  1. 提取 EXE 的附加数据(块以 PYZ 开头,直到文件末尾)
  2. 使用 PyInstaller 的存档查看器提取想要的文件
  3. decompyle .PYCs - 我个人推荐Uncompyle2

在 hack.lu 2012 上发表的题为“Dropbox 软件安全性的批判性分析”的演讲讨论了 Dropbox 桌面客户端的逆向,该客户端使用了类似的实现,但增加了自定义 Python 解释器和字节码的变化。

演示审查:http : //blog.csnc.ch/2012/12/asfws-a-critical-analysis-of-dropbox-software-security/
幻灯片链接http : //archive.hack.lu/2012/ Dropbox%20security.pdf

PyInstaller 发布了它的源代码,因此您可以准确地看到它如何在可执行文件中打包 python 代码......

更通用的方法是在 exe 上使用binwalk类的工具作为第一步。

这个过程应该让你尽可能接近原始来源。

基本上,pyinstaller 和 py2exe 之类的工具所做的就是将库和依赖项打包在一起,这样您就可以运行“独立”的 EXE,而无需下载它们或准备带有 Python 解释器的机器。

当您启动 EXE 时 - 它在内存中被解包。这包括 .pyc 文件(转换为字节码的 Python 代码)。pyREtic 是一种工具,可让您从内存中获取它们并将其转换回源代码。

https://github.com/MyNameIsMeerkat/pyREtic

热解

逆向工程混淆 Python 字节码 该工具包允许您将内存中的对象带回源代码,而无需直接访问磁盘上的字节码。如果磁盘上的应用程序 pyc 以多种方式之一进行了混淆,这会很有用。