pyinstaller打包的.exe檔案反編譯成.py檔案
阿新 • • 發佈:2020-09-06
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檔案頭沒有正確新增。