5分钟解析Python加密exe:Python EXE Unpacker逆向实战指南
【免费下载链接】python-exe-unpacker 项目地址: https://gitcode.com/gh_mirrors/pyt/python-exe-unpacker
你是否遇到这些痛点?
当你拿到一个Python打包的可执行文件(EXE),是否曾因无法查看源码而束手无策?作为开发者,你可能需要分析第三方工具的实现逻辑;作为安全研究员,你可能需要审计可疑程序的恶意行为。但PyInstaller和py2exe等工具将Python代码打包成EXE后,会对源码进行加密和混淆,形成一道难以逾越的技术壁垒。
读完本文你将获得:
- 掌握Python EXE文件的逆向工程完整流程
- 学会使用Python EXE Unpacker工具解析加密打包文件
- 解决PyInstaller/py2exe版本兼容性问题的实战方案
- 应对加密字节码的高级解密技巧
工具简介:Python EXE Unpacker
Python EXE Unpacker是一款专为逆向工程师设计的开源工具,能够自动识别并解包由PyInstaller和py2exe打包的可执行文件。该工具整合了多种逆向工程技术,包括PE文件分析、加密字节码解密和Python字节码反编译,形成一站式解决方案。
核心功能特性
| 功能 | 描述 | 适用场景 |
|---|---|---|
| 自动类型识别 | 通过PE文件结构分析,识别PyInstaller/py2exe打包格式 | 未知来源EXE文件分析 |
| 加密字节码解密 | 支持解析PyInstaller的AES加密保护 | 处理加密打包的商业软件 |
| 魔法数修复 | 自动修复缺失Python magic的字节码文件 | 解决反编译工具报错问题 |
| 版本兼容处理 | 支持Python 2.7-3.x生成的EXE文件 | 处理不同时期打包的程序 |
环境准备与安装
系统要求
- Python 2.7或更高版本(推荐Python 3.7+)
- 支持Windows/macOS/Linux操作系统
- 至少100MB可用磁盘空间(用于依赖库和临时文件)
安装步骤
- 克隆代码仓库
git clone https://gitcode.com/gh_mirrors/pyt/python-exe-unpacker
cd python-exe-unpacker
- 安装依赖库
# Python 2.x
pip2 install --user -r requirements.txt
# Python 3.x
pip3 install --user -r requirements.txt
注意:对于Linux系统,可能需要额外安装
pefile系统依赖:sudo apt-get install python3-pefile # Debian/Ubuntu sudo yum install python3-pefile # CentOS/RHEL
实战操作指南
基础用法:解包PyInstaller程序
以名为malware.exe的可疑文件为例,执行以下命令进行完整解包:
python python_exe_unpack.py -i malware.exe
工具执行流程如下:
- 类型识别阶段
[*] On Python 3.8
[*] This exe is packed using pyinstaller
[*] Unpacking the binary now
[*] Processing malware.exe
[*] Pyinstaller version: 2.1+
[*] Python version: 36
[*] Length of package: 6284512 bytes
[*] Found 54 files in CArchive
[*] Beginning extraction...please standby
[*] Successfully extracted pyinstaller exe.
- 文件提取结果
工具会创建malware.exe_extracted目录,其中包含:
- 主程序文件(无扩展名,如
hello) - 依赖库文件(如
python36.dll) - PYZ归档提取目录(
out00-PYZ.pyz_extracted)
- 定位核心代码
在提取目录中,重点关注以下文件:
-rw-rw-r-- 1 user user 111 Nov 14 13:08 hello # 主程序字节码
-rw-rw-r-- 1 user user 628K Nov 14 13:08 out00-PYZ.pyz # 依赖库归档
drwxrwxr-x 2 user user 12K Nov 14 13:08 out00-PYZ.pyz_extracted # 归档内容
高级技巧:处理加密字节码
当遇到加密保护的PyInstaller程序时,工具会自动检测并提示解密:
[*] Encrypted pyc file is found. Decrypt it? [y/n] y
解密过程涉及以下步骤:
- 从
pyimod00_crypto_key文件提取加密密钥 - 使用AES-CFB模式解密PYZ归档
- 修复解密后的字节码文件头
- 反编译为可读Python源码
特殊场景:修复缺失魔法数的PYC文件
某些情况下,提取的字节码文件会缺失Python magic数(如PyInstaller主程序),导致反编译失败。使用-p参数修复:
python python_exe_unpack.py -p malware.exe_extracted/hello
修复原理:工具会自动添加对应Python版本的magic数(如Python 2.7为\x03\xf3\x0d\x0a),使文件能被uncompyle6正确识别。
常见问题解决方案
问题1:版本不兼容错误
错误信息:
[-] Error in unpacking the exe. Probably due to version incompability
解决方案:
- 使用与打包时相同的Python版本执行工具
- 尝试切换Python 2/3环境:
alias python=python2 # 切换到Python 2 alias python=python3 # 切换到Python 3
问题2:反编译失败
错误信息:
[-] Unable to decompile the pyc file.
解决方案:
-
确认
uncompyle6版本支持目标Python版本:pip install -U uncompyle6 # 更新到最新版本 -
手动指定Python版本进行反编译:
uncompyle6 --python-version 3.6 hello.pyc > hello.py
问题3:PE文件解析错误
错误信息:
[-] Error: Could not open malware.exe
解决方案:
- 检查文件路径是否正确
- 验证文件完整性(可能是损坏的EXE文件)
- 对于受保护的文件,尝试使用管理员权限运行
高级应用:集成到自动化分析流程
Python EXE Unpacker可通过编程方式集成到自动化分析系统中,以下是一个简单的Python API调用示例:
from python_exe_unpack import PyInstaller, Py2Exe
# 分析PyInstaller文件
unpacker = PyInstaller("sample.exe", output_dir="/tmp/analysis")
if unpacker.is_magic_recognised():
unpacker.unpacked("sample.exe")
print(f"文件已解包至: {unpacker.extraction_dir}")
# 分析py2exe文件
unpacker = Py2Exe("legacy.exe")
if unpacker.is_magic_recognised():
unpacker.unpacked("legacy.exe")
总结与展望
Python EXE Unpacker作为一款开源逆向工程工具,为开发者和安全研究员提供了强大的Python EXE文件分析能力。通过本文介绍的方法,你可以轻松解析大多数PyInstaller和py2exe打包的可执行文件,还原出原始Python源码。
未来展望:
- 增加对 nuitka 等新型打包工具的支持
- 开发图形化界面提升用户体验
- 集成静态代码分析功能,自动检测恶意行为
工具的完整代码和最新更新请访问官方仓库:https://gitcode.com/gh_mirrors/pyt/python-exe-unpacker
法律声明:本文所述技术仅用于合法的逆向工程和安全研究,未经授权分析他人软件可能违反法律法规。使用前请确保你拥有目标文件的合法访问权限。
【免费下载链接】python-exe-unpacker 项目地址: https://gitcode.com/gh_mirrors/pyt/python-exe-unpacker
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



