Python加密脚本的通用方案介绍

最近想要解决关于python源码加密的问题,相信这也是许多公司的共性问题。简单地说就是好多测试运维脚本中直接编写了连接各种服务器的代码(包括应用服务器,数据库服务器等等),这是非常不安全的做法!看了一下,目前网上大概的解决方案如下:

1.把.py文件转换为.pyc文件(比较容易破解)

2.将.py编译为.c文件,再将.c文件编译为.so

3. 把py打包成在某一平台的可执行文件,例如生成exe文件

4.代码混淆加密(今天重点介绍)

本文讲述如何通过代码混淆加密来解决这个问题,核心思路

  1. 把连接各种服务器的代码统一写到一个py文件中,并对外提供访问api
  2. 把步骤1中的py代码混淆加密
  3. 无需加密的脚本中通过步骤1中的api,进行服务器的连接相关操作

在网上找到了一款比较优秀的工具pyarmor可以实现这一需求,github star 目前1.8k

https://github.com/dashingsoft/pyarmor

pyarmor基础使用介绍

pyarmor是可以保护 Python 脚本的工具,能够加密 Python 脚本,保护运行时刻的 Python 代码不被泄露,设置加密脚本的有效期限,绑定加密脚本到硬盘、网卡等硬件设备。

基本使用也非常的方便

最简单的安装方式:pip install pyarmor
查看版本号:pyarmor --version,成功在终端看到版本号即安装成功,目前版本7.7.0。
使用命令 obfuscate 用来加密脚本。最常用的一种情况是切换到脚本main.py所在的路径,然后执行。加密:pyarmor obfuscate main.py,PyArmor 会加密 main.py 相同目录下面的所有 *.py 文件到dist文件夹中。
运行加密代码:cd dist之后,python main.py即可。

我遇到安装pyaramor的大坑

接下来我要介绍一下安装pyaramor时,我遇到的大坑,在这里分享出来,帮助看到文章的同学节省时间调试!

有的同学如果用ide查看加密文件的源码可能会发现,无法识别pyarmor_runtime 和__pyaramor__的问题,如下图:

如果大家想解决这个问题,就会遇到大坑!接下来我把自己的血泪史介绍给大家:

看到上面的截图,相信很多人很自然地会去重新安装包pytransform,然后大家又会遇到下面这个问题

Preparing metadata (setup.py) ... error
error: subprocess-exited-with-error
× python setup.py egg_info did not run successfully.
│ exit code: 1
╰─> [7 lines of output]
Traceback (most recent call last):
File "<string>", line 36, in <module>
File "<pip-setuptools-caller>", line 34, in <module>
File "C:\Users\XK-ADMIN\AppData\Local\Temp\pip-install-cnikyffq\mdanalysis_eeb11174b9ff49c4a5b48e03d806aa22\setup.py", line 58
print "MDAnalysis requires Python 2.6 or better. Python %d.%d detected" % \
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("MDAnalysis requires Python 2.6 or better. Python %d.%d detected" % \)?
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed
× Encountered error while generating package metadata.
╰─> See above for output.
note: This is an issue with the package mentioned above, not pip.
hint: See above for details.

想要解决上面的问题,需要手动下载pytransform-0.2.3.2.tar.gz,然后修改配置文件后手动重新打包,步骤如下:

解压压缩包,修改setup.py文件

修改requires=['MDAnalysis==0.8.1']

信息如下:

install_requires=['MDAnalysis']

接下来执行如下命令:

python setup.py build

python setup.py install

注意:安装时可能出现类似报错:MDAnalysis requires Python 3.8 or better. Python 3.7 detected

也就是说我们的python版本不能低于3.8!然后大家又会去升级py3.8!

看到这里我来告诉大家:上面这些步骤完全不需要!!!!!

应该是新版本的pyarmor做了相关优化!

我们只需要老老实实地执行 pip install pyarmor 即可,也不需要升级py到3.8

我亲自尝试,python 3.7.4和pyarmor 7.7.0 是完成可行的。

pyarmor完成脚本加密实战

大家只需按照以下步骤即可完成对需要的脚本进行加密然后进行调用的过程:

1.pyarmor obfuscate 你的py脚本.py。执行后会在当前目录下生成一个dist目录如下图,当前目录下的py文件是没有被加密的

2.进入dist目录,打开py文件,如下:

 这个文件是完全可以直接通过命令:python sql_test.py 直接运行的!

3.如果大家想通过其他非加密的py脚本调用sql_test.py中的函数,也非常方便!

  1. 首先把加密的py脚本拷贝到dist目录
  2. 然后直接运行调用脚本,即下图中的call_script.py即可

实测可以正常运行!原创不易,如果文章帮到了你,劳烦点赞转发!

