ANSA二次开发:基于ANSA运行的代码如何加密
有道友今天问python如何加密。不清楚他是想知道纯粹的python源码加密还是基于ANSA的加密。在这里介绍python的加密方式:方法一:python打包成.pyc格式的字节码文件。
在运行我们新写的源码时,python编译器会自动检查是否存在对应的pyc文件,若存在就直接调用。否则将在__pycache__ 目录下生成对应的pyc文件,这个文件是可以替代源码文件直接使用的。当然我们也可以通过 py_compile 模块手动打包。import py_compile
py_compile.compile("test.py")
即可将test.py打包成test.pyc文件。但.pyc格式文件不是真正的加密文件,这类文件可以轻松的反编译恢复源码。
uncompyle6 test.pyc > test.py
.pyc文件虽然可以通过字节码混淆等手段实现字节码加密,使得反编译困难,但这种方法属于治标不治本。推荐做法是将源码编译成.pyd格式的动态库实现加密。方法二:利用Cython打包成.pyd格式的动态库文件(推荐)
在要打包的test.py文件同目录下新键一个 setup.py 文件,文件内容如下:
from setuptools import setupfrom Cython.Build import cythonize
setup( name="testModule", ext_modules=cythonize("test.py"), )
在命令行或终端中,cd 到这个目录下,输入以下命令:python setup.py build_ext --inplace 即可生成.pyd格式的文件。生成的.pyd格式反编译难度就显著增加了,若再进一步指令优化、二进制符号剥离等技术可使.pyd格式的文件成为高度优化的机器码,且 无任何可读性残留,达到商业级保护标准。
pyd格式文件的调用和平时库的调用方法相同。直接import即可。
注意:.pyd格式的文件需要要个对应python版本,即3.8打包生成的pyd文件只能在python3.8的环境下运行。
方法三:利用ANSA的CompileScript接口将源码打包成pyb格式文件。
import ansa
def toCompile(): ansa.CompileScript(r"绝对路径\test.py",r"绝对路径\test.pyb","testModule")
if __name__ == '__main__': toCompile()
在ansa环境中直接运行上述代码即可生成.pyb格式的文件。该格式文件只能在ansa中运行且向下兼容。即利用ANSA22生成的pyb文件在22及以上版本可以使用,但在低于22的版本无法运行。