在Python中反編譯可執行文件exe


前面簡單介紹了將python代碼和文件編譯成可脫離環境運行的可執行文件exe。

有編譯就有反編譯,本文來反編譯一下前文中編譯的exe文件。

幾種python文件

在反編譯前,先了解幾種常見的python文件格式:

.py: 源代碼文件,可以用文本編輯器查看和編輯;

.pyc: 源代碼py文件編譯后生成的二進制文件,無法用文本編輯器進行編輯,由python的虛擬機來執行,pyc文件的內容跟python版本相關;

.pyo: 源代碼py文件優化編譯后生成的二進制文件,無法用文本編輯器進行編輯,Python3.5之后,不再使用.pyo文件名,而是使用類似"xxx.opt-n.pyc的文件名;

.pyd: python的動態鏈接庫(dll),允許程序共享執行特殊任務所必需的代碼和其他資源;

.pyz: zipapp打包文件(類似於pyinstaller打包成exe文件)

反編譯exe文件

使用pyinstxtractor.py工具可以將pyinstaller 生成的exe文件解包成pyc文件,項目地址:

https://sourceforge.net/projects/pyinstallerextractor/

將下載的pyinstxtractor.py文件拷到exe相同的目錄,執行命令:

python pyinstxtractor.py 應用程序名稱.exe

執行結果將生成"應用程序名稱.exe _extracted"的文件夾,如下圖所示:

在根目錄下,包括main二進制文件(對應原來main.py)

在PYZ-00.pyz_extracted子文件夾中,包括了引用類庫文件mylib.pyc的二進制文件(對應原來的mylib.py)

轉換pyc文件

pyc是二進制文件,無法直接查看和編譯,需要轉換成py文件。可以使用在線的工具:

http://tools.bugscaner.com/decompyle/

可是直接生成的pyc文件無法直接轉換為py文件,這里分兩種情況來看:

第一種,使用010 Editor,可以看到,根目錄下的pyc文件(如main.pyc)相對於對應原始pyc文件,缺失16個字節

在E3前插入正確的16個字節即可,這16個字節可在根目錄中struct.pyc下獲得。

轉換后,可能中文會存在編碼顯示問題,可使用在線編碼轉換工具:https://tool.chinaz.com/tools/unicode.aspx

第二種,與前一種類似,但不相同,即引用的文件(如mylib.pyc) 相對於對應原始pyc文件,在第8個字節后,缺少四個字節。補齊后即可轉換成功。

結果邏輯分析

有了py源代碼,接下來就是分析代碼中的業務邏輯了,至於加密文件的解密,在后期的文章中分享。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM