百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

基于Pyarmor v8+Pyinstaller加密打包Python文件

ztj100 2025-02-15 02:04 8 浏览 0 评论

Pyinstaller 从6.0版本开始就不再支持--key参数了,也就是无法直接加密打包Python文件了,这个时候可以借助Pyarmor先把Python文件进行加密,然后再使用Pyinstaller打包,即使解包了得到的也是加密的Python代码,截止目前2024年3月,Github上还没有破解Pyarmor v8版本的工具,所以暂时是安全的。

Pyarmor 是一个用于加密和保护 Python 脚本的工具,它能够保护 Python 脚本代码不被泄露,此外还支持设置加密后脚本的使用期限,绑定加密脚本到硬盘、网卡等硬件设备,有点类似license控制,确实有点东西。实验过程如下:

ailx10

网络安全优秀回答者

网络安全硕士

去咨询

1)加密前,python代码都是明文

# 加密前的 a.py
from src.b import bb
if __name__ == '__main__':
    bb(1, 1)

2)经过pyarmor v8加密[1]

pyarmor gen a.py

3)加密后都是密文了

# 加密后的 a.py
#!/usr/bin/env python
# Pyarmor 8.5.1 (trial), 000000, non-profits, 2024-03-22T11:42:31.412763
from pyarmor_runtime_000000 import __pyarmor__
__pyarmor__(__name__, __file__, b"PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x83\x01\x00\x00\x12\t\x04\x00\x01i\xd9\xaak\x8c\xa1@muh\x9aYa\x82\xcb\x00\x00\x00\x00\x00\x00\x00\x00\xed;Y\xf5N]z\xcbCq\xa1\xaePJ\x13:\xdf9H\xb0S\xbe\x94\xbcC\x1a\xed\xec?\x83}\x97|\xe9$J]\x02\xf8-\xc2\x85\x8e\x1ch\x04lL\xe2G\xe4\x12\xd0Y-q\x85\x0c\x0f86\xe16n5\xc0\xceu\x10\xffH\xd0\x8f`\x0c\xac}^\x1a6\x1fF\x7fI\x1e3\xedG)\x810Z\xa3V\xe8\x93m\xd4\xcc\xbb\xa54N\xf06G\xf1\x9e\xf9\x87<\x1c\xb1\x87\xab\xb9KU!\x88\x8d\xab\x100Z\xe4\xe4\xf8\xf7\x84\xda\xa5.\x86\xea\xba\xf7\xda\x90\xd5:Q\xcd0uo\xb5D\x1aev\xbfB\xa3\x0e\xbe\x8c\xae\xf0\x05\x85F\x89#\xae\x8dj\xb6\x1b\x02\t\x967\x0c\xc2\xe7\x01\xf5w\x0e\xdc\x0fr\x1d\xaf\xfa\xf8 \xf0\x90&\xdd\xd3\xbc\xd1X\xf2dh\x9a\x00n\x96\xd3|\x7f\xa1\xde\xa4\x12\x1d\xf4\t\x1e\xc6UG\xa0$\x1b\x85\x1b\xa2q*\xe2#\xa4bj\xc7}\xbb\x9f\x93\x8b\xa4\xc3&\xf4Y\xe1\xff\xa8\x1f\xad\x98],\x0eO\x13\x91\x1b~\xce\n\xfa\x96\x1e!\xdd\xc2\x85a\x1b\x95\x82\xc4\xdcz>ay\xdeIR3\xf5 2\rGE\x02\xc4\x8c\xd3\x84\xd4](%'&\x1dU\x9a\xb0\x8ax\xcf\xfa\n1j\n\x07\xd6\x8c+8C\x94(\xf2\xa1MV?\x82WpB\x9f>]m#\x8a8\xdee\xf0\xd6\xebgO\xffM[\xe3\x07\xb8~\x8azm}\xf3\xdb\\|\xe0,\x7f\xcb\xc7\x8c\x81M\xcc\xef\xcbK\xdd\x8e\xa1\x19\x8f\xd7v\xde\xeb9\x81\x19\xb1\x12\xc3}A\xa5\xc3\xd9\xff\x0e")

4)同理,对src包进行加密

pyarmor gen -O dist2 -r -i src

5)得到加密后的src包的python代码,都是加密的了

