反编译代码
1、找到相应得程序文件
如果有exe或者elf格式得文件,那就直接反编译。
如果没有找到,就找下拉去的文件夹中dist文件夹下熟悉的文件名,有可能是文件格式的,没有后缀 。
2、提取文件
首先需要准备pyinstxtractor.py ,下载地址:https://github.com/extremecoders-re/pyinstxtractor
然后把下载的文件复制到需要反编译的文件夹中,在命令行输入python pyinstxtractor.py (要编译的文件名)
这时候会得到一个后缀为_extracted的文件夹,这里面就是需要的文件。
打开之后发现里面都是pyc文件格式的,这时候我们就需要把pyc格式的文件转换为py格式的文件。
3、转换格式
3.1 修改文件头
如果你报错了,那么就继续。
这种错误就是需要修改文件头,因为在压缩和解压的时候会存在文件头的丢失。
- 因为pyc文件都是16进制,所以我们需要一些工具打开进行观察,这方面的可以进行百度,工具一抓一大把,我使用的是Notepad++ 装了一个插件HEX-Editor.
这时候我们选择打开struct.pyc(其他的也可以,主要是用来比较,从而找到正确的文件头)
- 通过对比发现前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
然后就会进入到
然后找到自己想要编译的文件名,在?后输入x 文件名 ,然后回在下一步输入保存的文件名,后缀这里就先写上.pyc,回车之后返回文件夹就会看到相应的文件。
3.4 转换格式
我们需要安装uncompyle6,是一个python库,pip conda都可以。
安装完成后,这在当前目录下使用cmd命令行 输入 uncompyle6 当前文件名.pyc > 转换完成保存的文件名.py
PS:在反编译中发现一个严重的问题,如果在PYZ-00.pyz的需要编译的依赖包非常多,那只能一个个的取出来,非常的SB,开头的文件提取,以及后面的修改文件头、转换格式都是可以编程快速进行的,但是在修改文件头的时候还是出了点问题,后续如果完成了自动化的过程,会再添加到文章中。