我们编写的python代码在运行过程中,会被编译成

我们编写的python代码在运行过程中,会被编译成,第1张

会被编译成二进制代码。

一个程序,从编写完代码,到被计算机运行,总共需要经历以下四步,编译。编译器会将程序源代码编译成汇编代码。汇编。汇编器会将汇编代码文件翻译成为二进制的机器码。链接。链接器会将一个个目标文件和库文件链接在一起,成为一个完整的可执行程序。载入。加载器会将可执行文件的代码和数据从硬盘加载到内存中,然后跳转到程序的第一条指令处开始运行。

Python是一种广泛使用的解释型、高级和通用的编程语言。Python由荷兰数学和计算机科学研究学会的GuidovanRossum创造,第一版发布于1991年,它是ABC语言的后继者,也可以视之为一种使用传统中缀表达式的LISP方言。

C语言和Python语言虽然均可用于编写计算机程序,但它们在执行方式上略有不同。C语言是一种编译型语言,程序需要先经过编译器的编译过程,将源代码转换为机器语言,在计算机上运行时直接执行机器语言程序。与之不同,Python是一种解释型语言,可以直接执行Python程序,无需先按照C语言那样进行编译。Python解释器将Python代码作为输入,边解释边执行,直到程序结束。相比较而言,编译型语言的程序一般更高效,但执行之前需要额外的编译过程;而解释型语言的程序则更加灵活,但需要消耗更多的计算资源。

像Python这种解释性的语言,要想私有化部署的同时又保护好源码,就像是对于鱼和熊掌的追求。

虽然做不到尽善尽美,但是对代码进行混淆,增加一点破解的难度,或许能规避一些泄露的风险。

本次演示环境:linux

确保要发布的包根目录("demo")中有__main__.py文件,这个是程序执行入口。

编译

批量改名.pyc文件

移动.pyc文件

清理.py文件

清理__pycache__文件夹

打包成zip

运行时只要将zip文件作为参数即可

最终整合脚本

调用方式

对于在变量和函数名上的混淆有点小儿科,而对于跨文件的类名的混淆又太容易实现。

所以对于混淆程度的取舍,要视工程的规模而定。

2.1 混淆工具pyminifier

在原来的工具 pyminifier上修复了几个bug。

安装:

python3 安装

或者clone下来,自行安装

使用例子

2.2 源码变更

不同的配置对于源码的要求不同,以下是笔者踩过的坑。

其他混淆想法

结合混淆、编译和打包,尝试出以下发布脚本。

主要的思路 :创建一个工作目录tmp,然后在此目录下混淆、编译python代码,完成后把内容打包成pyc文件,再将pyc文件和其他配置文件移动到dist,发布dist即可。

混淆的目的是最大程度保护源码,在发布到客户端后不被轻易破解。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12038401.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存