1. 程式人生 > 實用技巧 >pyinstaller打包的.exe檔案反編譯成.py檔案

pyinstaller打包的.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 總結

可能出現的問題:

  1. .exe轉.pyc失敗,可能原因是pyinstaller打包時的python版本與你的python版本不同。
  2. .pyc檔案反編譯失敗,可能原因是pyc檔案頭沒有正確新增。