原文地址:打包的-exe文件反汇编成-py文件/ 0x00 工具
pyinstxtractor
uncompyle6 安装命令如下:
pip install uncompyle6 0x01 前言在做ctf逆向题目时有时会遇到python写的.exe程序,如果能够将.exe反编译成python源码,就能更快解题。python打包exe文件有使用py2exe,pyinstaller,cx_Freeze,nuitka等方式,其中pyinstaller是最常用的方法。
0x02判断是否为pyinstaller打包的exe文件IDA中打开字符串窗口,看到有一大堆Py_开头的字符串,可以判断是python写的程序
接着再CTRL + F搜索 pyinstaller,如果搜索的到,就可以确定是pyinstaller打包
0x03 .exe转.pyc首先利用pyinstxtractor脚本将.exe文件转为.pyc文件,指令格式为
python pyinstxtractor.py exe文件名称需要注意的是,如果你的本机python版本与写exe的python版本不同的话可能会失败。
最后一行显示,你可以反编译.pyc文件。
所以,我们就到生成的目录下找到.pyc文件。
注意:有时候会找不到pyc文件,这是因为生成的文件少了pyc文件头,所以我们要找到少了pyc文件头的文件。一般情况下,该文件在名称和exe名称相同的.manifest文件上面。如果不是,可以把没有后缀名的文件都试一试。
0x04 添加pyc文件头找到目录下名为struct的文件,用二进制编辑器打开,文件的前16个字节便是少掉的pyc文件头,将其添加到pyc文件偏移量为零的位置。
注意,如果目录下本来就有.pyc文件也需要添加pyc文件头。
0x05 .pyc转.py命令:
uncompyle6 -o 生成文件.py 目标文件.pyc注意将pyc文件名改为XXX.pyc,否则会发生错误。
0x06 总结可能出现的问题:
.exe转.pyc失败,可能原因是pyinstaller打包时的python版本与你的python版本不同。
.pyc文件反编译失败,可能原因是pyc文件头没有正确添加。