1. 逆向分析Python打包EXE的完整实战记录
最近在参加CTF比赛时遇到一个Python打包的逆向题目,完整走了一遍从查壳到最终解密的流程。这类Python逆向在实际工作中也很常见,比如分析恶意软件、破解商业软件保护等场景。下面详细记录我的解题过程,包含工具使用技巧和踩坑经验。
1.1 初始分析与文件识别
拿到题目文件PZthon.exe,首先用Detect It Easy查壳:
code复制文件类型: PE32+ executable (console) x86-64
编译器: Microsoft Visual C++ 2015-2022
附加信息: PyInstaller打包标识明显
关键发现:
- 64位控制台程序,无壳保护
- 通过字符串特征判断是PyInstaller打包的Python程序
- IDA反编译看到明显的PyInstaller初始化代码和Python运行时特征
经验:Python打包的EXE在IDA中通常能看到Py_Initialize、PyRun_SimpleString等函数调用,字符串区也常包含"PythonXX.dll"字样(XX对应版本号)
1.2 PyInstaller解包实战
使用pyinstxtractor.py工具解包:
bash复制python pyinstxtractor.py PZthon.exe
输出目录结构:
code复制PZthon_extracted/
├── PYZ-00.pyz
├── PYZ-00.pyz_extracted
├── PZthon.exe.manifest
└── PZthon.pyc # 目标文件
解包后关键文件:
- PYZ-00.pyz - 包含依赖库的压缩包
- PZthon.pyc - 主程序字节码
避坑指南:不同PyInstaller版本打包的文件结构可能不同,遇到解包失败时可以尝试更新pyinstxtractor.py到最新版
1.3 反编译难题与工具选择
尝试用uncompyle6反编译PZthon.pyc时遇到版本兼容问题:
bash复制uncompyle6 PZthon.pyc
# 报错:Magic number mismatch (expected 0x610d
