原文地址:http://pluie.top/2020/09/03/pyinstaller打包的-exe文件反匯編成-py文件/
0x00 工具
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文件頭沒有正確添加。