Pyinstller打包的exe文件反编译

本文介绍了如何使用pyinstxtractor.py和uncompyle6工具从PyInstaller打包的exe文件反编译恢复Python源码。首先通过pyinstxtractor.py提取.pyc文件,然后使用16进制编辑器修复pyc文件头,最后通过uncompyle6进行反编译,成功获取源代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Pyinstller打包的exe文件反编译


前言

最近需要对以前项目进行优化,因找不到源码(只有打包的exe文件),需要对exe文件进行反编译得到源码。


提示:以下是本篇文章正文内容,下面案例可供参考

一、pyinstxtractor.py

使用pyinstxtractor.py对exe文件进行发编译,得到 .pyc文件。

二、使用步骤

1.下载pyinstxtractor.py

网上资源很多,不在赘述

2.反编译exe

2.1、将pyinstxtractor.py与exe文件放在同一个目录下

C:\Users\Administrator\Desktop\itsm>python pyinstxtractor.py itsmwarn.exe
pyinstxtractor.py:74: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
  import imp
[*] Processing itsmwarn.exe
[*] Pyinstaller version: 2.1+
[*] Python version: 38
[*] Length of package: 8562359 bytes
[*] Found 955 files in CArchive
[*] Beginning extraction...please standby
[*] Found 258 files in PYZ archive
[*] Successfully extracted pyinstaller archive: itsmwarn.exe

You can now use a python decompiler on the pyc files within the extracted directory

此时我们在文件夹中得到了itsmwarn.exe_extracted文件夹,目录如下:
在这里插入图片描述
找到命名为itsmwarn的文件(itsmwarn为程序名),将后缀名改为.pyc,即使我们需要的pyc文件。

3.反编译文件

3.1、反编译pyc文件需要用到uncompyle6工具(此处下载也不在赘述,可以网上搜索uncompyle-2.0.0-py2.py3-none-any.whl离线安装)
3.2、安装16进制编辑器(HxD Hex Editor x64)
3.3、用16进制编辑器打开生产的文件夹下struck文件(与pyc在同一文件夹),复制前面8个字节(由于用PyInstaller打包后,pyc文件的前8个字节会被抹掉,所以最后要自己添加回去。前四个字节为python编译的版本,后四个字节为时间戳。四个字节的magic number、四个字节的timestamp)
替换前pyc文件:
在这里插入图片描述
struk文件
在这里插入图片描述
复制8个字节后(1个字节=2个16进制字符,8个字节需要复制):
在这里插入图片描述

3.4、保存后在cmd中执行
如果没有复制会报错

C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\Scripts>uncompyle6.exe itsmwarn.pyc
Unknown magic number 227 in itsmwarn.pyc

复制后会将源代码打印在终端,也可以输出文件(此处没有截图)

C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\Scripts>uncompyle6.exe itsmwarn.pyc
Unknown magic number 227 in itsmwarn.pyc > itsmwarn.py

至此,就得到了源代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值