反编译代码

1、找到相应得程序文件

如果有exe或者elf格式得文件,那就直接反编译。

如果没有找到,就找下拉去的文件夹中dist文件夹下熟悉的文件名,有可能是文件格式的,没有后缀 。

2、提取文件

首先需要准备pyinstxtractor.py ,下载地址:https://github.com/extremecoders-re/pyinstxtractor

然后把下载的文件复制到需要反编译的文件夹中,在命令行输入python pyinstxtractor.py (要编译的文件名)

python  编译 反编译 python反编译工具_python  编译 反编译


这时候会得到一个后缀为_extracted的文件夹,这里面就是需要的文件。

打开之后发现里面都是pyc文件格式的,这时候我们就需要把pyc格式的文件转换为py格式的文件。

3、转换格式

3.1 修改文件头

如果你报错了,那么就继续。

python  编译 反编译 python反编译工具_python_02


这种错误就是需要修改文件头,因为在压缩和解压的时候会存在文件头的丢失。

  • 因为pyc文件都是16进制,所以我们需要一些工具打开进行观察,这方面的可以进行百度,工具一抓一大把,我使用的是Notepad++ 装了一个插件HEX-Editor.

这时候我们选择打开struct.pyc(其他的也可以,主要是用来比较,从而找到正确的文件头)

python  编译 反编译 python反编译工具_python  编译 反编译_03

  • 通过对比发现前11个字节是不一样的,这时候我们就把struct.pyc的前11字节替换需要编译的文件开头。(如果复制后发现后面两个字节是变化的,不用管,那是代表时间的。)
  • 这时候会有个问题,有些文件的开头是从e3开始的,这时候就直接把前11字节复制到文件头就可以了。

3.2 编译

完成后使用命令uncompyle6 当前文件名.pyc > 保存的文件名.py 这时候文件夹中就会有文件了,这时候就可以看到代码的原始样貌了。
但是这只是一个文件,如果是大项目的话,可能会有很多依赖包,就包括你写的函数。

3.3 寻找依赖包

相关依赖包都在PYZ-00.pyz文件里面。

这时候我们需要使用到 pyi-archive_viewer.py
这个文件在(python环境)\Scripts里,是需要安装pyinstaller的,没有安装的需要安装一下(已经安装的跳过安装)pip install pyinstaller

安装完成后在将(python环境)\Scripts添加到环境变量path里面,这样就可以直接在命令行使用了。

使用命令 pyi-archive_viewer.py PYZ-00.pyz然后就会进入到

python  编译 反编译 python反编译工具_开发语言_04


然后找到自己想要编译的文件名,在?后输入x 文件名 ,然后回在下一步输入保存的文件名,后缀这里就先写上.pyc,回车之后返回文件夹就会看到相应的文件。

python  编译 反编译 python反编译工具_反编译_05

3.4 转换格式

我们需要安装uncompyle6,是一个python库,pip conda都可以。

安装完成后,这在当前目录下使用cmd命令行 输入 uncompyle6 当前文件名.pyc > 转换完成保存的文件名.py

PS:在反编译中发现一个严重的问题,如果在PYZ-00.pyz的需要编译的依赖包非常多,那只能一个个的取出来,非常的SB,开头的文件提取,以及后面的修改文件头、转换格式都是可以编程快速进行的,但是在修改文件头的时候还是出了点问题,后续如果完成了自动化的过程,会再添加到文章中。