py2exe打包Python勒索软件测试脚本时模块缺失及运行报错问题求助
解决py2exe打包cryptography脚本时的_cffi_backend缺失问题
你遇到的核心问题是py2exe没有自动包含cryptography依赖的_cffi_backend.dll动态链接库,导致运行exe时触发ImportError。那些缺失的_posixshmem、bcrypt等模块其实是可选依赖或仅Linux平台的组件,Windows环境下可以忽略,不影响核心加密功能。下面是具体的解决步骤:
1. 先确保依赖包是最新版本
首先升级相关的Python包,避免版本兼容问题:
pip install --upgrade py2exe cryptography cffi
2. 修改setup.py配置,手动包含cffi依赖
py2exe无法自动检测到cryptography底层的cffi动态库,需要我们在setup.py中明确指定要包含的文件和模块。替换你的setup.py为以下代码:
from distutils.core import setup import py2exe import os from cryptography.hazmat.backends import default_backend # 获取_cffi_backend.dll的绝对路径 cffi_backend_path = os.path.join( os.path.dirname(default_backend().__module__.__file__), '_cffi_backend.dll' ) setup( console=['dll32.py'], options={ 'py2exe': { # 明确包含cryptography相关模块 'includes': ['cryptography', 'cryptography.hazmat.primitives', '_cffi_backend'], 'packages': ['cryptography'], # 先不打包成单个文件,减少路径问题(后续可以尝试bundle_files=1) 'bundle_files': 3, 'skip_archive': False } }, # 将_cffi_backend.dll复制到dist目录 data_files=[('', [cffi_backend_path])] )
3. 清理旧构建文件并重新打包
删除之前生成的build和dist文件夹,然后重新执行打包命令:
python setup.py py2exe
4. 测试运行exe
打包完成后,打开命令提示符,切换到dist目录,运行dll32.exe,此时应该不会再出现_cffi_backend缺失的错误,脚本也能正常执行加密操作。
额外说明
- 关于打包时出现的模块缺失警告:
_posixshmem是Linux进程间通信的模块,Windows根本不需要;bcrypt是SSH序列化的可选依赖;readline是UNIX终端的交互模块;resource是Linux系统资源管理模块。这些警告完全可以忽略,不影响Windows环境下的脚本功能。 - 如果还是出现问题,可以尝试将
bundle_files设置为3(默认值),不要打包成单个exe文件,这样更容易排查依赖缺失问题。 - 注意:你的脚本是用于学士学位论文的勒索软件研究,请务必在受控的测试环境中运行,避免误加密重要文件。
内容的提问来源于stack exchange,提问作者Duschjenkovic
相关产品推荐
相关产品推荐

