python pyinstaller打包的exe 反編譯問題記錄 破解加密

hrdom發表於2024-06-21

首先是用pyinstxtractor

這個網上很多教程,不詳說了。

生成一個xxx.exe_extracted目錄

生成過程中,如果pyinstaller用key加密了,會

[!] Error: Failed to decompress PYZ-00.pyz_extracted\Cython\__init__.pyc, probably encrypted. Extracting as is.

這個說是fail了,其實可以解決,後面詳說。

這個目錄裡,一堆xxx.pyc檔案和一個PYZ-00.pyz_extracted目錄

反編譯.pyc和.pyc.encrypted


Unsupported Python version, 3.9.0, for decompilation

這堆xxx.pyc檔案是沒有加密的,直接用uncompyle6(也叫decompile3)(僅支援到python3.8,而我這個是3.9)或者pycdc(部分支援3.9及以上)

而PYZ-00.pyz_extracted裡的.pyc.encrypted是加密了的,需要解密。(這裡看情況,一些的程式不需要研究PYZ-00.pyz_extracted里加密了的庫檔案)

pycdc(也叫Decompyle++)

(有個線上支援3.9的網站,https://tool.lu/pyc,我懷疑也是用的pycdc。要會員才能多次用,我就沒繼續用。)

據說Windows上編譯比較麻煩,我直接用的編譯好的。

https://github.com/serfend/pydumpck

pip安裝之後

site-packages\pydumpck\pyc_checker\lib_pycdc\pycdc.exe

我是把pycdc.exe複製出來單獨執行的,因為我嫌pydumpck生成了幾個單獨的目錄看著麻煩。

[System.Console]::OutputEncoding = [System.Text.Encoding]::UTF8

.\pycdc.exe .\a.pyc > .\a.py

這裡注意,部分.pyc檔案會處理發編譯部分程式碼缺失的情況,會出現報錯,因為pycdc並沒有完善地支援python3.9+(Unsupported opcode )

struct magic number

https://github.com/MrWQ/reverse_pyinstaller

https://bbs.kanxue.com/thread-277811.htm

多個部落格中說需要給.pyc檔案前邊加幾個位元組的魔數。不過我沒加也用pycdc成功反編譯了。不知道為什麼

(這兩個檔案是否帶.pyc字尾和你使用的pyinstxtractor.py工具版本有關係。V2.0以前的版本,會生成兩個不帶.pyc字尾的檔案,手動為它新增.pyc字尾即可。如下圖所示:)

加密的key隱藏在哪:pyimod00_crypto_key.pyc

解密邏輯參考:

https://tylinux.com/post/2023-09-05-decrypt-pyinstaller-generated-executable-file/

https://blog.csdn.net/GalaxySpaceX/article/details/130591614

相關文章