【Python 源代码加密】pyinstaller的伪加密,以及easycython的 “future feature annotations is not defined“ 问题

0. 对pyinstaller打包的exe进行破解

  1. 需要一个python脚本
    github传送门 https://github.com/extremecoders-re/pyinstxtractor
  2. 把脚本放到exe同级目录下,命令行运行
python pyinstxtractor.py xxxx.exe
  1. 运行之后,源码的pyc字节码文件会出现在
xxx.exe_extracted/PYZ-00.pyz_extracted/*.pyc
  1. 对字节码pyc进行反编译

1. pyinstaller 打包时加密

  1. pyinstaller打包加密使用的是对称加密算法AES,需要提前安装tinyaes
pip install tinyaes
  1. 安装之后,在打包命令行加入参数key,指定密钥
pyinstaller --key xxxx
  1. 再运行破解脚本,生成的目录下将不再是.pyc字节码文件,而是加密后的.pyc.encrypted
  2. 注意 如果你仔细的话,你会发现你的密钥key也在破解目录下的pyimod00_crypto_key文件里了,打开后你能发现你的密码。
    而pyinstaller使用的是AES对称加密算法,有了密钥就能解密你的.pyc.encrypted文件。所以说使用使用pyinstaller加密参数进行加密形同虚设。
    把密钥也打包进exe,不知道pyinstaller的开发者咋想的。。。。

2. easycython加密源码成pyd文件

pyinstaller的加密不行,只能另辟蹊径,把源代码编译成动态链接库的形式pyd文件

  1. 首先需要安装easycython
pip install easycython
  1. 运行easycython xxx.py
    会生成三个文件:
  • C源代码文件
  • 注释文件html
  • 动态链接库pyd文件,这是我们需要的
  1. 对pyd进行pyinstaller的打包

3.easycython编译遇到的问题

如果代码中使用了

 from __future__ import annotation

或者类似的 from __future__ import *
在编译时可能会出现

SyntaxError: future feature annotations is not defined

出现该问题是因为安装easycython的时候自带安装cython版本为0.29.34,该版本不支持future feature,需要卸载掉,安装3.0版本的cython

pip uninstall cython

cython的最新版本在此查看 https://pypi.org/project/Cython/#history

pip install cython==3.0.0b2

再次编译可通过。

你可能感兴趣的:(python,开发语言)