python逆向-逆向pyinstaller打包的exe程序反编译获取源代码
Pyinstaller
pyinstaller 是一个用于将 Python 程序打包成独立可执行文件的工具,能够在没有 Python 解释器的情况下运行。 Python 脚本转换为 Windows、macOS 和 Linux 操作系统上的可执行文件。
把Python项目打包成exe非常简单。
#安装pyinstaller
pip install pyinstaller#打包
pyinstaller your_script.py
有时候为了恢复一部分源码,我们将以前前编译好的exe反编译成py文件。
在反编译前,我们要确定是Python编译的 exe项目。
Exeinfo PE
Exeinfo PE 是一款查看 PE 文件信息的工具,可以查看 EXE/dll 文件的编译器信息、是否加壳、入口点地址、输出表/输入表等等 PE 信息,帮助开发人员对程序进行分析和逆向。Exeinfo PE 还可以提取PE文件中的资源,可以提取图片、EXE、压缩包、MSI、SWF等等资源
使用类似的查壳工具可以查看程序是不是 pyinstaller 打包,确定是 pyinstaller 打包后就可以使用下面的方法进行反编译了
打开软件后直接将需要逆向的程序拉到软件上即可
exe反编译
拉取 pyinstxtractor.py
git clone https://github.com/countercept/python-exe-unpacker使用 Python 执行pyinstxtractor.py脚本,便可以对指定的 exe 程序进行反编译。
python pyinstxtractor.py main.exe
编译完成后同目录下会出现一个xxx.exe_extracted的目录,进入目录后可以看到同 exe 程序名的一个文件。由于我们反编译的 Python 版本与程序 Python 版本不同,导致反编译出来的程序没有携带 .pyc后缀,需要我们自己手动加上后缀,如下图修改成main.pyc
修改后缀
给pyc文件添加文件头
pyinstaller 打包后会去掉文件头部的 magic number,此时反编译出来的 pyc 文件都是缺少 magic number 值的,会导致后面我们将 pyc 文件反编译为 py 文件时出现问题,需要我们手动补上缺失的部分。
这里使用WinHex20,WinHex20是一款非常知名的16进制编辑器软件,使用该软件能够快速帮助用户编辑二进制、十六进制、乱码等文件,非常方便。
使用 WinHex20 打开 main.pyc文件。
打开“main.exe_extracted"文件夹下的PYZ-00.pyz_extracted文件夹,使用 WinHex20 随便打开其中一个pyc文件,将其头部复制到main.pyc的头部。可以看到上面修改的头部就是下面这里复制过去的。修改后记得保存文件!
使用pycdc反编译pyc文件
在网上下载好pycdc之后,将修改后的main.pyc文件和pycdc.exe放在同目录下
pycdc.exe main.pyc>main.py
等待执行成功之后在文件夹内会出现main.py
然后就可以使用编辑器阅读了,但是可能会出现中文编码错误的情况,如下:
原因:反编译工具在还原时,有时不会自动将这些字节解码回原始的 Unicode 字符串,而是直接以十六进制转义序列的形式显示出来。
大数据量的情况下直接让ai写个脚本处理替换一下就行!