为了方便使用,我们一般会用 Pyinstaller 将 Python 程序打包,这样就可以在没有安装 Python 解释器的机器上运行了。对于普通人来讲,这无疑是极其方便的,但是对于想要膜拜一下源代码的程序员来说,这就很不友好了。本文就来介绍一下,如何将 exe 文件反编译为 Python 源代码!

仅适用于 Pyinstaller 打包的 exe 文件

一、将 exe 文件转换为 pyc 文件

转换为 pyc 文件有两种办法:

  • 通过 pyinstxtractor 工具直接还原
  • 通过 pyi-archive_viewer 工具还原
1. pyinstxtractor

使用方法很简单,直接执行命令 python pyinstxtractor.py [filename] 即可还原,如下图所示:

解压成功后,同路径下会出现一个 [filename]_extracted 的文件夹,这里边就包含了主程序 input ,需要反编译的就是这个文件,其它的都是一些依赖库,我们不需要关心。

此时 ,将 input 这个文件单独复制出来并修改后缀名为 .pyc 即可 !

2. pyi-archive_viewer

通过查看 PyInstaller 的文档,发现它提供 pyi-archive_viewer 这样一款工具,它可以提取可执行文件中Python 代码。

根据官网的介绍,它的作用就是查看可执行文件中Python代码,详细介绍可参考官方文档:
https://pyinstaller.readthedocs.io/en/stable/advanced-topics.html#using-pyi-archive-viewer

注:需要安装 PyInstaller 才能使用 pyi-archive_viewer 工具。

执行 pyi-archive_viewer [filename] 即可查看 exe 中的 Python 代码

然后选择需要提取的文件(如:input ),提取命令如下图所示:

二、修复提取出的 pyc 文件

进行下一步之前,我们先来对比一下上一步导出的 .pyc 文件和正常的 .pyc文件

可以明显的看出,正常的 pyc 文件是比我们导出的 pyc 文件多出一行内容的,这也是使用以上两种办法导出 pyc 文件的一点不足,默认会去掉 magic 和 时间戳,因此我们需要手动修复一下文件,将正常的 pyc 文件中的 magic 和 时间戳 复制过来即可 !

magic 会因为 Python 版本的不同而不同,以你显示的为准!

三、将 pyc 文件转换为 Python 代码

1. 使用 uncompyle6 工具解码

使用 pip install uncompyle6 安装,然后输入 uncompyle6 input.pyc > input.py 即可解码 !

2. 在线解码