pyinstxtractor、venv與pyenv的淺淺認識

Un1corn發表於2024-07-10

pyinstxtractor

1、win下使用
python3 path/pyinstxtractor.py path/name.exe
2、注意exe檔案是用什麼版本的python打包的,如果版本不對應可能會導致PYZ-00.pyz_extracted資料夾為空的情況.此資料夾PYZ-00.pyz_extracted非常重要,一般一個稍微大一點的專案都會分成多個py檔案,甚至會依賴其他模組,這些被依賴的檔案解析後都會放入PYZ-00.pyz_extracted中,可以說這裡放的是核心程式碼。
至於如何確定python的版本,可以將exe拖到010裡面,搜尋python,翻一翻便可以看到python38.dll或者python37.dll等等(只針對pyinstxtractor 2.1).
img
3、對於pyinstaller反編譯的混淆,pyinstxtractor使用報錯Error : Unsupported pyinstaller version or not a pyinstaller archive,參考文章:https://www.cnblogs.com/czlnb/p/15118864.html
翻閱pyinstxtractor.py的原始碼,搜尋對應報錯位置,分析
img
向下查詢return True的位置
img
可以看到,此處要在self.fPtr.read(64).lower()中判斷b'python'是否存在,向上看看,這個奇怪的資料區是什麼意思
img
可以看出pyinstxtractor2.0的MAGIC(b'MEI\014\013\012\013\016')是在檔案尾向上24位.可以看出pyinstxtractor2.1的MAGIC(b'MEI\014\013\012\013\016')是在檔案尾向上24+64位
img
箭頭所指位置到結尾剛好有88位元組.
對於如何區分2.1與2.0,如果是2.1會找到python37.dll等等,2.0則找不到.原因:與2.0相比,2.1多了64位元組的pylibname,那我們就看看該檔案裡存不存在pylibname進行判斷.

venv###

官方文件:https://docs.python.org/zh-cn/3/library/venv.html
此工具比較適合同一環境,不同專案的情況
安裝 virtualenv:
python -m pip install virtualenv
建立虛擬環境:
python -m venv path/myenv
啟動:
myenv\Scripts\activate
關閉:
deactivate

pyenv

下載地址:https://github.com/pyenv/pyenv

py.exe

py.exe為python自帶的切換python版本執行script的程式
檢視當前可用版本
py -0
執行目標版本
py -x.x
以目標版本執行script
py -x.x name.py

相關文章