当前位置: 首页 > news >正文

Pyinstaller编译EXE及反编译

文章目录

  • 适用范围
  • 示例文件
  • 编译EXE
  • 反编译EXE
    • 准备工具
    • 编译pycdc
    • 反编译
  • 反编译得到的文件
  • 相关资源下载

适用范围

实测 python3.9可以反编译。从pycdc源代码看,似乎支持到python 3.13。

示例文件

demo.py

import sys
from PyQt5 import QtWidgets, QtCore, QtGui
class QWidget(QtWidgets.QWidget):def __init__(self, parent=None):super(QWidget, self).__init__(parent)self.init_ui()def init_ui(self):self.setGeometry(300, 300, 300, 200)self.setWindowTitle('Demo')layout = QtWidgets.QVBoxLayout(self)self.label = QtWidgets.QLabel('Hello World', self)layout.addWidget(self.label)self.show()if __name__ == '__main__':app = QtWidgets.QApplication(sys.argv)window = QWidget()sys.exit(app.exec_())

编译EXE

pip install pyinstallerpyinstaller -F demo.py

dist 目录下得到 demo.exe

反编译EXE

准备工具

  • w64devkit-x64-2.0.0.exe,从 https://github.com/skeeto/w64devkit 或镜像站下载
  • cmake-3.31.5-windows-x86_64.msiC,从 https://cmake.org/download/ 下载
  • Git-2.45.2-64-bit.exe,从 https://git-scm.com/downloads/win 下载
  • pycdc源码, 从 https://github.com/zrax/pycdc 下载
  • pyinstxtractor.py源码,从https://github.com/extremecoders-re/pyinstxtractor 下载

安装上面的三个EXE

编译pycdc

启动w64devkit.exe,进入 pycdc 目录

cmake . -G "MinGW Makefiles"cmake --build . --config Release

pycdc目录下得到 pycdc.exe

反编译

可以用任意版本的python,建议用与打包环境用相同python版本

python pyinstxtractor.py demo.exe

同目录下得到demo.exe_extracted

找到 demo.pyc, pycdc.exe 解析 pyc文件,反编译为 py文件

pycdc.exe -o demo.py demo.pyc

反编译得到的文件

# Source Generated with Decompyle++
# File: demo2.pyc (Python 3.9)import sys
from PyQt5 import QtWidgets, QtCore, QtGuiclass QWidget(QtWidgets.QWidget):def __init__(self = None, parent = None):super(QWidget, self).__init__(parent)self.init_ui()def init_ui(self):self.setGeometry(300, 300, 300, 200)self.setWindowTitle('Demo')layout = QtWidgets.QVBoxLayout(self)self.label = QtWidgets.QLabel('Hello World', self)layout.addWidget(self.label)self.show()__classcell__ = Noneif __name__ == '__main__':app = QtWidgets.QApplication(sys.argv)window = QWidget()sys.exit(app.exec_())

相关资源下载

通过网盘分享的文件:python_compile_decompile
链接: https://pan.baidu.com/s/1Qf4KUFmqFWzf7WbOTx6xVA?pwd=bf25 提取码: bf25 
  • cmake-3.31.5-windows-x86_64.msi
  • Git-2.45.2-64-bit.exe
  • w64devkit-x64-2.1.0.exe
  • pycdc-master.zip [ 2025.05.08从github下载]
  • pyinstxtractor-master.zip [2025.05.08从github下载]
  • pycdc.exe 根据以上方法,编译出来的 pycdc程序
http://www.dtcms.com/a/178792.html

相关文章:

  • 解决方案:ValueError: setting an array element with a sequence.
  • 主成分分析(PCA)是什么?简易理解版
  • web 自动化之 selenium+webdriver 环境搭建及原理讲解
  • 第三天 车联网云架构
  • CAS、CAS自旋、CAS自旋锁、CLH锁与Java AQS:深入理解并发编程核心机制
  • stable diffusion的attention-map:提取和可视化跨注意力图
  • DRAM详解
  • 【Electron】electron-vue 借助 element-ui UI 库助力桌面应用开发
  • MIST:一键解锁 macOS 历史版本,旧系统安装不再难!
  • 学习黑客 MAC 地址深入了解
  • 问题 | 低空经济未来发展前景机遇及挑战
  • C++ 工具链与开发实践:构建安全、高效与创新的开发生态
  • 探索大语言模型(LLM):词袋法(Bag of Words)原理与实现
  • 【愚公系列】《Manus极简入门》026-市场分析专家:“市场洞察家”
  • 【JavaScript】二十九、垃圾回收 + 闭包 + 变量提升
  • Python实例题:Python获取喜马拉雅音频
  • laravel 使用异步队列,context带的上下文造成反序列化出问题
  • day05_java中常见的运算符
  • python学生作业提交管理系统-在线作业提交系统
  • Hutool的`BeanUtil.toBean`方法详解
  • 自定义Widget开发:自定义布局实现
  • Spring Boot Controller 如何处理HTTP请求体
  • 力扣刷题Day 42:缺失的第一个正数(238)
  • javaStream流toMap小坑
  • 算法与数据结构 - 常用图算法总结
  • 视频编解码学习六之视频采集和存储
  • C++算法(19):整数类型极值,从INT_MIN原理到跨平台开发实战
  • 大模型备案材料解析:模型服务协议涵盖内容
  • SpringBoot+Dubbo+Zookeeper实现分布式系统步骤
  • 【hadoop】Sqoop数据迁移工具的安装部署