如何保持网站源码分享(网站源码怎么运行)

大家好,感谢邀请,今天来为大家分享一下如何保持网站源码分享的问题,以及和网站源码怎么运行的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!

我们在进行Python技术开发时,特别是脚本、组件、工具类开发的时候,在提测或上线的时候需要把实际的工具脚本交由实际执行者,以免一些代码内的敏感信息泄漏或者可以随意更改组件工具导致一些不可控制的问题。我们常常还是会采取一系列手段,对Python代码进行加密、编译、混淆以保护我们的工程。

现介绍以下几种源码保护手段:

1.编译.pyc文件

pyc文件是一种二进制文件,由原生Python文件经过编译后所生成的,py文件编译成pyc文件后加载速度更快而且提高了代码的安全性。pyc的内容与python的版本相关,不同版本编译的pyc文件不一样

单个pyc文件的生成

一般正常情况下,我们运行py脚本,其包括所依赖的脚本都会在所在目录下自动编译生成.pyc文件。这次我们主要看下如何通过命令方式主动生成.pyc文件

python-mpy_compilepy文件绝对路径\n\npyc会生成在目录下的__pycache__下(前后有双下划线)\n生成的文件名命名方式:源文件名.cpython-python版本.pyc

批量pyc文件的生成

通过compile_dir方法指定目录,会将其目录下所有py文件全部编译为pyc文件

compile_dir(dir[,maxlevels[,ddir[,force[,rx[,quiet]]]]])\n参数含义:\n–maxlevels:递归编译的层数\n–ddir:Ifddirisgiven,itisprependedtothepathtoeachfilebeingcompiledforuseincompilationtimetracebacks,andisalsocompiledintothebyte-codefile,whereitwillbeusedintracebacksandothermessagesincaseswherethesourcefiledoesnotexistatthetimethebyte-codefileisexecuted.\n–force:如果True,不论是是否有pyc,都重新编译\n–rx:一个正则表达式,排除掉不想要的目录\n–quiet:如果为True,则编译不会在标准输出中打印信息\npython-mcompileall<dir>

2.打包为exe

打包Python程序的三方开源库很多,这里主要推荐两种常用且效果不错的打包库:PyInstaller、Nuitka

名称

License

Qt6

Qt5

Linux

Windows

macOS

PyInstaller

GPL

部分支持

支持

支持

支持

支持

Nuitka

MIT

支持

支持

支持

支持

支持

PyInstaller

PyInstaller是一个第三方库,它能够在Windows、Linux、MacOSX等操作系统下将Python源文件进行打包,打包完成后,exe即可在没有Python的环境中运行,也可以作为一个独立文件方便传递和管理。

PyInstaller可以在Windows、MacOSX和Linux上使用,但是并不是跨平台的,所以打包成.exe文件,需要在Windows系统上运行PyInstaller进行打包工作;打包成macapp,需要在MacOS上使用。

安装:

pipinstallpyinstaller

pyinstaller将单个py文件打包

使用:

