
1. PyInstaller打包文件复原的核心原理PyInstaller打包的EXE或ELF文件本质上是一个自解压的压缩包其中包含了Python解释器、依赖库以及被编译成.pyc字节码的源代码。复原过程的核心在于逆向这个打包流程主要分为三个关键阶段文件解包使用专用工具提取出.pyc字节码文件头修复补全被PyInstaller移除的.pyc文件头反编译将.pyc转换回可读的Python源代码注意整个过程需要保持字节级的精确操作任何细微的字节错位都会导致反编译失败。2. 工具链准备与环境配置2.1 必备工具清单PyInstxtractor核心解包工具支持Python2环境010 Editor二进制文件编辑神器可选但推荐uncompyle6最新版Python字节码反编译器objcopyELF文件处理工具Linux系统自带2.2 环境搭建要点建议在Windows 10 WSL2混合环境下操作# WSL环境下安装uncompyle6 pip install uncompyle63.7.4 # 确认版本兼容性 # Windows侧准备 choco install python2 # 通过Chocolatey安装Python23. 详细复原流程解析3.1 EXE文件处理流程3.1.1 解包阶段实操# 将pyinstxtractor.py复制到当前目录 cp /path/to/pyinstxtractor.py . # 使用Python2执行解包 python2 pyinstxtractor.py target.exe解包后会生成target.exe_extracted目录其中关键文件target无后缀主程序字节码struct无后缀文件头模板3.1.2 字节码修复技巧用010 Editor打开struct文件记录前16字节的Magic Number将这段Magic Number插入到target文件开头保存为target.pyc常见错误如果出现Magic value mismatch说明头修复不完整需要检查字节对齐。3.2 ELF文件特殊处理对于Linux平台的ELF打包文件需要先提取pydata段objcopy --dump-section pydatatarget.dump target.elf python2 pyinstxtractor.py target.dump后续步骤与EXE处理相同但要注意ELF文件的字节序可能不同需要确认Python版本匹配通过Magic Number判断4. 反编译实战与问题排查4.1 使用uncompyle6uncompyle6 target.pyc target_decompiled.py4.2 常见错误解决方案错误类型可能原因解决方案Invalid pyc/pyo file文件头损坏重新检查Magic NumberDecompilation failurePython版本不匹配尝试不同uncompyle6版本EOFError文件不完整检查解包过程是否完整5. 高级技巧与防护对抗5.1 对抗加固方案某些打包会采用以下防护措施字节码混淆需手动修复自定义Magic Number需动态调试获取分段加密需hook解压过程5.2 自动化脚本示例import os import subprocess def recover_pyinstaller(exe_path): # Step 1: Extract subprocess.run(fpython2 pyinstxtractor.py {exe_path}, shellTrue) # Step 2: Fix header with open(f{exe_path}_extracted/struct, rb) as f: header f.read(16) with open(f{exe_path}_extracted/target, rb) as f: body f.read() with open(fixed.pyc, wb) as f: f.write(header body) # Step 3: Decompile subprocess.run(uncompyle6 fixed.pyc output.py, shellTrue)6. 法律与伦理边界需要特别强调的是仅对自有代码或授权代码进行复原不得用于破解商业软件研究目的需遵守当地法律法规在实际操作中我建议保留完整的操作日志和授权证明避免法律风险。对于CTF竞赛等合法场景这些技术是必备的逆向工程技能。