Python 源码的混淆、打包、加密、编译 - duxiaoyao/pdp GitHub Wiki

混淆

代码混淆库 pyobfuscate

虽然进行了一定程度的变换,但代码结构基本还是原来的样子,并不能很有效的增加破解难度。

利用 AST 混淆源码

Python 内置了 ast 模块,该模块通过内置函数 compile() 和 parse() 将 Python 源代码解析为 AST,之后可以利用 ast 模块内的方法对 ast 节点进行相应的操作,混淆处理后使用 codegen 库将 AST 重新生成为 Python 源码
AST 方式的混淆效果明显要优于 pyobfuscate 库。

打包为独立可执行程序

PyInstaller

Pyinstaller 打包的 exe 文件也是可以被还原出源码的。使用 pyinstxtractor 解包 exe。将 Python 打包为 exe 只相当于在编译为 pyc 的基础上添加了一步打包操作,同样不能很有效的对源码进行保护。

cx_Freeze

加密

使用 PyArmor 加密代码

PyArmor 是一个用于加密和保护 Python 脚本的工具。它能够在运行时刻保护 Python 脚本的二进制代码不被泄露,设置加密后 Python 源代码的有效期限,绑定加密后的 Python 源代码到硬盘、网卡等硬件设备。

使用 pyconcrete 加密为 pye 文件

编译

编译为 pyc 文件

编译为字节码文件后,确实没办法直接读取源码了,但是 Python 有 uncompyle6 这么一个跨版本反编译器,可以将 Python 字节码转换回等效的 Python 源代码。而且 pyc 还有一个弊端,就是它依赖于 Python 解释器的版本,使用某版本解释器编译的 pyc 文件必须使用相同版本解释器运行才能正常工作, 所以实际上将 py 文件编译为 pyc 文件的实用性并不是很大。

使用 Cython 编译为 pyd 文件

Nuitka

PyPy

参考

Python 源码混淆与加密