• 【反编译系列】二、反编译 .pyc 文件(uncompyle6)


    【反编译系列】二、反编译 .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
    
    • 1

    如果速度很慢或者直接报 HTTP 错误,可以使用国内源(下述为清华源)进行下载安装:

    pip install uncompyle -i https://pypi.tuna.tsinghua.edu.cn/simple
    
    • 1

    在这里插入图片描述

    2、进入 .pyc 文件所在的文件夹,反编译单个文件:

    uncompyle6 test.pyc > test.py
    
    • 1

    好像要求 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'))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    即可完成 .pyc 字节码文件到 .py python 源代码的反编译。

    Reference

    Python pyc反编译成py

  • 相关阅读:
    【JavaScript】面试手撕深拷贝
    Pyramid 中的wtforms中的SelectField和通过javascript添加标签选项
    【0138】【libpq】发送任何在outBuffer中等待的数据(8)
    最新版 Let’s Encrypt免费证书申请步骤,保姆级教程
    ESP8266-Arduino编程实例-GA1A12S202对数刻度模拟光传感器
    C++之分水岭——类和对象【上】
    .Linux基础正则表达式字符
    国庆作业2
    rabbitMQ (1)
    【CSAPP基础】第二章信息的表示
  • 原文地址:https://blog.csdn.net/m0_70885101/article/details/134393740