Python打包exe反编译还原成源码

news/2025/2/5 9:04:14/文章来源:https://www.cnblogs.com/wutou/p/18696443

前言全局说明

打包好的exe文件还在,但是Python源文件不知什么时候被误删了。现在想改动一下功能,重写Python脚本工程量也太大了,怎么办?只能反编译还原源码。


一、说明

1.1 环境:

Windows 11 家庭版 23H2 22631.3737
Python 3.8.10 (tags/v3.8.10:3d8993a, May  3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)] on win32

1.2 反编译exe脚本到pyc字节码文件:

pyinstxtractor.py 脚本可以在github项目 python-exe-unpacker 中下载,地址:
https://github.com/WithSecureLabs/python-exe-unpacker

经测试:pyinstxtractor.py 最高支持版本 3.11.9

1.3 pyc 字节码转源码:

pip install uncompyle6

或 用国内镜像

pip install uncompyle6 -i https://pypi.tuna.tsinghua.edu.cn/simple

uncompyle6 官方推荐 python 3.7.4 运行

1.4 确认一个exe程序他是不是由pyinstaller编译的,

如果不是那就没必要再往下操作了。一般我们可以看程序图标,比较标志性的两个:
下图,图标表示不带命令行(即pyinstaller -w)
image
下图,图标表示带命令行
image


二、exe 提取获取pyc字节码文件

2.1 exe打包对照表

网上说,尽量选择和exe打包时用的 python 版本一致,经过测试,获得如下表格供参考:
https://www.cnblogs.com/wutou/p/18697270

2.2 exe提取

从python-exe-unpacker里复制pyinstxtractor.py到exe目录

python pyinstxtractor.py 2.exe

demo.exe 是待提取的exe文件

image

执行完成后,该文件夹下会出现 文件名.exe_extracted 文件夹 (根据不同exe名字不同,会出现xxx.exe_extracted)
image


三、pyc字节码转 py 文件

uncompyle6 xxx.pyc>xxx.py

uncompyle6 -o xxx.py xxx.pyc

如过在命令行或输出的py文件里显示 Unknown magic number 227 in 2.exe_extracted\2.pyc
说明运行入口类共16字节的 magic 和 时间戳被去掉了。
需要增加,继续看下面内容


四、增加 magic 和 时间戳

以下会用到16进制编译,可以用 WinHEX、UltraEdit、Hex Editor Neo、notepad++加插件HEX-Editor、vs等软件,这里以 WinHEX 示例。

前4字节对应Python编译版本表格:
https://www.cnblogs.com/wutou/p/18697264

获取 magic 和 时间戳 的方法:
时间戳可以不用,直接填充00即可,但是 magic 是识别python的版本,所以必须要用到,方法如下

4.1 解包后,从 struct 中获取

4.2 解包后,从 .pyc 中获取

在PYZ-00.pyz_extracted文件夹中任意打开一个 .pyc 文件

4.3 用手头有的python打包出一个exe

用当前版本打包出的exe的头信息填充



免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。




参考、来源:
https://zhuanlan.zhihu.com/p/415072339
https://blog.csdn.net/gitblog_09081/article/details/142226269
https://blog.csdn.net/ljx1887103/article/details/128959642
https://blog.csdn.net/u010326269/article/details/121035247 (1.4)
https://blog.csdn.net/weixin_44362969/article/details/105616531 (评论区推荐版本)
https://www.jianshu.com/p/036cbcd20776
https://zhuanlan.zhihu.com/p/599884406 (4.3)



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/878948.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年1月文章一览

2025年1月编程人总共更新了27篇文章: 1.2024年12月文章一览 2.《计算机组成及汇编语言原理》阅读笔记:p177-p177 3.《计算机组成及汇编语言原理》阅读笔记:p178-p199 4.《计算机组成及汇编语言原理》阅读笔记:p200-p240 5.《计算机组成及汇编语言原理》读后感 6.《CPython …

SQL2016 英文环境下的日期格式。

SELECT PARSE(03 11 2024 11:03PM AS DATETIME USING en-US)

读算法简史:从美索不达米亚到人工智能时代07计算复杂度

