因?yàn)閜ython是解釋型語言,所以反編譯的難度相對(duì)于其他編譯型的語言低了很多
總的來說,反編譯分為兩步:
1、將.exe反編譯成.pyc的二進(jìn)制文件
2、將.pyc文件反編譯成.py文件
接下來具體說一下步驟:
一、將.exe反編譯成.pyc的二進(jìn)制文件
1、獲取archive_viewer.py文件
這個(gè)文件在pyinstaller庫里,還沒有安裝的需要安裝一下(已經(jīng)安裝的跳過安裝)
pip install pyinstaller
安裝完成后在python安裝路徑下的\Lib\site-packages文件夾搜索archive_viewer.py文件
搜索文件
找到文件后可以復(fù)制到你想要放置的位置(不復(fù)制也行)
2、反編譯出archive_viewer.pyc文件
python archive_viewer.py your_app.exe
這一步會(huì)把編譯出的文件都羅列出來,像這樣
image.png
但是我們只需要找到我們exe對(duì)應(yīng)的名字的文件就好了,確認(rèn)存在之后滑到最下面,會(huì)發(fā)現(xiàn)有個(gè)?號(hào)用于輸入接下來的命令,在這邊我們輸入
x your_app(your_app是exe文件的文件名,不帶.exe后綴)
會(huì)顯示 to filename?
讓你輸入需要輸出的pyc文件名稱,這邊輸入 your_app.pyc
回車就好了
接下來又會(huì)顯示?號(hào),接著輸入x struct
回車,輸入struct文件名稱struct
回車
3、修改pyc文件前面字節(jié)
由于用PyInstaller打包后,pyc文件的前8個(gè)字節(jié)會(huì)被抹掉,所以最后要自己添加回去。前四個(gè)字節(jié)為python編譯的版本,后四個(gè)字節(jié)為時(shí)間戳。
這邊使用Hex Editor Neo軟件同時(shí)打開.pyc文件和struct文件,復(fù)制struct文件前面8個(gè)字節(jié)插入到.pyc文件的前面:
1)復(fù)制struct文件前8個(gè)字節(jié)
image.png
2)在pyc文件中右鍵選擇insert模式
3)選中第一個(gè)字節(jié),輸入八個(gè)空字節(jié)00
4)選中插入的前八個(gè)字節(jié),右擊粘貼
5)保存pyc文件
這樣我們就得到了完整的pyc文件
4、使用uncompyle 反編譯出py文件
安裝uncompyle庫
pip install uncompyle6
反編譯
uncompyle6 your_app.pyc > your_app.py