文章目录
- 【反编译系列】二、反编译 .pyc 文件(uncompyle6)
- 1. 介绍
- 2. 反编译
- Reference
【反编译系列】二、反编译 .pyc 文件(uncompyle6)
1. 介绍
.pyc
文件是 Python 将 .py
源代码编译后生成的字节码文件,主要有以下几个特点和作用:
-
加速执行:直接执行
.pyc
字节码,可以跳过反复编译的步骤,直接运行已编译好的字节码,从而加快执行速度; -
隐藏源代码:包含编译后的字节码,而不会包含原始的源代码,可对源代码进行加密或者保护源代码不被用户访问;
-
跨平台运行:不同平台编译的
.pyc
字节码文件可在其它平台上运行,可以将 Python 程序打包成.pyc
文件在不同系统上分发和运行; -
冗余检查:Python解释器会根据
.py
文件的修改时间来检查.pyc
文件是否过期;如果.py
文件没有改动,.pyc
可以直接重用,避免重复编译; -
支持单文件运行:可以只发布
.pyc
文件让用户直接运行,而不需要随附源代码,一定程度上保护代码; -
节省内存:只加载
.pyc
文件可以减少内存开销,因为不需要加载源码。
总体来说,.pyc
文件提高了执行效率、跨平台性,并提供了代码保护和优化内存使用等好处,所以 Python 自动使用 .pyc
字节码文件,但开发者仍可以访问和修改原始源代码。
2. 反编译
.pyc
文件是 Python 编译后的字节码文件,不是直接可读的文本文件,所以无法直接用文本/代码编辑器(下图为 VSCode)打开或查看其具体内容:
但是,使用反编译工具(uncompyle6)可以将其反编译为 .py
即 Python 程序源代码:
1、使用 pip
安装该反编译包(默认已有 python 环境):
pip install uncompyle
如果速度很慢或者直接报 HTTP 错误,可以使用国内源(下述为清华源)进行下载安装:
pip install uncompyle -i https://pypi.tuna.tsinghua.edu.cn/simple
2、进入 .pyc
文件所在的文件夹,反编译单个文件:
uncompyle6 test.pyc > test.py
好像要求 python 版本 <= 3.9!!!
3、反编译目录中的所有 .pyc
文件:
import glob
import uncompyle6
pycs = glob.glob('./transforms/*.pyc')
for pyc in pycs:
uncompyle6.main.decompile_file(pyc, outstream=open(pyc.replace('.pyc', '.py'), 'w'))
即可完成 .pyc
字节码文件到 .py
python 源代码的反编译。
Reference
Python pyc反编译成py