旅行商问题是确定一系列城市间最短旅行路线,属NP困难问题,穷举搜索很慢,最快算法也只能找到近似解,其决策问题是NP完全问题。1. 旅行商问题 1.1. the Travelling Salesman Problem1.1.1. 旅行商问题最早的记录出现于19世纪1.1.2. 这个问题被威廉汉密尔顿(William Hamilton)…

[Tools] Vite环境变量

https://cn.vitejs.dev/guide/env-and-mode#env-variables-and-modes添加额外的环境变量 .env #标题 VITE_APP_TITLE=Vite App #端口 VITE_PORT=5173 #是否自动打开浏览器 VITE_OPEN=true .env.development #开发环境端口 VITE_PORT=8848 #是否删除console打印日志 VITE_DROP_C…

家里的厕所马桶堵塞了,如何不花一分钱就轻松地处理好 All In One

家里的厕所马桶堵塞了,如何不花一分钱就轻松地处理好 All In One 马桶堵塞, 管道疏通家里的厕所马桶堵塞了,如何不花一分钱就轻松地处理好 All In One马桶堵塞, 管道疏通原理分析 大气压强,利用工具,提高管道内外的压力差 解决方案马桶刷 塑料袋demos(🐞 反爬虫测试!打击…

Tianji监控

部署地址 当前地址:Tianji 项目地址: GitHub 安装教程 监控端 Sealos一键安装 安装成功后,在监控端申请添加服务器:复制第2步中的命令备用,然后在第一步的下载报告器发布页面中下载适宜类型的报告器,x86的Linux服务器就下载下面这个:下载完成后上传到Linux服务器的根目录…

赛道

方案23:AI股票/加密货币分析助手 适合人群:关注金融市场,有数据分析经验。 盈利方式:订阅制分析、投资顾问工具、课程售卖。 步骤:开发AI金融分析系统AI 实时分析股票、比特币市场走势。 提供个性化投资建议(非金融牌照业务)。变现方式:付费会员(月费199元,提供每日市…

λ-calculus的归约

\(\newcommand{\l}{\lambda}\)在之前的讨论中,我们用等号\(=\)表示“可以演算得到”,并且规定等号具有自反、对称、传递的基本性质。这就意味着,我们不仅可以说\((\l x.xx)N\)能演算得到\(NN\),根据对称性也可以说\(NN\)能演算得到\((\l x.xx)N\)。后者听上去很奇怪,因为与…

CubeMX 生成代码 在VScode 中显示未定义,解决办法

CubeMX 生成代码 在VScode 中显示未定义,解决办法CubeMX 生成代码 在VScode 中显示未定义,解决办法 1. 背景 CubeMX 生成代码 在VScode 中显示未定义,未定义、头文件路径无效,在当实际上是可以编译成功的。 2. 原因 keil软件编译器会预编译一些头文件,vscode没有编译 3. 解…

从《だから僕は音楽を辞めた》到《エルマ》

《エルマ》专辑访谈从《だから僕は音楽を辞めた》到《エルマ》 从专辑制作实况到更深层的乐器与演奏方式的执着,除了n-buna、suis之外,支援ヨルシカ的下鹤光康(吉他)、キタニタツヤ(贝斯)、Masack(鼓)、平畑彻也(钢琴)六人畅谈一切。超过一万五千字的特别专访。首先想…

vscode+edie插件配置STM32开发环境,彻底摆脱KEIL

安装 首先去vscode官网下载适合自己的安装包,一般来说选择 User Installer x64 即可,具体安装过程请参考其他教程,此处不再赘述: Vscode官网安装完成后打开,在左侧边栏打开插件市场,搜索并安装如下四个插件:C/C++ (C语言代码提示的核心插件) Chinese (中文显示) Emb…

本地部署DeepSeek并用Python调用

本地部署DeepSeek并用Python试调用之,总体来说过程比较顺畅。目录需要下载的软件安装步骤安装Ollama并运行模型DeepSeek安装Hollama试用python调用 需要下载的软件OllamaSetup.exe(Ollama是一个管理和运行大语言模型的开源工具) Hollama_0.25.1-win-x64.exe【可选】(Hollam…