0. 对pyinstaller打包的exe进行破解
- 需要一个python脚本
github传送门 https://github.com/extremecoders-re/pyinstxtractor - 把脚本放到exe同级目录下,命令行运行
python pyinstxtractor.py xxxx.exe
- 运行之后,源码的pyc字节码文件会出现在
xxx.exe_extracted/PYZ-00.pyz_extracted/*.pyc
- 对字节码pyc进行反编译
1. pyinstaller 打包时加密
- pyinstaller打包加密使用的是对称加密算法AES,需要提前安装
tinyaes
库
pip install tinyaes
- 安装之后,在打包命令行加入参数key,指定密钥
pyinstaller --key xxxx
- 再运行破解脚本,生成的目录下将不再是
.pyc
字节码文件,而是加密后的.pyc.encrypted
- 注意 如果你仔细的话,你会发现你的密钥key也在破解目录下的
pyimod00_crypto_key
文件里了,打开后你能发现你的密码。
而pyinstaller使用的是AES对称加密算法,有了密钥就能解密你的.pyc.encrypted
文件。所以说使用使用pyinstaller加密参数进行加密形同虚设。
把密钥也打包进exe,不知道pyinstaller的开发者咋想的。。。。
最新的pyinstaller 6.0版本已经去掉了 --key参数,取消了加密功能,参加https://github.com/pyinstaller/pyinstaller/pull/6999
2. easycython加密源码成pyd文件
pyinstaller的加密不行,只能另辟蹊径,把源代码编译成动态链接库的形式pyd
文件
- 首先需要安装
easycython
pip install easycython
- 运行
easycython xxx.py
会生成三个文件:
- C源代码文件
- 注释文件html
- 动态链接库pyd文件,这是我们需要的
- 对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
再次编译可通过。