
目录前言原理准备工具软件我会在文末提供链接反编译步骤1. 解压2. 添加文件头3. Pyc文件反编译注意事项下载链接本文由Jzwalliser原创发布在CSDN平台上遵循CC 4.0 BY-SA协议。因此若需转载/引用本文请注明作者并附原文链接。违者必究谢谢配合。个人主页blog.csdn.net/jzwalliser前言以前用Python写过很多小程序为了方便用pyinstaller打包成了各种exe然后保存到了电脑的各个角落。但有一次因为磁盘分区出了问题导致我的源码库全部丢失太悲伤了只有那些遍布磁盘不同角落的exe文件幸免于难。不得已为了恢复一部分源码只得将先前编译好的exe反编译成py文件。原理要想反编译pyinstaller生成的exe需要先了解pyinstaller是如何打包py脚本生成exe的。Pyinstaller 在收到打包指令后会先生成一个spec文件用于指导打包过程。之后py文件会被先编译为pyc文件然后pyc文件又会被去掉开头的8个字节。接着pyinstaller会将python解释器、依赖文件和修改后的pyc文件一起用一种特殊的自解压格式打包在一起形成可执行文件。后面运行可执行文件时会将所有文件自解压到一个临时目录然后运行程序结束后又会将临时目录删除。其它有关Pyinstaller的内容可以参考这篇文章Pyinstaller 打包准备工具软件我会在文末提供链接1. Pyinstaller Extractorpy2. Sublime Textexe3. Uncompyle 6whl反编译步骤在这里我有一个hello.py文件里面的内容是print(Hello World!!!)之后将其打包为exepyinstaller -F hello.py最后pyinstaller一顿输出打包完成。本章就以刚刚打包好的hello.exe为例一起看看如何反编译它。到时候记得将hello.exe替换为你需要反编译的文件1. 解压将pyinstxtractor.py请关注文末的下载链接复制到hello.exe文件所在的目录然后运行命令pyinstxtractor.py hello.exe输出一堆D:\studio\pyin\dist\pyinstxtractor.py:86: DeprecationWarning: the imp module is deprecated in favour of importlib; see the modules documentation for alternative uses import imp [*] Processing hello.exe [*] Pyinstaller version: 2.1 [*] Python version: 38 [*] Length of package: 7275745 bytes [*] Found 69 files in CArchive [*] Beginning extraction...please standby [] Possible entry point: pyiboot01_bootstrap [] Possible entry point: pyi_rth_multiprocessing [] Possible entry point: hello [*] Found 206 files in PYZ archive [*] Successfully extracted pyinstaller archive: hello.exe You can now use a python decompiler on the pyc files within the extracted director看到[*] Successfully extracted pyinstaller archive: hello.exe即代表解压成功。此时会出现一个文件夹hello.exe_extracted进入后找到hello没有后缀名。2. 添加文件头Pyinstaller在打包py脚本的时候会先生成pyc文件再从文件头删掉16个字节其中包括时间戳、Magic Number所以文件是不完整的直接反编译会导致出错。因此我们需要人为地将文件头加回去。此时找到文件前面我打包的是hello.py所以解压出来的叫hello在后面添加后缀.pyc然后用Sublime Text打开此时是以16进制的方式打开的。再打开文件夹PYZ-00.pyz_extracted还是用Sublime Text随便打开其中一个pyc文件。打开后应该是这个样子的左边是需要修改的文件右边是随便打开的pyc文件将pyc文件的第一行复制下来然后添加到缺失16个字节的文件的第一行保存3. Pyc文件反编译最后使用uncompyle6进行反编译。若还没有安装则可以去文末下载whl文件也可以运行pip install uncompyle6安装好后运行uncompyle6 hello.pyc最后就会显示源码了虽然与初始的版本略有不同但基本不影响。如果需要保存到文件可以运行uncompyle6 hello.pychello.py然后就大功告成啦注意事项由于某些原因因为xdis还没有开始支持Python 3.9及以上Uncompyle 6暂时无法反编译Python 3.9及更高版本产生的pyc文件只能等待xdis更新啦。有的时候pyc会反编译失败此时可以尝试一些其它的反编译器如Decompyle 3或在线反编译器自己上网搜。还有定时备份源代码文件下载链接Pyinstaller Extractor 下载文件pyinstxtractor.py百度网盘https://pan.baidu.com/s/1sDEmpPPT5bn_XWZlKuDjCA?pwd0000也可以可前往SourceForge下载Uncompyle 6 下载文件Uncompyle Python 3.3-3.8.zip百度网盘https://pan.baidu.com/s/14iHGfR202y6tSdOcHuPAyA?pwd0000也可以前往PyPI下载Sublime Text 下载文件Sublime Text Setup.exe百度网盘https://pan.baidu.com/s/1jGUZKsvDkiTLqvu_JymUZA?pwd0000其它版本也可以前往Sublime Text 官网下载