Pyinstaller是一个常用的Python打包工具,可以将Python代码打包成可执行文件,但是这款工具并不能完全保护程序代码不被反编译,因此我们需要使用一些额外的手段来加强保护。下面是Pyinstaller加密打包成反编译可执行文件的完整攻略:
一、生成.spec文件
- 使用命令
pyinstaller -h
查看帮助信息,发现有一个参数--key
可以用来生成密钥; - 使用命令
pyinstaller --key=your_key your_module.py
生成.spec文件。
二、修改.spec文件
- 使用文本编辑器打开.spec文件;
- 找到
Analysis(...)
一行,添加一个额外的参数cipher=your_cipher
,其中your_cipher
是你生成的密钥; - 在.spec文件结尾处添加以下代码:
block_cipher = "your_cipher"
a = Analysis(
...
cipher=block_cipher
)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz, a.scripts,
exclude_binaries=True,
name="your_name",
debug=False,
bootloader_ignore_signals=False,
cipher=block_cipher)
coll = COLLECT(exe, ...,
upx=True,
upx_exclude=[],
name="your_name",
cipher=block_cipher)
三、安装并使用cryptography库
- 在命令行输入
pip install cryptography
安装cryptography库; - 在python代码的开头添加以下代码:
import os
from cryptography.fernet import Fernet
key = os.environ.get('PYINSTALLER_KEY')
cipher_suite = Fernet(key.encode())
cipher_text = cipher_suite.encrypt(b"your_module.py")
with open("your_module.dat", "wb") as f:
f.write(cipher_text)
这段代码使用cryptography库中的Fernet加密算法对打包后的Python文件进行加密,并保存到文件your_module.dat
中。
四、打包加密后的文件
- 在命令行中使用以下命令进行打包:
pyinstaller your_module.py --key=your_key --onefile
- 运行生成的可执行文件,会发现程序已经无法正常运行;
- 将加密后的文件
your_module.dat
拷贝到可执行文件所在目录; - 修改代码中的文件名,将
your_module.py
修改为your_module.dat
; - 再次运行可执行文件,程序可以正常运行。
示例1:
# 加密数据
import os
from cryptography.fernet import Fernet
key = os.environ.get('PYINSTALLER_KEY')
cipher_suite = Fernet(key.encode())
cipher_text = cipher_suite.encrypt(b"Hello, world!")
print(cipher_text)
输出:
b'gAAAAABgOo0Y6G7IZm3ZwLxJgtFdcfTiWa5wvo-eHPCWDeTg-d-k2nvzVuc7_zmgxNTxeBjrE9qB9wJnV22cG3qSEt_yaCt'
示例2:
# 解密数据
import os
from cryptography.fernet import Fernet
key = os.environ.get('PYINSTALLER_KEY')
cipher_suite = Fernet(key.encode())
cipher_text = b'gAAAAABgOo0Y6G7IZm3ZwLxJgtFdcfTiWa5wvo-eHPCWDeTg-d-k2nvzVuc7_zmgxNTxeBjrE9qB9wJnV22cG3qSEt_yaCt'
plain_text = cipher_suite.decrypt(cipher_text)
print(plain_text)
输出:
b'Hello, world!'
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Pyinstaller加密打包成反编译可执行文件 - Python技术站