需求和目标
在python代码中如果代码中有敏感信息,或者有保密需求,不想直接提供代码给用户,可以通过以下途径来实现:
- 使用 pyinstaller 来构建二进制的执行文件
- 编译为 pyc 的执行文件
- 编译为 pyd 的执行文件
各优缺点
方案1: 在客户端运行环境满足的情况下可以很好的分发执行,并且能够一定程度的加密,但是可以被反编译,而且还有一个问题是如果有多个py文件作为模块,被打成二进制后无法被主脚本import导入
方案2:可以满足加密的需求,并且还比较方便,是官方自带的方法,目前测试发现 pycdc 反编译 只能获取到部分内容,看还原的代码,变量的定义是拿到了,但是函数全部没有打印出来,但如果使用 pycdas 反汇编貌似可以解析出来函数的执行流程,不过对于不熟悉的人来说从汇编还原还是比较难的
方案3: pyd 貌似听说是最难破解的,但是比 pyc 麻烦,所以暂时未测试
二进制、编译过程
- 使用 pyinstaller 打包二进制如下:
# 首先安装 pyinstaller
pip3 install pyinstaller
# 安装后的文件在 python/bin 目录下,所以需要链接一下或者此目录加入环境变量
pyinstaller checklogin.py --onefile
- 编译 pyc 的方式:
# 不需要安装其他模块,直接执行就好
python3.10 -m py_compile checklogin.py
PS. 遇到的问题
构建二进制或者编译文件的时候可能遇到错误:
error while loading shared libraries: libpython3.10.so.1.0: cannot open shared object file
原因是共享库没有被编译出来或者导入系统,需要重新编译 python:
# 主要是增加 --enable-shared
./configure --prefix=/usr/local/python3.10 --with-openssl=/usr/local/openssl-1.1.1 --enable-shared
make && make install
在重新编译安装 python 之后在 /etc/ld.so.conf.d
中增加 conf 文件添加 python/lib 这个目录,然后执行命令
ldconfig && ldconfig -pv` 生效
pycdc反编译工具的安装
以上使用到的反编译、反汇编工具 pycdc , pycdas 安装,先到如下站点下载源码:
https://github.com/zrax/pycdc
安装步骤:
- 解压代码,安装 cmake 编译器
- 进入到代码目录,创建 pycdc 目录,并且进入目录
- 执行指令
cmake ..
- 执行指令
make
即可生成程序
评论