Python程序編譯與反編譯問題
前言
Python 通過pyinstaller 打包編譯成exe可執(zhí)行文件 ,反編譯exe文件。
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、通過 pyinstaller 打包
雖然python是跨平臺(tái)的一門開發(fā)語言,但是有時(shí)候在沒安裝python環(huán)境的計(jì)算機(jī)中仍然不能運(yùn)行python程序。因此,就少不了編譯打包的工序,其中用的最多且最簡單的就是pyinstaller了
附上官網(wǎng)鏈接: pyinstaller文檔
1.安裝pyinstaller
# 通過pip 安裝pyinstaller 第三方模塊 pip install pyinstaller 或 # 網(wǎng)速不行的話,可以考慮國內(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文件
筆者親試,
失??!python3.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é)尾文件夾,筆者推測,都是我們主程序中import 的各種文件,因此也會(huì)有很多官方的第三方庫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 第三方庫實(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)猜數(shù)游戲(保存游戲記錄)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)猜數(shù)游戲,保存游戲記錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
Python實(shí)戰(zhàn)之異步獲取中國天氣信息
這篇文章主要介紹了如何利用Python爬蟲異步獲取天氣信息,用的API是中國天氣網(wǎng)。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手試一試2022-03-03
Python實(shí)現(xiàn)微信公眾平臺(tái)自定義菜單實(shí)例
這篇文章主要介紹了Python實(shí)現(xiàn)微信公眾平臺(tái)自定義菜單實(shí)例,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-03-03
Python實(shí)現(xiàn)數(shù)據(jù)庫表的監(jiān)控警告的項(xiàng)目實(shí)踐
本文主要介紹了使用Python 實(shí)現(xiàn)對(duì)數(shù)據(jù)庫表的監(jiān)控告警功能, 并將告警信息通過釘釘機(jī)器人發(fā)送到釘釘群,具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05
探究數(shù)組排序提升Python程序的循環(huán)的運(yùn)行效率的原因
這篇文章主要介紹了探究數(shù)組排序提升Python程序的循環(huán)的運(yùn)行效率的原因,作者用代碼實(shí)踐了多個(gè)小片段來進(jìn)行對(duì)比解釋,需要的朋友可以參考下2015-04-04
Python獲取接口數(shù)據(jù)的實(shí)現(xiàn)示例
本文主要介紹了Python獲取接口數(shù)據(jù)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07