Pyinstaller-Fdemo.py–打包exe\nPyinstaller-F-wdemo.py–不带控制台的打包不带黑框\nPyinstaller-F-itest.icodemo.py–打包指定exe图标打包\n常用选项:\n-h,–help查看该模块的帮助信息\n-F,-onefile产生单个的可执行文件\n-D,–onedir产生一个目录(包含多个文件)作为可执行程序\n-a,–ascii不包含Unicode字符集支持\n-d,–debug产生debug版本的可执行文件\n-w,–windowed,–noconsolc指定程序运行时不显示命令行窗口(仅对Windows有效)\n-c,–nowindowed,–console指定使用命令行窗口运行程序(仅对Windows有效)\n-oDIR,–out=DIR指定spec文件的生成目录。如果没有指定,则默认使用当前目录来生成spec文件\n-pDIR,–path=DIR设置Python导入模块的路径(和设置PYTHONPATH环境变量的作用相似)。也可使用路径分隔符(Windows使用分号,Linux使用:号)来分隔多个路径\n-nNAME,–name=NAME指定项目(产生的spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为spec的名字\n-i选择图标

pyinstaller将多个py文件打包

生成spec规范配置文件:

pyi-makespecdemo.py

pyinstaller[-F/-D][-w/-c][-ixxx.ico]demo.py

设置加密,需要安装tinyaes第三方库,最多16位字符,此处在使用–key=会有变化\na=Analysis(\n[&39;],搜索导入的路径列表(此列表为项目绝对路径),包括选项给出的路径–paths,项目需要从什么地方导入自定义库\nbinaries=[],应用程序中包含的非二进制文件,包括–add-data选项给出的名称,项目需要用到什么数据,比如图片,视频等。里面格式为tuple,第一个参数是文件路径,第二个是打包后所在的路径,其为一个元组:(&39;,&39;)\nhiddenimports=[],挂钩配置选项由一个字典组成\nruntime_hooks=[],\nexcludes=[],打包的脚本文件\n如果是单文件模式,则需要添加;多文件也可以添加\na.datas,\n[],\nexclude_binaries=True,39;demo&打包程序的名字\ndebug=False,runtime_tmpdir=None,打包的时候进行压缩,False表示不压缩;要用到一个压缩程序UPX,用于压缩文件,需要单独下载\nconsole=True,34;&34;添加选项,初始化时没有的&34;&34;&指定应用程序的图标,传入路径,可以相对路径\n\n)\ncoll=COLLECT(\n&34;&34;&34;\nexe,\na.binaries,\na.zipfiles,\na.datas,\nstrip=False,\nupx=True,\nupx_exclude=[],\nname=&39;,\n)

项目打包:

pyinstallerdemo.spec

这样即可将python程序打包成一个独立的应用工具,直接运行即可。实现了保护程序的一个作用(当然也是可以反编译成功的,不过也提升了破解的难度)

Nuitka

nuitka则是将python源码转成C++(这里得到的是二进制的pyd文件,防止了反编译),然后再编译成可执行文件。

安装:

pipinstall-Unuitka

安装MinGW64:

Windows环境需安装MinGW64,搭建gcc编译环境

MacOS环境不需要单独下载,它会在安装nuitka时自动下载gcc

下载地址:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/

打包:

nuitka–mingw64xxx.py指定参数打包\n选项说明:\n–mingw64:环境选择\n–standalone:是否独立环境\n–show-progress:展示过程\n–show-memory:显示内存\n–plugin-enable=qt-plugins:qt配置\n–include-qt-plugins=sensible,styles:qt样式保持\n–recurse-all:导入引入的资源

nuitka打包并不像网上说的那样,打包速度快,打包体积小。我也实测过,目前体检的感觉就是资源方面的确不用我们考虑那么深,不像pyinstaller可能相关配置就弄好了,打包还是会报资源缺失。而且打包的速度比较慢,体积也挺大的,但是毕竟也是可达到保护Python程序的目的,给使用者方便。

3.代码Obfuscator混淆

借助oxyry在线网站实现obfuscator混淆

在线地址:https://pyob.oxyry.com/

使用pyobfuscate库进行混淆

pyobfuscate会对代码中用户定义的类、函数、变量等进行重命名、更改代码缩进(默认1)、移除注释、添加不影响逻辑的代码语句,最终起到混淆的作用。不过pyobfuscate使用Python2编写,无法解析Python3中的f-string等特殊语法,因此使用前需要将源码进行一定程度的修改,当然也可以直接修改pyobfuscate库,增加对Python3版本的支持。

pythonpyobfuscate.pydemo.py>demo_obfuscated.py

两种主要都是对类和函数名等进行了重置替换,增加阅读难度

4.使用Cython

使用Cython进行开发

编写文件hello.pyx或hello.py:

defhello():\nprint(&39;)

编写setup.py:

fromdistutils.coreimportsetup\nfromCython.Buildimportcythonize\n\nsetup(name=&39;,\next_modules=cythonize(&39;))

编译为.c,再进一步编译为.so或.pyd:

pythonsetup.pybuild_ext–inplace\npython-c&34;34;2023-03-11&34;10030SFTUF3NJ5T&34;56:f1:a7:64:f0:64&34;211.110.6.54″\\\nr001

使用pack选项即可打包脚本:

pyarmorpackdemo.py

不过这款工具属于试用阶段,倾向于商业模式,可以学习试试。

以上5种方式都可提升程序的安全性,保护项目敏感信息。如果对外发布的,也可提升破解难度。今天的分享就到这里了,欢迎留言讨论。

好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!

Published by

风君子

独自遨游何稽首 揭天掀地慰生平