您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關反編譯pyinstaller產生的可執行文件是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
在一次計算中使用別人發布的由python編寫然后編譯打包的二進制程序進行操作時,總是報錯”缺少鏈ID”,但檢查pdb文件已經添加了鏈ID。
為查明報錯原因,對此二進制可執行文件進行了反編譯。下面記錄了操作過程:
python是解釋型語言,故python編譯打包成的可執行文件很容易被反編譯,而像C,C++這樣的編譯型語言得到的可執行文件,則較難被反編譯。
反編譯pyinstaller 產生的可執行文件,可以分為兩個步驟,一是由可執行文件獲取pyc(pyo)文件,二是由pyc(pyo)文件得到py文件。
在Linux上運行pyintaller打包的可執行文件時,它會將打包好的文件解壓到臨時文件夾(/tmp
)中的_MEIxxxxxx
路徑中暫時存放,執行完畢之后再刪除,所以會存在解壓縮的時間。然而這個_MEIxxxxxx
路徑中主要是.so
文件,并不含有源碼。
但是pyinstaller自帶腳本archive_viewer.py
,可以由可執行文件解壓得到pyc
文件:
1 | python archive_viewer.py exefilename |
一共有四個可用命令:
1 2 3 4 | U: go Up one level O <name>: open embedded archive name X <name>: extract name Q: quit |
列表中有兩個部分需要關注,一個是out00-PYZ.pyz
,其中包含主程序引用到的所有庫;一個是主程序對應的文件名,其中會包含主程序。
比如,一個顯示天氣的程序,其主程序名稱為show.py
,其中調用了calc.py
,則需要
1 2 | x show 提取到 show.pyc o out00-PYZ.pyz 然后查看調用的庫,然后 x calc 提取到 calc.pyc |
這樣我們就得到了show.pyc
和calc.pyc
方法比較多,比如
在線程序,比如python反編譯,在線pyc反編譯等
uncompyle6,是python腳本,故而可以批量運行,使用方法為 uncompyle6 file.pyc
easypythondecompiler等
pyinstaller編譯成pyc時,會把pyc的magic value
去掉,如果使用easypythondecompiler
的話,需要再把magic value
補上(使用 010 Editor 編輯器)。magic value
一共8個字節,前四個對應于編譯時所用python的版本,后四個對應于編譯時間,比如python2.7 的03 f3 0d 0a 01 23 45 67
,python3.4 的ee 0c 0d 0a 01 23 45 67
.如果不知道編譯時所用的python版本,可以通過一個trick來尋找:在可執行文件包含的前幾個文件對應的pyc文件(比如 pyimod01_os_path
)中,前4個字節已經存在。
如此,便可反編譯出show.py
和calc.py
等文件。
看完上述內容,你們對反編譯pyinstaller產生的可執行文件是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。