python逆向-逆向pyinstaller打包的exe程序反編譯獲取源代碼
Pyinstaller
pyinstaller 是一個用于將 Python 程序打包成獨立可執行文件的工具,能夠在沒有 Python 解釋器的情況下運行。 Python 腳本轉換為 Windows、macOS 和 Linux 操作系統上的可執行文件。
把Python項目打包成exe非常簡單。
#安裝pyinstaller
pip install pyinstaller#打包
pyinstaller your_script.py
有時候為了恢復一部分源碼,我們將以前前編譯好的exe反編譯成py文件。
在反編譯前,我們要確定是Python編譯的 exe項目。
Exeinfo PE
Exeinfo PE 是一款查看 PE 文件信息的工具,可以查看 EXE/dll 文件的編譯器信息、是否加殼、入口點地址、輸出表/輸入表等等 PE 信息,幫助開發人員對程序進行分析和逆向。Exeinfo PE 還可以提取PE文件中的資源,可以提取圖片、EXE、壓縮包、MSI、SWF等等資源
使用類似的查殼工具可以查看程序是不是 pyinstaller 打包,確定是 pyinstaller 打包后就可以使用下面的方法進行反編譯了
打開軟件后直接將需要逆向的程序拉到軟件上即可
exe反編譯
拉取 pyinstxtractor.py
git clone https://github.com/countercept/python-exe-unpacker使用 Python 執行pyinstxtractor.py腳本,便可以對指定的 exe 程序進行反編譯。
python pyinstxtractor.py main.exe
編譯完成后同目錄下會出現一個xxx.exe_extracted的目錄,進入目錄后可以看到同 exe 程序名的一個文件。由于我們反編譯的 Python 版本與程序 Python 版本不同,導致反編譯出來的程序沒有攜帶 .pyc后綴,需要我們自己手動加上后綴,如下圖修改成main.pyc
修改后綴
給pyc文件添加文件頭
pyinstaller 打包后會去掉文件頭部的 magic number,此時反編譯出來的 pyc 文件都是缺少 magic number 值的,會導致后面我們將 pyc 文件反編譯為 py 文件時出現問題,需要我們手動補上缺失的部分。
這里使用WinHex20,WinHex20是一款非常知名的16進制編輯器軟件,使用該軟件能夠快速幫助用戶編輯二進制、十六進制、亂碼等文件,非常方便。
使用 WinHex20 打開 main.pyc文件。
打開“main.exe_extracted"文件夾下的PYZ-00.pyz_extracted文件夾,使用 WinHex20 隨便打開其中一個pyc文件,將其頭部復制到main.pyc的頭部。可以看到上面修改的頭部就是下面這里復制過去的。修改后記得保存文件!
使用pycdc反編譯pyc文件
在網上下載好pycdc之后,將修改后的main.pyc文件和pycdc.exe放在同目錄下
pycdc.exe main.pyc>main.py
等待執行成功之后在文件夾內會出現main.py
然后就可以使用編輯器閱讀了,但是可能會出現中文編碼錯誤的情況,如下:
原因:反編譯工具在還原時,有時不會自動將這些字節解碼回原始的 Unicode 字符串,而是直接以十六進制轉義序列的形式顯示出來。
大數據量的情況下直接讓ai寫個腳本處理替換一下就行!