记一次对pyinstaller打包的,无加壳exe程序的反编译。之前,有位朋友写了有关学校充电费的程序,打包成了exe,现在学校充电费的网站更新了,我就想把这位朋友写的程序反编译一下,然后进行代码修改。

首先:

将朋友写的exe程序放进HXD中,发现朋友也正好是用python3.7写的程序。在HXD中,结尾部分可多次发现py3.7之类的字符。

python反编译dll python3.9反编译_加壳


由于我们两个的python版本都是3.7,为接下来的反编译减去了不少的麻烦。

工具

接下来的反编译需要一个脚本pyinstxtractor.py。可在如下网站中下载:
pyinstxtractor 接下来将要进行反编译的exe程序与下载下来的脚本放到同一个目录下,然后通过cmd命令:

python pyinstxtractor.py 待反编译的exe文件

如果你的python版本与待反编译的exe文件python版本一致,会出现如下画面:

python反编译dll python3.9反编译_exe_02


然后在当前目录下,你会看到生成的一个新的文件夹,以extracted结尾的文件夹,然后进入。

开始利用HXD

进入之后找到程序命名的文件,例如你的exe名为login.exe,那么你要找的文件便是login。然后要找到struct文件。如图:

python反编译dll python3.9反编译_python反编译dll_03


将这两个文件拖入HXD,发现struct比程序文件多了十六个字节,如图

python反编译dll python3.9反编译_python反编译dll_04


python反编译dll python3.9反编译_python_05


将struct多的那十六个字节补充进login头部中,并将新产生的文件命名为pyc文件。

进行pyc反编译

将得到的pyc文件,通过uncompyle6进行反编译。
对uncompyle6进行安装

pip install uncompyle6

然后通过命令进行反编译:

uncompyle6.exe file.pyc > file.py

就可以得到py源代码文件了。

补充

若打包的python不存在自写库,那么反编译就基本结束了,若还有作者自己写的库,那么还得将作者自写的库反编译一下。在如下文件夹中,将自写库反编译出来。

python反编译dll python3.9反编译_python_06