【Python】pyinstaller 反编译 exe

一、背景

        电脑磁盘出问题导致文件丢失,难受的是里面有工作代码,其中一个最新改过的还没及时备份。开始还以为是自己误删或者移到了其他地方,结果搜遍全盘也没找到,试了一些文件恢复方法(recuperaBit,chkdsk)也没用,还有个别文件夹虽然还在但是显示空文件夹而且打不开,重启修复磁盘后异常的文件夹恢复了,但是丢失的文件没有恢复。

        突然想到最新的代码虽然没有备份,但是能找到之前通过 pyinstaller 打包后的 exe,如果能反编译回来,再配合之前备份的代码,应该也能再恢复回来。网上能找到的方法基本都差不多,都是先将 exe 反编译回 pyc 文件,再将pyc文件恢复到py源文件。本文记录一种用起来最简单方法。

二、反编译

1. exe -> pyc

工具:pyinstxtractor-ng

下载地址:Releases · pyinstxtractor/pyinstxtractor-ng · GitHub

        作者提供了预编译程序,下载下来就可以用。将 pyinstxtractor-ng.exe 放到自己打包的程序所在目录,比如我的是 main.exe,将 main.exe 直接拖到 pyinstxtractor-ng.exe 里就可以反编译出pyc 文件。

        反编译出的 pyc 文件存放在 main.exe_extracted 文件夹里,main.pyc 是入口文件,其它代码在 PYZ-xxx 文件夹里。比如我在 main.py 里调用了 src 文件夹里的主程序 run.py,那么在 PYZ-xxx 文件夹里能找到 src 文件夹,src 里有 run.pyc。

 

2. pyc -> py

工具:pycdc

下载地址:Releases · extremecoders-re/decompyle-builds · GitHub

        现在有了 pyc,就需要借助 pycdc 反编译得到 py 文件。同样作者提供了预编译程序,将下载的 pycdc.exe 放到需要反编译的 pyc 文件所在目录下,打开 cmd 运行命令

pycdc.exe <file_name>.pyc

反编译成功,输出源码

        实测如果编译时使用的 python 版本是 3.9+,则反编译 pyc 文件会不全,部分地方会提示反编译失败,3.9 以下的版本没有问题,目前没找到解决方法。

三、总结

折腾了大半天好歹是拿到需要的源码了,经过这次教训,以后还是及时备份文件吧。

参考资料

[1] Python3.9及以上Pyinstaller 反编译教程(exe转py)-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值