1、提取文件
首先需要准备pyinstxtractor.py ,下载地址:https://github.com/extremecoders-re/pyinstxtractor
然后把下载的文件复制到需要反编译的文件夹中,在命令行输入python pyinstxtractor.py (要编译的文件名)
这时候会得到一个后缀为_extracted的文件夹,这里面就是需要的文件。
打开之后发现里面都是pyc文件格式的,这时候我们就需要把pyc格式的文件转换为py格式的文件。
2、转换格式 (pyc转py文件)
我们需要安装uncompyle6,是一个python库,pip install uncompyle6
安装完成后,这在当前目录下使用cmd命令行 输入 uncompyle6 当前文件名.pyc > 转换完成保存的文件名.py
但是这只是一个文件,如果是大项目的话,可能会有很多依赖包,包括一些自己写的函数。
3、寻找依赖包
相关依赖包都在PYZ-00.pyz文件里面。
这时候我们需要使用到 pyi-archive_viewer
这个文件在(python环境)Scripts里,是需要安装pyinstaller的,没有安装的需要安装一下(已经安装的跳过安装)pip install pyinstaller
安装完成后在将(python环境)Scripts添加到环境变量path里面,这样就可以直接在命令行使用了。
使用命令 pyi-archive_viewer PYZ-00.pyz
然后就会进入到
然后找到自己想要编译的文件名,在?后输入x 文件名 ,然后回在下一步输入保存的文件名,后缀这里就先写上.pyc,回车之后返回文件夹就会看到相应的文件。
4、转换格式时,如果报错
在pyc转py文件时,如果你报错了,则需要修改pyc的文件头。
这种错误就是需要修改文件头,因为在压缩和解压的时候会存在文件头的丢失。
- 因为pyc文件都是16进制,所以我们需要一些工具打开进行观察,我使用的是UltraEdit
这时候我们选择打开struct.pyc(其他的也可以,主要是用来比较,从而找到正确的文件头)
- 通过对比发现前11个字节是不一样的,这时候我们就把struct.pyc的前11字节替换需要编译的文件开头。(如果复制后发现后面两个字节是变化的,不用管,那是代表时间的。)
- 这时候会有个问题,有些文件的开头是从e3开始的,这时候就直接把前11字节复制到文件头就可以了。
在线反编译: https://www.lddgo.net/en/string/pyc-compile-decompile