Python代码加密
方案调查
方案 | 缺点 | |
---|---|---|
Pyarmor、Nuitka | 收费 | |
py2sec,将 .py 编译成so文件 | 太老了 | https://github.com/cckuailong/py2sec https://github.com/ArvinMei/py2so |
pywhlobf,发行wheel混淆包 | 不符合需求 | https://github.com/vkit-x/pywhlobf |
置换CPython的opcode(定制解释器) | 可行,但实现复杂 | https://zhuanlan.zhihu.com/p/25850970 |
编译成 pyc | 很容易逆向 | python3 -O -m compileall demo |
使用ast和astor进行混淆 | ast和astor不支持python3.10+部分语法,编写混淆器成本较大。 | |
pyinstaller打包为二进制可执行文件 | 可行 | |
Python语言翻译为C,编译为dll | 实现较为复杂 | |
代码跑起来之后把代码删了。 | -- |
- 【收费】Pyarmor、Nuitka。
- 【太老了】py2sec 一款轻量的脚本工具,基于 Cython 将 .py 编译成 run-time libraries 文件:.so (Linux && Mac),或 .pyd (Win)。一定程度上实现了“加密”保护源代码的需求。
https://github.com/cckuailong/py2sec
- 【不符合需求】pywhlobf 是一个 Python 代码混淆工具,输入一个 wheel 格式分发包 (也就是说,您首先得执行如
python -m build --wheel
的命令将项目打成 wheel 包,然后才能使用本工具),输出一个混淆后的 wheel 包,包中所有的.py
Python 文件将会编译替换为目标平台的二进制文件,从而达到混淆/保护代码的目的。https://github.com/vkit-x/pywhlobf - 【方案可行,但需要深入实现】置换CPython的opcode(定制解释器)https://zhuanlan.zhihu.com/p/25850970
- 【很容易逆向】编译成 pyc
- 【可用pyinstaller】来自v2的phrack提供的python代码加密思路。
https://fast.v2ex.com/t/348602#r_4150953
- 【--】代码跑起来之后把代码删了。
使用Pyinstaller编译发行二进制可执行文件
- 编写spec文件
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
# 主程序
['app.py'],
pathex=[],
binaries=[],
datas=[],
# python引用不到、pyinstaller不支持的包需要在此声明。
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
# 输出的二进制文件名
name='pack',
debug=False,
bootloader_ignore_signals=False,
strip=False,
# 使用upx压缩,否则失败。
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
- 保持环境纯净,新建venv来打包。
python3 -m venv venv
source venv/bin/activate
pip3 install -r requirements.txt
- 执行命令即可打包,二进制文件生成在dist中。
pyinstaller pack.spec
- 直接执行sudo ./pack即可运行。
- Docker部署,将pack放置于根目录即可。
FROM ubuntu:latest
WORKDIR /app
COPY . /app
CMD ["./pack"]
docker build -t pack .
docker run -d -p 5000:5000 pack
评论 (0)