Python程序編譯與反編譯問題
前言
Python 通過pyinstaller 打包編譯成exe可執(zhí)行文件 ,反編譯exe文件。
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、通過 pyinstaller 打包
雖然python是跨平臺(tái)的一門開發(fā)語言,但是有時(shí)候在沒安裝python環(huán)境的計(jì)算機(jī)中仍然不能運(yùn)行python程序。因此,就少不了編譯打包的工序,其中用的最多且最簡(jiǎn)單的就是pyinstaller了
附上官網(wǎng)鏈接: pyinstaller文檔
1.安裝pyinstaller
# 通過pip 安裝pyinstaller 第三方模塊 pip install pyinstaller 或 # 網(wǎng)速不行的話,可以考慮國(guó)內(nèi)源,這里以清華源為例 pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple
2. 開始打包
初始代碼,之前做數(shù)據(jù)采集的腳本。
主要用到三個(gè)自定義文件,
- main.py, 主函數(shù)文件
- batchSolution.py, 數(shù)據(jù)清洗文件
- getCookiesBySelenium.py 獲取授權(quán)cookies文件
# 在相關(guān)路徑下,命令行輸入 ,-F 生成一個(gè)exe繼承文件,其他相關(guān)參數(shù)作用,請(qǐng)去官方文檔研究 pyinstaller -F main.py
之后在該路徑下會(huì)生成相關(guān)文件夾,其中main.exe文件會(huì)存在dist文件夾中。
如果打包過程沒有中斷報(bào)錯(cuò),該文件可以運(yùn)行在無python環(huán)境的windows計(jì)算機(jī)中。如果有報(bào)錯(cuò),谷歌搜索基本都可以解決,遇到過幾次,循環(huán)迭代太大,多進(jìn)程程序打包后只能單進(jìn)程執(zhí)行等問題。
二、反編譯Pyinstaller 打包的exe程序
1. 通過 pyinstxtractor.py 把exe 轉(zhuǎn) pyc文件
pyinstxtractor.py 是一個(gè)用于反編譯pyinstaller 所打包exe的文件工具,在開源社區(qū)可以找到下載鏈接。
通過命令行執(zhí)行相關(guān)命令,完成反編譯成pyc文件
# 通過命令行 python .\pyinstxtractor.py .\main.exe
其中要注意:建議用相同版本的python執(zhí)行操作!官方也這樣建議!
python3.7.6 打包的exe文件
筆者親試,
失?。ython3.6.8 運(yùn)行命令行反編譯,有個(gè)import 的自定義文件沒生成成功。
失??!python3.8 運(yùn)行命令行反編譯,可以完美還原三個(gè)pyc文件,但是后續(xù)pyc轉(zhuǎn)py還是有問題。
最后,還是在python3.7.6 運(yùn)行命令行反編譯,相對(duì)就一路綠燈!
2. 找到相關(guān)pyc文件
運(yùn)行上面腳本命令后,會(huì)在相應(yīng)目錄生成很多相關(guān)文件,我們只關(guān)注extracted結(jié)尾文件夾即可,注意可能不止一層,筆者這邊是兩層,即extracted結(jié)尾文件夾里面又有一個(gè)extracted結(jié)尾文件夾。
extracted結(jié)尾文件夾,筆者推測(cè),都是我們主程序中import 的各種文件,因此也會(huì)有很多官方的第三方庫(kù)pyc文件。
因此只能從筆者習(xí)慣寫的main.py 編譯的main.pyc文件開始分析,哪些是我們自定義的文件。
3. 把相關(guān)pyc文件轉(zhuǎn)py
通過在線 pyc 轉(zhuǎn) py 的一些工具網(wǎng)站,可以實(shí)現(xiàn)源碼復(fù)現(xiàn)
http://tools.bugscaner.com/decompyle/
https://tool.lu/pyc/
當(dāng)然也可以通過 uncompyle6 第三方庫(kù)實(shí)現(xiàn)復(fù)現(xiàn),筆者自定義文件較少,用了在線轉(zhuǎn)換工具實(shí)現(xiàn)復(fù)現(xiàn)main.py 文件。
- 通過復(fù)現(xiàn)后的main.py 文件,即可找到相應(yīng)import的自定義文件,以及程序?qū)氲牡谌桨?/li>
- 注意要去所有的extracted結(jié)尾文件夾查找,筆者是在第二層內(nèi)找到相關(guān)文件的。
最后把相應(yīng)的自定義文件拷貝下來,逐一復(fù)現(xiàn)即可。
源程序就成功還原了!當(dāng)然程序內(nèi)的中文編碼可能會(huì)出現(xiàn)亂碼,以及程序小部分復(fù)現(xiàn)問題,會(huì)代碼的可以很快解決。
三、總結(jié)
在于版本問題,導(dǎo)致反編譯中途試錯(cuò)多次
很難區(qū)分自定義文件pyc和官方文件pyc,因?yàn)楣P者有個(gè)人習(xí)慣會(huì)設(shè)置main.py為入口程序才有思路
pyinstaller 打包的時(shí)候,沒加密,對(duì)于一些隱私程序也是相對(duì)不夠安全的。官方提供了加密參數(shù),以及相關(guān)論壇也給了很多個(gè)性化加密方式,后續(xù)可以繼續(xù)學(xué)習(xí)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python實(shí)現(xiàn)自動(dòng)清理電腦垃圾文件詳解
經(jīng)常存在在我們的電腦中的垃圾文件主要是指系統(tǒng)在運(yùn)行過程中產(chǎn)生的tmp臨時(shí)文件、日志文件、臨時(shí)備份文件等。本文將利用Python實(shí)現(xiàn)自動(dòng)清理這些垃圾文件,需要的可以參考一下2022-03-03如何基于Python實(shí)現(xiàn)電子郵件的發(fā)送
這篇文章主要介紹了如何基于Python實(shí)現(xiàn)電子郵件的發(fā)送,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12基于Django的樂觀鎖與悲觀鎖解決訂單并發(fā)問題詳解
這篇文章主要介紹了基于Django的樂觀鎖與悲觀鎖解決訂單并發(fā)問題詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07Python實(shí)現(xiàn)遠(yuǎn)程調(diào)用MetaSploit的方法
這篇文章主要介紹了Python實(shí)現(xiàn)遠(yuǎn)程調(diào)用MetaSploit的方法,是很有借鑒價(jià)值的一個(gè)技巧,需要的朋友可以參考下2014-08-08Python 將RGB圖像轉(zhuǎn)換為Pytho灰度圖像的實(shí)例
下面小編就為大家?guī)硪黄狿ython 將RGB圖像轉(zhuǎn)換為Pytho灰度圖像的實(shí)例。具有很好的參考價(jià)值。希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-11-11Python使用enumerate獲取迭代元素下標(biāo)
這篇文章主要介紹了python使用enumerate獲取迭代元素下標(biāo),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02Python如何把不同類型數(shù)據(jù)的json序列化
這篇文章主要介紹了Python如何把不同類型數(shù)據(jù)的json序列化,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-04-04簡(jiǎn)單講解Python中的字符串與字符串的輸入輸出
這篇文章主要介紹了Python中的字符串與字符串的輸入輸出,Python3.x版本中默認(rèn)以Unicode為編碼,省去了不少麻煩,需要的朋友可以參考下2016-03-03python自動(dòng)化測(cè)試用例全對(duì)偶組合與全覆蓋組合比較
這篇文章主要為大家介紹了python自動(dòng)化測(cè)試用例全對(duì)偶組合與全覆蓋組合比較,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Python爬蟲實(shí)現(xiàn)vip電影下載的示例代碼
這篇文章主要介紹了Python爬蟲實(shí)現(xiàn)vip電影下載的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04