Python EXE逆向工程架构解析多格式可执行文件源码提取技术实现【免费下载链接】python-exe-unpackerA helper script for unpacking and decompiling EXEs compiled from python code.项目地址: https://gitcode.com/gh_mirrors/py/python-exe-unpackerPython打包可执行文件的逆向工程面临格式识别、字节码解密、多版本兼容三大技术挑战。python-exe-unpacker项目通过模块化架构设计集成pefile、unpy2exe、uncompyle6等核心库实现pyinstaller和py2exe格式的自动化解析与源码还原为安全分析和代码审计提供标准化解决方案。技术架构解析三层解耦设计模式python-exe-unpacker采用抽象基类具体实现的三层架构设计确保代码可扩展性和维护性。项目核心文件python_exe_unpack.py定义了PythonExectable抽象基类PyInstaller和Py2Exe作为具体实现类分别处理不同打包格式的解包逻辑。# 抽象基类定义 - 提供统一接口 class PythonExectable(object): __metaclass__ abc.ABCMeta def __init__(self, path, output_dirNone): # 初始化文件路径和输出目录 self.file_path path self.extraction_dir output_dir or os.path.join( os.getcwd(), unpacked, os.path.basename(path)) abc.abstractmethod def is_magic_recognised(self): 识别文件魔数以确定打包格式 pass abc.abstractmethod def unpacked(self, filename): 执行解包操作 pass技术架构图示意输入层 → 格式识别层 → 解包处理层 → 反编译层 → 输出层 ↓ ↓ ↓ ↓ ↓ EXE文件 → pyinstaller检测 → pyinstxtractor → uncompyle6 → 源码文件 ↓ ↓ ↓ ↓ ↓ → py2exe检测 → unpy2exe处理 → 字节码修复 → Python脚本PyInstaller格式深度解析加密字节码解密技术PyInstaller打包的可执行文件采用独特的CArchive结构存储Python字节码和依赖资源。项目通过pyinstxtractor.py模块实现对该格式的完整解析支持版本3.2至2.0的兼容性处理。加密字节码解密流程PyInstaller支持字节码加密功能python-exe-unpacker通过动态密钥提取和AES解密算法实现自动化解密class PyInstaller(PythonExectable): def __decrypt(self): 解密加密的Python字节码文件 # 1. 检测加密标志位 if not self.__is_encrypted(extracted_path, key_path): return False # 2. 提取加密密钥 encryption_key self.__get_encryption_key(key_path) # 3. 执行AES解密 decrypted_data self.__decrypt_pyc( extracted_binary_path, encryption_key) # 4. 修复魔术头并保存 self.__repair_magic_header(decrypted_data) return True解密过程涉及的关键技术点密钥定位从EXE文件的特定偏移量提取16字节AES密钥数据块解析识别加密字节码的数据块边界魔术头修复为解密后的.pyc文件添加正确的Python版本标识文件结构提取算法PyInstaller打包文件采用TOCTable of Contents结构管理资源提取算法实现如下def parseTOC(self): 解析CArchive的目录表结构 # 读取TOC条目数量 entry_count struct.unpack(i, self.file.read(4))[0] entries [] for i in range(entry_count): # 解析每个条目的位置、大小、压缩标志 position, cmprsdDataSize, uncmprsdDataSize, cmprsFlag, typeCmprsData \ struct.unpack(5i, self.file.read(20)) # 读取资源名称 name_length struct.unpack(i, self.file.read(4))[0] name self.file.read(name_length).decode(utf-8) entries.append(TOCEntry(position, cmprsdDataSize, uncmprsdDataSize, cmprsFlag, typeCmprsData, name)) return entriesPy2Exe格式处理PE文件结构分析与资源提取Py2Exe打包的EXE文件基于标准PE格式python-exe-unpacker通过集成unpy2exe库实现资源提取和字节码恢复。PE资源定位技术项目使用pefile库解析PE文件结构定位Python字节码资源def open_executable(self): 打开并验证PE文件格式 try: self.pe pefile.PE(self.file_path, fast_loadTrue) # 检查是否为有效的PE文件 if not self.pe.is_exe() and not self.pe.is_dll(): raise FileFormatException(不是有效的EXE或DLL文件) # 检查Python打包特征 return self._check_python_signatures() except pefile.PEFormatError: raise FileFormatException(PE文件格式错误)字节码提取与修复流程Py2Exe打包的字节码通常缺少标准.pyc文件的魔术头需要动态修复def prepend(self, main_pyc): 为提取的字节码文件添加魔术头 with open(main_pyc, rb) as f: data f.read() # 检查是否已有魔术头 if data[:4] b\x03\xf3\x0d\x0a: # Python 2.7 return main_pyc elif data[:4] b\x42\x0d\x0d\x0a: # Python 3.x return main_pyc # 根据Python版本添加相应的魔术头 magic self._determine_magic_number() with open(main_pyc, wb) as f: f.write(magic data) return main_pyc反编译引擎集成uncompyle6字节码转源码python-exe-unpacker集成uncompyle6作为反编译引擎支持Python 2.7至3.x的字节码反编译。多版本字节码兼容性处理def decompile_pyc(dir_decompiled, pyc_files, output_fileNone): 批量反编译.pyc文件为Python源码 for pyc_file in pyc_files: try: # 设置输出路径 output_path os.path.join( dir_decompiled, os.path.basename(pyc_file).replace(.pyc, .py)) # 调用uncompyle6进行反编译 with open(output_path, w) as f: uncompyle6.decompile_file(pyc_file, f) print(f[] 成功反编译: {pyc_file} - {output_path}) except Exception as e: print(f[-] 反编译失败 {pyc_file}: {str(e)})反编译性能优化策略项目采用以下优化策略提高反编译效率并行处理支持批量.pyc文件并行反编译缓存机制对已处理的文件进行缓存避免重复工作错误恢复单文件失败不影响其他文件处理进度反馈实时显示处理进度和结果技术实现对比分析pyinstaller vs py2exe技术维度PyInstaller处理Py2Exe处理性能影响文件格式自定义CArchive格式标准PE格式PyInstaller解析更快加密支持支持AES加密字节码无原生加密PyInstaller需要额外解密步骤资源管理TOC目录表结构PE资源节Py2Exe更符合Windows标准依赖打包PYZ压缩归档独立文件嵌入PyInstaller压缩率更高版本兼容支持3.2-2.0依赖Python版本PyInstaller兼容性更好反编译难度中等需解密简单直接提取Py2Exe处理更直接常见问题解答与技术挑战Q1: 如何处理加密的PyInstaller可执行文件技术解答python-exe-unpacker通过动态密钥提取实现自动化解密。加密密钥通常存储在EXE文件的特定偏移位置项目使用pycrypto库的AES算法进行解密并自动修复解密后的字节码魔术头。Q2: 反编译过程中出现版本不兼容错误怎么办解决方案确保使用与目标EXE相同版本的Python运行解包工具。项目通过魔术头检测自动识别Python版本但最佳实践是使用对应版本的Python环境执行解包操作。Q3: 提取的.pyc文件无法反编译如何处理技术处理使用-p参数手动修复魔术头python python_exe_unpack.py -p problematic.pyc。该命令会检测并添加正确的Python版本魔术头然后尝试反编译。Q4: 项目支持哪些Python版本打包的EXE兼容性说明支持Python 2.7至Python 3.x版本覆盖pyinstaller 2.0-3.2和py2exe的主流版本。对于特殊版本可能需要调整魔术头识别逻辑。Q5: 解包过程中内存占用过高如何优化性能建议项目采用流式处理避免一次性加载大文件。对于超大EXE文件建议使用-o参数指定输出目录到有足够空间的磁盘分区。实际应用场景与技术实现细节场景一恶意软件分析在安全分析场景中python-exe-unpacker能够快速提取恶意Python程序的源码辅助行为分析# 自动化分析流程 python python_exe_unpack.py -i malware.exe -o ./analysis_output cd analysis_output # 分析提取的源码文件 find . -name *.py -exec grep -l socket\|urllib\|subprocess {} \;场景二代码审计与合规检查对于企业内部使用的Python打包工具可通过批量解包进行代码审计# 批量处理脚本示例 import os import subprocess def batch_unpack(exe_directory, output_base): for root, dirs, files in os.walk(exe_directory): for file in files: if file.endswith(.exe): exe_path os.path.join(root, file) output_dir os.path.join(output_base, file) cmd fpython python_exe_unpack.py -i {exe_path} -o {output_dir} subprocess.run(cmd, shellTrue)场景三遗留系统代码恢复对于使用旧版pyinstaller打包的遗留系统项目提供版本兼容性支持# 处理旧版本打包文件 python python_exe_unpack.py -i legacy_app.exe --force-py27 # 强制使用Python 2.7兼容模式性能优化与最佳实践内存管理优化项目采用分块读取策略处理大文件避免一次性加载整个EXE到内存def extract_large_file(self, entry, output_path): 分块提取大文件资源 chunk_size 1024 * 1024 # 1MB chunks self.file.seek(entry.position) with open(output_path, wb) as out_file: remaining entry.cmprsdDataSize while remaining 0: chunk min(chunk_size, remaining) data self.file.read(chunk) out_file.write(data) remaining - chunk错误处理与恢复机制项目实现多层错误处理确保单点失败不影响整体流程格式验证层在解包前验证文件完整性资源提取层单资源提取失败跳过继续反编译层单文件反编译失败记录日志继续结果验证层验证输出文件的可读性和完整性环境配置建议为获得最佳解包效果建议配置专用分析环境# 创建虚拟环境 python -m venv unpack_env source unpack_env/bin/activate # 安装依赖指定版本确保兼容性 pip install pefile2017.9.3 pip install unpy2exe0.3 pip install uncompyle62.11.5 pip install pycrypto2.6.1 # 克隆项目代码 git clone https://gitcode.com/gh_mirrors/py/python-exe-unpacker cd python-exe-unpacker技术架构演进与未来方向python-exe-unpacker项目的技术架构体现了模块化设计的优势通过抽象基类实现了良好的扩展性。未来技术演进可关注以下方向更多打包格式支持扩展支持cx_Freeze、PyOxidizer等新兴打包工具机器学习辅助识别使用机器学习算法自动识别未知打包格式云分析集成提供API接口支持云端批量分析可视化分析界面开发GUI工具降低使用门槛反混淆引擎集成集成代码反混淆功能应对加壳保护总结python-exe-unpacker项目通过精心的架构设计和模块化实现为Python打包可执行文件的逆向工程提供了标准化解决方案。其核心技术价值体现在三个方面一是通过抽象基类设计实现良好的扩展性二是集成多个成熟工具形成完整处理流水线三是针对加密和版本兼容性问题提供专门解决方案。项目代码结构清晰python_exe_unpack.py作为主控模块协调各组件工作pyinstxtractor.py专注处理PyInstaller格式依赖的pefile、unpy2exe、uncompyle6等库各司其职。这种设计不仅提高了代码的可维护性也为后续支持更多打包格式奠定了良好基础。对于需要进行Python程序逆向分析的安全研究人员、代码审计人员和开发者而言python-exe-unpacker提供了从可执行文件到可读源码的完整技术路径是Python生态中不可或缺的专业工具。【免费下载链接】python-exe-unpackerA helper script for unpacking and decompiling EXEs compiled from python code.项目地址: https://gitcode.com/gh_mirrors/py/python-exe-unpacker创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考