# 加密后的 b.py
#!/usr/bin/env python
# Pyarmor 8.5.1 (trial), 000000, non-profits, 2024-03-22T14:14:44.830286
from .pyarmor_runtime_000000 import __pyarmor__
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00a\x02\x00\x00\x12\t\x04\x00!\xa0\x0c\xe8\x7fW\xaaoy\xe00x\xe9\xdb\x1c\xab\x00\x00\x00\x00\x00\x00\x00\x00\xed\x1f\xfe\xea\xc2\xf5lr\xd9y!\x06\xf0\x1b%\xd3\x076\xb2\xcd4-\x0ck"\xb1\xf7\x85\xceX\xf8\xf9Z\xd4\x96\x1bF\x8f-\x17\x9d\xf1*}\xd7\x04%;p\x9b\xe0(`@\x16$p=\xdaN\x1e}\xa6y\xc7~\x0b\xb6\x047\xe6\x9fIH\xeexC\x05b\xcd\xd32\xc6\t\x92\xacq\xce\rJ}\x18\xc2\xe5|\xfbc%b,m\xbb K\xe0\xaaC\x1aA\xb9E<\xfc{\x7f\xda\x8c?;|KQ\xd8p\xf9.\x9f\x00\x0c\xdc\x0b&Xc\xa7\xa1\x02\x15\x10\xff\xfa)V4\x02L\x84\xe9\xe4\x1al\xe3+\'*U9\x94\xed\xbd\xce\xa9Wm\xbc1}\xd7\xf5\x9bR8\xee\xa1y\xe7\x9e\xf6\x00r\xa5,\xc4\x89&\xacu\x93_/\x8f\x89\xbe\x8b2\x94K]\x91\t\xd3aI\x90hG\xe8[1Z\xcc\xb9\xaa\x05\xa0\xc2\xa2\x026}\xa9\xf9\x82\x83\x97$\xf5c\x06\xc3\xd7\x07y\xa0\x1b\xce\x0b\xb8\x90\xa2\x8a\x93\x14=\xab\xaa\xbeR\xb4\xe5\xeagvx1\x8c\xd781\xccZ\xdb\xddyqfv\x7f\x91E\x16\xa6_\xda\xe4"R\xe8z|\x90\xb8\xe0G\xf31\x81\xa9\x9egp\xc3\x1f\xfe\xe8\xad\xe3\xfa1\xe4\xac\x8c\xb6\x88\xfe\xb2=\x93\xf8\xf7Xk\xfd0;b*\xb7w.\x14\xbcF\xcc\xed\xa9\xcb\xbaSA\xe7%\x88\xec\xcf\xd5#\xe5;\x8fY\xfe\xc2\x94\x9bm\x94\x88>\x0c\x86\x82\x91\xe4!%\x84\x06\x91\xe9\xd3\xec\xb5\xc6n\x94\t\xe7\x9ak\x87\x97A\xe5\x12,3\x8cA\'\xdd+J\xf4\xdb\xc5\x9b\xaf\xd0{\xe7\x05\x06\x97\x9f\x0bS\x86!k\x97\x8a}G\xb7l\xcb\x8eFT\xcb\x84\x11L\x02\xb5\x98\xb6\x1f\xa2O\x1a2\xc6\xa7\x82\xab\xb8 =\xae\xe9o<\xf7|\x95n\xe9:\x8ec\xbeo&\x8a\xaf\x7fw\xe7\x0f\x1c/Z\x7f\x86io\xe0\x12\xaeY\xa6\xb8\xb4/\xeew2>\xbf)\x85\xb2\x8b\x0b\xa7\x83T\t\xe785\xdc\xe2\x9f\x91#\x07z\xc4\x9cbQ\xa0\xcb\xd1\xd1\xb8@\x8b\x1f\xb2\x07k\xc7jDD \x9a\xfd\xdf\x00\xcd\xd46\xff\xf0\xd2H\x10\xff6\xc5V;\x8br\x14\xf0\x1b"\xbe\xb8!\xbe\xbe3\xde.c\x7f\xce\x17\xb7\xd68\x91\xba]\xa8a\x84R\x08\xb0\xfbL\xe3i\x0e7\x8a\x8f\xb6\xee\xdbFs\x909&\xecoV\xcb\xf7\xff\xfd(\xa6\xe9\x83(U~\xfdb\x1b\x19\xa4\x97\xd0\'\x93\xae\xbe1:\x04\x8c@\x8eh\xf8\xb5\xa6\xda')

6)使用pyinstaller 将自己的包和主函数,一起打包

pyinstaller -F --add-data "src;src" a.py

7)将加密的src包,以及主程序的加密辅助包,一起复制到打包后的dist目录中,成功运行exe

