1. PyInstaller 打包 exe 逆向原理剖析
当你用 PyInstaller 把 Python 脚本打包成 exe 时,它实际上做了三件事:首先将 Python 代码编译成.pyc 字节码,然后把这些字节码和 Python 解释器一起打包,最后加上一个自解压的启动器。这个过程中最关键的步骤是字节码生成和资源打包,而我们要逆向的就是这个过程。
PyInstaller 生成的 exe 文件结构很有特点,它本质上是个自解压压缩包。用二进制编辑器打开这类 exe,你会在文件末尾看到明显的"MEI"魔数标记,这就是 PyInstaller 的签名。解包时,pyinstxtractor 工具正是通过定位这个标记来找到打包数据的起始位置。
逆向过程中最麻烦的是 PyInstaller 会对.pyc 文件做手脚。正常的 Python 字节码文件包含 16 字节头部(4 字节魔数 +4 字节时间戳 +4 字节文件大小 +4 字节校验和),但 PyInstaller 打包时会故意去掉前 8 个字节。这就是为什么直接反编译提取出的文件会报"Invalid pyc magic number"错误。
2. 工具准备与环境搭建
工欲善其事必先利其器,我们需要准备以下工具链:
- pyinstxtractor:这是核心解包工具,建议从 GitHub 获取最新版:
git clone https://github.com/extremecoders-re/pyinstxtractor.git
- uncompyle6:字节码反编译工具,用 pip 安装:
pip install uncompyle6
- 十六进制编辑器:推荐免费好用的 HxD 或 010 Editor,用来修复 pyc 文件头。

