python打包二进制、编译代码
侧边栏壁纸
博主昵称
yuc

  • 累计撰写 291 篇文章
  • 累计收到 0 条评论

python打包二进制、编译代码

yuc
yuc
2024-07-05 / 最后修改: 2024-07-05 01:46 / 0 评论 / 8 阅读 / 正在检测是否收录...
需求和目标

在python代码中如果代码中有敏感信息,或者有保密需求,不想直接提供代码给用户,可以通过以下途径来实现:

  1. 使用 pyinstaller 来构建二进制的执行文件
  2. 编译为 pyc 的执行文件
  3. 编译为 pyd 的执行文件
各优缺点

方案1: 在客户端运行环境满足的情况下可以很好的分发执行,并且能够一定程度的加密,但是可以被反编译,而且还有一个问题是如果有多个py文件作为模块,被打成二进制后无法被主脚本import导入

方案2:可以满足加密的需求,并且还比较方便,是官方自带的方法,目前测试发现 pycdc 反编译 只能获取到部分内容,看还原的代码,变量的定义是拿到了,但是函数全部没有打印出来,但如果使用 pycdas 反汇编貌似可以解析出来函数的执行流程,不过对于不熟悉的人来说从汇编还原还是比较难的

方案3: pyd 貌似听说是最难破解的,但是比 pyc 麻烦,所以暂时未测试

二进制、编译过程
  1. 使用 pyinstaller 打包二进制如下:
# 首先安装 pyinstaller 
pip3 install pyinstaller
# 安装后的文件在 python/bin 目录下,所以需要链接一下或者此目录加入环境变量
pyinstaller checklogin.py --onefile
  1. 编译 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

安装步骤:

  1. 解压代码,安装 cmake 编译器
  2. 进入到代码目录,创建 pycdc 目录,并且进入目录
  3. 执行指令 cmake ..
  4. 执行指令 make 即可生成程序
0

评论

博主关闭了当前页面的评论