8)使用 pyinstxtractor-ng 解包

pyinstxtractor-ng.exe a.exe

9)使用uncompyle6 解密主程序 a.pyc,发现是 pyarmor 加密后的a.py文件,win了~

uncompyle6 a.pyc

参考

  1. ^pyarmor https://pyarmor.readthedocs.io/zh/stable/tutorial/getting-started.html

发布于 2024-03-22 16:25?IP 属地江苏

相关推荐

Vue 技术栈(全家桶)(vue technology)

Vue技术栈(全家桶)尚硅谷前端研究院第1章:Vue核心Vue简介官网英文官网:https://vuejs.org/中文官网:https://cn.vuejs.org/...

vue 基础- nextTick 的使用场景(vue的nexttick这个方法有什么用)

前言《vue基础》系列是再次回炉vue记的笔记,除了官网那部分知识点外,还会加入自己的一些理解。(里面会有部分和官网相同的文案,有经验的同学择感兴趣的阅读)在开发时,是不是遇到过这样的场景,响应...

vue3 组件初始化流程(vue组件初始化顺序)

学习完成响应式系统后,咋们来看看vue3组件的初始化流程既然是看vue组件的初始化流程,咋们先来创建基本的代码,跑跑流程(在app.vue中写入以下内容,来跑流程)...

vue3优雅的设置element-plus的table自动滚动到底部

场景我是需要在table最后添加一行数据,然后把滚动条滚动到最后。查网上的解决方案都是读取html结构,暴力的去获取,虽能解决问题,但是不喜欢这种打补丁的解决方案,我想着官方应该有相关的定义,于是就去...

Vue3为什么推荐使用ref而不是reactive

为什么推荐使用ref而不是reactivereactive本身具有很大局限性导致使用过程需要额外注意,如果忽视这些问题将对开发造成不小的麻烦;ref更像是vue2时代optionapi的data的替...

9、echarts 在 vue 中怎么引用?(必会)

首先我们初始化一个vue项目,执行vueinitwebpackechart,接着我们进入初始化的项目下。安装echarts,npminstallecharts-S//或...

无所不能,将 Vue 渲染到嵌入式液晶屏

该文章转载自公众号@前端时刻,https://mp.weixin.qq.com/s/WDHW36zhfNFVFVv4jO2vrA前言...

vue-element-admin 增删改查(五)(vue-element-admin怎么用)

此篇幅比较长,涉及到的小知识点也比较多,一定要耐心看完,记住学东西没有耐心可不行!!!一、添加和修改注:添加和编辑用到了同一个组件,也就是此篇文章你能学会如何封装组件及引用组件;第二能学会async和...

最全的 Vue 面试题+详解答案(vue面试题知识点大全)

前言本文整理了...

基于 vue3.0 桌面端朋友圈/登录验证+60s倒计时

今天给大家分享的是Vue3聊天实例中的朋友圈的实现及登录验证和倒计时操作。先上效果图这个是最新开发的vue3.x网页端聊天项目中的朋友圈模块。用到了ElementPlus...

不来看看这些 VUE 的生命周期钩子函数?| 原力计划

作者|huangfuyk责编|王晓曼出品|CSDN博客VUE的生命周期钩子函数:就是指在一个组件从创建到销毁的过程自动执行的函数,包含组件的变化。可以分为:创建、挂载、更新、销毁四个模块...

Vue3.5正式上线,父传子props用法更丝滑简洁

前言Vue3.5在2024-09-03正式上线,目前在Vue官网显最新版本已经是Vue3.5,其中主要包含了几个小改动,我留意到日常最常用的改动就是props了,肯定是用Vue3的人必用的,所以针对性...

Vue 3 生命周期完整指南(vue生命周期及使用)

Vue2和Vue3中的生命周期钩子的工作方式非常相似,我们仍然可以访问相同的钩子,也希望将它们能用于相同的场景。...

救命!这 10 个 Vue3 技巧藏太深了!性能翻倍 + 摸鱼神器全揭秘

前端打工人集合!是不是经常遇到这些崩溃瞬间:Vue3项目越写越卡,组件通信像走迷宫,复杂逻辑写得脑壳疼?别慌!作为在一线摸爬滚打多年的老前端,今天直接甩出10个超实用的Vue3实战技巧,手把...

怎么在 vue 中使用 form 清除校验状态?

在Vue中使用表单验证时,经常需要清除表单的校验状态。下面我将介绍一些方法来清除表单的校验状态。1.使用this.$refs...

取消回复欢迎 发表评论: