python核心教程python菜鸟教程

本文介绍了Python中的.pyc文件及其作用,探讨了使用compileall库批量编译.py文件为.pyc,以及.pyc文件是否能保护源码。同时,文章提到了Python代码加密的方法,包括反编译工具的存在和修改Python解释器以加密代码的思路,最后讨论了Python代码执行的安全隐患,如利用内置函数执行操作系统命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python解释器在执行代码的过程中,会首先生成.pyc文件,然后再解释执行.pyc中的内容,当然,解释器也能直接执行.pyc文件。
自学python,可以找我领取参考教程。我的抠抠前面是169,中间是0729,后面是198,数字连起来就行了

.pyc文件是一个二进制的文件,是不具备可读性的。

假如我们发到客户环境时,是.pyc文件,而不是.py,那么是不是就可以保护我们的Python代码?

想要做到这一点,并不难。Python标准库就提供了一个名叫compileall的库,使用它就可以做到。

执行如下命令,即可将目录下的所有.py文件编译成.pyc文件:

python -m compileall 然后删除 目录下所有 .py 文件就可以了。

$ find -name ‘*.py’ -type f -print -exec rm {} ;

这一方法,可以加密我们的Python代码,胜过代码裸在外面。尴尬的是,因为Python解释器的兼容较差,有些版本并不能运行.pyc文件。而且已经有现成的反编译工具,可以直接破解。

比如python-uncompyle6(「链接」),只要执行以下命令,就可以搞定。

$ uncompyle6 compiled-python-file-pyc-or-pyo

最好的保护代码的方法(也是最绝的方法):

由于Python是解释型语言,因此在发行Python程序的时候,就必须包含一个Python解释器,如果我们修改这个解释器,代码不就被保护起来了吗?

如果我们能对最原始的Python代码进行加密,加密后的代码被发行后。哪怕被别人看到了,但因为不晓得算法是怎样的,就破解不了了。

这是因为Python解释器本身是一个二进制文件,自然也就无法获得关键性的数据,进而保护了源码。

但是python中也会存在一些源码执行的漏洞。利用漏洞可以轻易调用os模块来执行操作系统命令。比如:

[].class.mro[1].subclasses()[78].init.globals[‘builtins’]‘eval’

自学python,可以找我领取参考教程。我的抠抠前面是169,中间是0729,后面是198,数字连起来就行了

这句话通过可以直接执行shell命令,原理是:

1、通过列表找到对象或类所属的类

[].class

<class ‘list’>

2、通过__mro__找到多继承时的方法搜索顺序,返回的是元祖

[].class.mro

(<class ‘list’>, <class ‘object’>)

3、选择元祖的含object基类的元素,并用__subclasses__()找到所有使用基类的子类列表。

[].class.mro[1].subclasses()

[<class ‘type’>, <class ‘weakref’>, <class ‘weakcallableproxy’>, <class ‘weakproxy’>, <class ‘int’>, <class ‘bytearray’>, <class ‘bytes’>, <class ‘list’>, <class ‘NoneType’>, <class ‘NotImplementedType’>, <class ‘traceback’>, <class ‘super’>, <class ‘range’>, <class ‘dict’>, <class ‘dict_keys’>, <class ‘dict_values’>, <class ‘dict_items’>, <class ‘odict_iterator’>, <class ‘set’>, <class ‘str’>, <class ‘slice’>, <class ‘staticmethod’>, <class ‘complex’>, <class ‘float’>, <class ‘frozenset’>, <class ‘property’>, <class ‘managedbuffer’>, <class ‘memoryview’>, <class ‘tuple’>, <class ‘enumerate’>, <class ‘reversed’>, <class ‘stderrprinter’>, <class ‘code’>, <class ‘frame’>, <class ‘builtin_function_or_method’>, <class ‘method’>, <class ‘function’>, <class ‘mappingproxy’>, <class ‘generator’>, <class ‘getset_descriptor’>, <class ‘wrapper_descriptor’>, <class ‘method-wrapper’>, <class ‘ellipsis’>, <class ‘member_descriptor’>, <class ‘types.SimpleNamespace’>, <class ‘PyCapsule’>, <class ‘longrange_iterator’>, <class ‘cell’>, <class ‘instancemethod’>, <class ‘classmethod_descriptor’>, <class ‘method_descriptor’>, <class ‘callable_iterator’>, <class ‘iterator’>, <class ‘coroutine’>, <class ‘coroutine_wrapper’>, <class ‘moduledef’>, <class ‘module’>, <class ‘EncodingMap’>, <class ‘fieldnameiterator’>, <class ‘formatteriterator’>, <class ‘filter’>, <class ‘map’>, <class ‘zip’>, <class ‘BaseException’>, <class ‘hamt’>, <class ‘hamt_array_node’>, <class ‘hamt_bitmap_node’>, <class ‘hamt_collision_node’>, <class ‘keys’>, <class ‘values’>, <class ‘items’>, <class ‘Context’>, <class ‘ContextVar’>, <class ‘Token’>, <class ‘Token.MISSING’>, <class ‘_frozen_importlib._ModuleLock’>, <class ‘_frozen_importlib._DummyModuleLock’>, <class ‘_frozen_importlib._ModuleLockManager’>, <class ‘_frozen_importlib._installed_safely’>, <class ‘_frozen_importlib.ModuleSpec’>, <class ‘_frozen_importlib.BuiltinImporter’>, <class ‘classmethod’>, <class ‘_frozen_importlib.FrozenImporter’>, <class ‘_frozen_importlib._ImportLockContext’>, <class ‘_thread._localdummy’>, <class ‘_thread._local’>, <class ‘_thread.lock’>, <class ‘_thread.RLock’>, <class ‘zipimport.zipimporter’>, <class ‘_frozen_importlib_external.WindowsRegistryFinder’>, <class ‘_frozen_importlib_external._LoaderBasics’>, <class ‘_frozen_importlib_external.FileLoader’>, <class ‘_frozen_imp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值