干货!分享解决python脚本中涉及账号密码泄露的方案(pyarmor)相关推荐

  1. python缺少标准库_干货分享:Python如何自动导入缺失的库

    很多同学在写Python项目时会遇到导入模块失败的情况:ImportError: No module named 'xxx'或者ModuleNotFoundError: No module named ...

  2. python怎么模拟浏览器交互_干货分享:python爬虫模拟浏览器的两种方法实例分析(赶紧收藏)...

    今天为大家带来的内容是:干货分享:python爬虫模拟浏览器的两种方法实例分析(赶紧收藏) 文章主要介绍了python爬虫模拟浏览器的两种方法,结合实例形式分析了Python爬虫模拟浏览器的两种常见操 ...

  3. 如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样)

    如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样) python标准库中的subprocess可以解决这个问题. from subprocess ...

  4. python中config(state=disabled)_解决python flask中config配置管理的问题

    在项目中我们需要配置各种环境.如果我们的配置项很少的话,可以直接简单粗暴的来: 比如: app =Flask(__name__) app.config['DEBUG']=True app.config ...

  5. 如何解决Bat脚本中包含中文,运行乱码

    如何解决Bat脚本中包含中文,运行乱码 转载于:https://jingyan.baidu.com/article/a3f121e4d84a5dfc9152bb55.html bat脚本在批处理的时候 ...

  6. $Django 多表操作(增删改查,基于双下划线,对象的查询) 在Python脚本中调用Django环境...

    0在Python脚本中调用Django环境. import osif __name__ == '__main__': os.environ.setdefault("DJANGO_SETTIN ...

  7. python打包包含所有依赖_解决Python开发过程中依赖库打包问题的方法

    在Python开发的过程中,经常会遇到各种各样的小问题,比如在一台计算机上调试好的程序,迁移到另外一台机子上后往往会应为工程项目依赖库的缺失而造成错误. 除了一遍又一遍对着被抛出错误去重新instal ...

  8. 解决Python shell中Delete-Backspace键乱码问题

    解决Python shell中Delete-Backspace键乱码问题 进入Python Shell,按下Delete/Backspace 键,会出现如下图所示的乱码现象,令人头痛.必须按下Ctrl ...

  9. 解决Python开发过程中依赖库打包问题的方法

    在Python开发的过程中,经常会遇到各种各样的小问题,比如在一台计算机上调试好的程序,迁移到另外一台机子上后往往会应为工程项目依赖库的缺失而造成错误. 除了一遍又一遍对着被抛出错误去重新instal ...

最新文章

  1. Windows Phone 7编程学习点滴一——页面切换、返回键重载和工具栏
  2. 华为自研编程语言「仓颉」火上热搜,已正式开启内测,成员辟谣:不是中文编程...
  3. 策略模式(Strategy Pattern)
  4. 1336:【例3-1】找树根和孩子
  5. [ASP.NET Core 3框架揭秘] 依赖注入:依赖注入模式
  6. 计算与推断思维 六、可视化
  7. 千呼万唤始出来 ===Visual Studio Team System 2008 Team Suite 中文版 Out!!!
  8. ping 丢包 网络摄像头_FIFA21 新加入网络连接监测功能
  9. oracle安装过程中内核参数详解
  10. IDEA构建JDK_1.8源码阅读环境过程详解
  11. python画图代码乔治-2020阅读书单
  12. 【微软商店(Microsoft Store)重置后打不开,商店下载不了应用的解决方法】
  13. 第四届泰迪杯数据挖掘挑战赛B题数据预处理-数据导入(Matlab)
  14. Java后台+微信小程序实现推送 “服务通知”
  15. java判断接口地址是否存在_java.util.Iterator接口中的hashNext()方法是用来判断集合中是否存在下一个元素的()_学小易找答案...
  16. 平凡的岗位做不平凡的事
  17. 简明c语言,简明易懂的C语言俄罗斯方块
  18. LeCo-83.删除排序链表中的重复元素
  19. (幼儿园毕业)Javascript小学级随机生成四则运算
  20. 全民分销时代,企业如何运营分销平台?

热门文章

  1. 服务器RAID信息存储方式介绍服务器磁盘做直通模式
  2. 微信小程序自定义组件标签
  3. springboot整合阿里云oss上传的方法示例
  4. 图片预加载和懒加载的多种方法
  5. 次世代游戏建模人的红利期真要来了,3D角色建模价格竟高达100万一个,元宇宙高薪抢占人才
  6. Sl beta4发布了
  7. 祝贺“海峡链”成为TBI首批“可信区块链数字藏品项目”成员单位
  8. 【Linux系统移植】NXP 官方开发板 kernel内核 编译与烧录
  9. TCPIP技术实验大作业:基于TCP/IP的程序开发技术综述及应用实践
  10. 通过位置跟踪模型演示PID三个参数作用