Pyinstller打包的exe文件反编译
最近需要对以前项目进行优化,因找不到源码(只有打包的exe文件),需要对exe文件进行反编译得到源码。
提示:以下是本篇文章正文内容,下面案例可供参考
使用pyinstxtractor.py对exe文件进行发编译,得到 .pyc文件。
网上资源很多,不在赘述
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.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
至此,就得到了源代码