PyInstaller打包与安全防护

功能介绍

PyInstaller打包可以让程序分发无忧,该模块在打包时会自动扫描程序中的代码,智能识别所有引用的Python库、必要的动态链接库和解释器本身,再也不用担心用户缺少依赖环境。并且兼容多个平台,可以根据不同的系统打包出对应的运行程序,Windows系统的exe、Linux和mac系统的二进制文件等。

PyInstaller可以直接通过pip进行安装,打包时还可以将项目中依赖的各种资源文件进行打包,可以打包成单个可执行文件或是文件夹,例如:

  • PyInstaller安装:
  pip install pyinstaller
  • 将图片、配置文件、数据文件等资源文件进行打包
  pyinstaller --add-data="images/*;images" --add-data="config.ini;." app.py
  • 将动态依赖模块打包成单个可执行文件
  pyinstaller --onefile --hidden-import=sklearn.utils financial_tool.py
  • 生成桌面应用程序,并添加自定义图标和应用名称
  pyinstaller --windowed --icon=app.ico --name="PhotoMagic" main.py

PyInstaller 对 py 文件打包后,会将指定的参数配置保存到后缀名为.spec 的配置文件中。后续若需更改配置,可直接修改该文件并通过它进行打包。

安全防护

打包效果

这里要先介绍一下什么是pyc文件:

pyc文件就是py文件经过编译后生成的字节码,pyc文件中存放的是序列化的PyCodeObject(代码对象),直接查看文件内容时显示乱码,可以起到无法直接查看源代码的作用。但是pyc文件是可以被反编译的,可以使用uncompyle6、pycdc等pyc转py工具将pyc文件反编译成py文件。

  • pyc文件可以通过Python内置的py_compile模块将py文件编译为pyc文件,例如以下代码,将test.py编译为custom_name.pyc:
  import py_compile
  py_compile.compile('test.py', 'custom_name.pyc') 
  • 可以通过uncompyle6模块将pyc文件反编译成py文件,例如以下代码,将custom_name.pyc反编译为py:
  import uncompyle6
  with open('custom_name.pyc', 'rb') as f:
      uncompyle6.decompile_file(f, open('test.py', 'w'))

PyInstaller打包就是将py文件编译为pyc文件,再将pyc文件嵌入到可执行文件中。

而pyinstxtractor.py脚本能够将PyInstaller打包后的可执行文件中的pyc文件提取出来,再结合pyc转py工具,直接将pyc文件反编译成py文件,很轻松的就获取到py源代码。

PyInstall打包的主要作用是方便程序的分发与部署,不是提高py文件的安全性,提高安全性还是要结合专门的保护方案。

保护措施

使用专业的python保护方案,如Virbox Protector工具对Python文件的保护方案,既可以对py文件做保护也可以调用PyInstaller对保护后的py文件进行打包。

Virbox Protector工具对py文件的保护方案是字节码级别的保护,并且不会影响程序的运行也不会更改文件格式,保护后依旧是py文件。同时可以结合PyInstaller打包功能,根据spec文件中的配置信息将保护后的py文件进行打包,与保护前的py文件打包后的程序完全一致。

高安全性

Virbox Protector工具对py文件保护后具有极高的安全性:

  • 保护后的py文件,源码完全不可见,且无法对文件内容进行更改,文件内容更改后程序无法运行。
  • 字节码级别的保护,程序运行过程中也不会出现源码,全程是字节码的形式在运行。
  • 实时加解密,字节码是加密过的,仅在执行代码体时进行解密,代码体执行完毕后会重新加密,即便是在内存中也无法获取到完整dump。
  • 将打包后的可执行程序中的pyc文件反编译成py文件后也获取不到源码,py文件中的代码是保护后的。 配合PyInstaller打包,让开发者再也不用担心程序分发后的代码泄露问题。
滚动至顶部
售前客服
周末值班
电话

电话

13910187371