Python代码编译和反编译exe执行文件
最近公司搞了個項目,用Python寫的,寫完之后打包成exe,需要進行加密,防止反編譯,在知乎看到廖雪峰老師的一個觀點,覺得很有意思。
但是領導安排的事情也不能不去做,從網上找了一天,把看到的方法總結一下。一般的破解方式是:拿到exe應用程序之后,用pyinstxtractor程序進行破擊。大家可以自己從網上下載這個程序,下載完之后,把exe應用程序和pyinstxtractor放在同一目錄下,如下圖所示:
然后執行命令:python pyinstxtractor.py xxx.exe (xxx是你的應用程序名字,我的是main)。執行完之后會生成一個文件夾,xxxx_extracted,從里面找到你的代碼文件,只不過后綴變成了.pyc。我這個是main.pyc.這個pyc文件拿在線編譯工具(https://tool.lu/pyc)就可以把代碼給編譯出來。所以我們的目標變成了在別人拿到exe應用程序之后,不讓他生成這個pyc文件就可以了。
我從網上看到的有兩種方式:一個是在用pyinstaller打包的時候,加上--key這個參數,pyinstaller --key 123456789 -F -w xx.py。123456789就是你的密鑰。后面用pyinstxtractor解密的時候,生成的文件就不是pyc了。但是看網友說生成的文件中帶有這個密鑰,所以其實這種方式是不安全的。
第二種方式參考https://blog.csdn.net/ZhaDeNianQu/article/details/87717293。里面講述的很清楚。根據鏈接中的教程打包完畢后,雙擊運行exe文件,遇見了兩個問題:
問題1:
**問題:**提示ImportError: Module use of python37.dll conflicts with this version of Python
原因: 我電腦安裝了好幾個版本的python,當時運行pthon build_pyd.pyd build_ext --inplace的時候系統默認了使用py3.7進行編譯,而項目環境是py3.10,所以出現了沖突。
解決方法:py -3.10 build_pyd.py build_ext --inplace 指定使用3.10版本的python運行此語句即可。
問題2:
解決了問題之后,當我再次運行exe文件時候,又報錯了。
**問題:**報錯信息是:‘no module name 'xxx'’。
**原因:**但是明明之前直接運行main.py程序的時候不缺少庫,后來找了很多方法,發現是因為我的main.py程序里沒有把導入其他py文件中用到的庫。
**解決方案:**只要是其他py文件中用到的庫,即使main.py中沒有用到這個庫,也要在main.py中import這個庫。
batchFile.py、other.py、qlyq.py、sms.py和zy.py中import的庫也要在main.py中導入。
解決完這兩個問題后,重新運行pyinstaller -F -w main.py生成的exe文件就可以正常運行了。
參考鏈接:
https://blog.csdn.net/ZhaDeNianQu/article/details/87717293
http://155.138.230.158/article/Jjokerr12/125601584
總結
以上是生活随笔為你收集整理的Python代码编译和反编译exe执行文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker - 重新启动关闭的容器
- 下一篇: AST还原功能说明文档