码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【反编译系列】二、反编译 .pyc 文件(uncompyle6)


    文章目录

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

  • 相关阅读:
    MySQL进阶之性能优化与调优技巧
    什么是分布式软件系统
    3、动态库与静态库
    oauth2.0鉴权,登录访问 “/oauth/token”,请求头Authorization(basicToken)如何取值???
    Spire.xls+excel文件实现单据打印
    Wpf 使用 Prism 实战开发Day05
    J2EE从入门到入土03.Set集合
    设计模式-行为型模式-解释器模式
    Debezium同步之Vitess数据到Kafka的同步
    TypeScript 学习笔记(1):TypeScript 简介、开发环境搭建、基本类型
  • 原文地址:https://blog.csdn.net/m0_70885101/article/details/134393740
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号