python中exe文件解包方法詳解
技術(shù)背景
目前針對Python中主流的加密方案有以下幾種:
序號 | 工具 | 方法描述 | 優(yōu)缺點 |
---|---|---|---|
1 | Nuitka | .py 文件先被轉(zhuǎn)成了 .c 文件,然后被編譯成 .o 文件,最后合并成 .bin 可執(zhí)行文件,從 bin 到 C 是不可逆的,從 C 到 Python 也是不可逆的,因此代碼是安全的 | 工作量小,安全性高,使用加密之后的Python便捷;編譯時間長,過程復(fù)雜 |
2 | 發(fā)行.pyc文件 | 通過compileall模塊將.py文件轉(zhuǎn)為.pyc文件,該文件是二進(jìn)制,無法直接看源代碼,而python解釋器可以直接執(zhí)行.pyc文件 | 臺兼容性好,.py 能在哪里運行,.pyc 就能在哪里運行;解釋器兼容性差,.pyc 只能在特定版本的解釋器上運行。有現(xiàn)成的反編譯工具,破解成本低 |
3 | 代碼混淆(oxyry,pyobfuscate) | 讓人看不懂代碼,移除注釋和文檔,改變縮進(jìn),在tokens中間加入一定空格,重命名函數(shù)、類、變量,在空白行插入無效代碼 | 提高了一點源碼破解門檻。兼容性好,只要源碼邏輯能做到兼容,混淆代碼亦能;只能對單個文件混淆,無法做到多個互相有聯(lián)系的源碼文件的聯(lián)動混淆 |
4 | py2exe | 將源碼編譯為 .pyc 文件,加之必要的依賴文件,一起打包成一個可執(zhí)行文件。最終 py2exe 打包出的是二進(jìn)制文件。 | 直接打包成 exe,方便分發(fā)和執(zhí)行。破解門檻比 .pyc 更高一些;兼容性差,只能運行在 Windows 系統(tǒng)上。生成的可執(zhí)行文件內(nèi)的布局是明確、公開的,可以找到源碼對應(yīng)的 .pyc 文件,進(jìn)而反編譯出源碼。 |
5 | Cython | 將 .py/.pyx 編譯為 .c 文件,再將 .c 文件編譯為 .so(Unix) 或 .pyd(Windows) | 生成的二進(jìn)制 .so 或 .pyd 文件難以破解。同時帶來了性能提升;兼容性稍差,對于不同版本的操作系統(tǒng),可能需要重新編譯。雖然支持大多數(shù) Python 代碼,但如果一旦發(fā)現(xiàn)部分代碼不支持,完善成本較高。 |
6 | Pyinstaller | 打包為exe文件, | 將Python文件轉(zhuǎn)換為exe文件,以及dist文件夾和build文件夾,如果要移植到其他電腦上運行,也是只需要將這兩個文件夾復(fù)制到對方電腦上,即使對方?jīng)]有python環(huán)境,也可以運行程序,具有較好的兼容性;pyinstxtractor.py可以進(jìn)行反編譯 |
對于上述這些加密,在工作中,常見將一些Python寫的腳本、程序使用Pyinstaller打包為exe文件的居多,因為即使對方?jīng)]有python環(huán)境,也可以運行程序,具有較好的兼容性。
想要了解這些腳本、程序的邏輯、對其功能進(jìn)行分析,最好的方法是其進(jìn)行反編譯解包。
解包思路
1.對exe文件進(jìn)行解包
方法1:使用pyinstxtractor.py
執(zhí)行python pyinstxtractor.py <待解包文件名> ,如果成功,即可獲得<待解包文件名>_extracted 文件夾。
方法2:使用archive_viewer.py
執(zhí)行python archive_viewer.py <待解包文件名> ,會打印EXE文件中包含的所有文件信息
使用x <文件名>命令將想要提取出的文件提取出來,q 命令退出。
區(qū)別:
方法1 可以一次性提取出所有文件,方法2只能逐個提取文件。但是在個人使用時,同時執(zhí)行時會提示python版本問題,想要正常解包必須使用正確的python版本。
方法2 的成功率相對較高??梢韵葒L試用方法1,失敗后用方法2。
2.構(gòu)建pyc文件
從步驟1中獲得的文件是pyc文件,我們還需要進(jìn)一步反編譯獲得py文件。在將Python文件打包成exe文件的過程中,會抹去pyc文件前面的部分信息,所以我們在反編譯之前需要檢查并添加上這部分信息。抹去的信息內(nèi)容可以從struct文件中獲?。?/p>
可能會出現(xiàn)兩種情況:
情況一:struct 文件中, E3 前 有內(nèi)容:
這種情況將struct 文件中,E3 之前的 所有內(nèi)容,復(fù)制到目標(biāo)文件 E3 之前。
情況二:struct 文件中, E3 前 無內(nèi)容
遇到這種情況后,在前面步驟1中,找到PYZ-00.pyz_extracted文件夾中任意一個pyc文件,記住前面的4個字節(jié),在目標(biāo)文件第一行輸入前4個字節(jié),后續(xù)補(bǔ)0。
將目標(biāo)文件后綴名改為“.pyc”
3.對pyc文件進(jìn)行反編譯
安裝uncompyle6后,去dos界面,輸入uncompyle6 路徑+文件名.pyc > 文件名.py
沒有報錯就表示成功了。
其他問題
q1:提示PYZ文件加密
在解包exe過程中會提示會出現(xiàn)PYZ中的文件無法正常提取(archive_viewer.py),或者提取出來后顯示encrypted(pyinstxtractor.py)的問題
針對這個問題,可以使用上述方法,重新反編譯PYZ文件的加密密鑰pyimod00_crypto_key.pyc文件,就可以獲得秘鑰。
Pyinstxtractor不支持加密的pyz檔案。目前,可以使用下面的代碼片段來解密pyz提取目錄中的加密pyc。請注意,下面的腳本是為在Python 2.7上運行而編寫的,可以在PyInstaller之前的版本上運行
該腳本可以從任何Python版本反編譯加密的pyc。但是,您需要從下面的列表中適當(dāng)?shù)馗膒yc頭。具體的事項可以去訪問pyinstxtractor說明文檔:Frequently Asked Questions · extremecoders-re/pyinstxtractor Wiki · GitHub
總結(jié)
到此這篇關(guān)于python中exe文件解包方法的文章就介紹到這了,更多相關(guān)python exe文件解包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python3多進(jìn)程 multiprocessing 模塊實例詳解
這篇文章主要介紹了Python3多進(jìn)程 multiprocessing 模塊,結(jié)合實例形式詳細(xì)分析了Python3多進(jìn)程 multiprocessing 模塊的概念、原理、相關(guān)方法使用技巧與注意事項,需要的朋友可以參考下2018-06-06python如何實現(xiàn)質(zhì)數(shù)求和
這篇文章主要介紹了python如何實現(xiàn)質(zhì)數(shù)求和,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05filter使用python3代碼進(jìn)行迭代元素的實例詳解
在本篇文章里小編給大家整理了關(guān)于filter使用python3代碼進(jìn)行迭代元素的實例詳解內(nèi)容,有興趣的朋友們可以參考下。2020-12-12如何利用python批量提取txt文本中所需文本并寫入excel
最近幫人寫了幾個小程序,所以記錄下,下面這篇文章主要給大家介紹了關(guān)于如何利用python批量提取txt文本中所需文本并寫入excel的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07windows上徹底刪除jupyter notebook的實現(xiàn)
這篇文章主要介紹了windows上徹底刪除jupyter notebook的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04python實現(xiàn)websocket的客戶端壓力測試
這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)websocket的客戶端壓力測試,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-06-06