python如何通過pyarmor庫保護源代碼
pyarmor
介紹
python是解釋型語言,因此,代碼不需要編譯,而是通過明文提供的。在這種情況下,假如你發(fā)布了一個軟件,那么,只能將源代碼提供給使用者,這樣就造成了源代碼泄露。
使用pyinstaller打包可以一定程度上,減少源代碼的泄露,但是,pyinstaller本身并不具備很強的安全性,可以被攻擊者逆向,并且如果這樣做,會導致軟件的體積增大,運行速度降低。因此,pyinstaller并總是能夠有效的保護源代碼。如果你還不了解pyinstaller的使用,可以看看之前的文章,pyinstaller的使用
pyarmor是一款用于加密和保護python腳本的工具,可以用于防止源代碼泄露。
同樣的,pyarmor可以通過pip進行安裝:pip install pyarmor
參考資料
源代碼加密
加密運行程序
假如,我們已經(jīng)有一個main.py的文件,并且安裝了pyarmor,此時,使用命令:
# gen可以簡寫成g # 也可以全寫成generate pyarmor gen main.py
在這個情況下,生成了一個新的dist目錄:
包括了一份加密后的main.py,以及一份運行所需的輔助包
打開新生成的main.py,會發(fā)現(xiàn),其中的內(nèi)容無法被看懂,甚至其在做什么事情,也無從得知。
from pyarmor_runtime_000000 import __pyarmor__ __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x0c\x00\xcb\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x007\x02\x00\x00\x12\t\x04\x00bh\x8a9\xca\xabK\x97\xae#T\xb8(\xb21\xa4\x00\x00\x00\x00\x00\x00\x00\x00ez#z1\xfd\x905\xe0}\x0bE,\x93\\k~x\x8e\xba\xda\xe6\xfa\x87%\x8an\xab]\xd1\xab\xc2jTsEd\x99\xfdJ\x8b\xc5\x94$8?s\x07\x0e\xa0\x1cF\xed\xc2\x0fh\xf9J\xfdS\x89l\xc5Jbt\xa8\x07\xa6\x8bV\xcbc\xe1)\xd0\x9e5\xe0\x96W\xddj\x02\x81\xc2d\xaa\xc9(m\x96Q{\x94Q\x80x:\x15\x87\x90\x07w\x9e\x9d~63Z\xa9*\xbdi\x83\xcf\x16,\x16&\x8a@\xdf\xd7\xe3a\x82\xb0\x850Kjq*\xd5|r\x0e)b@\xce\xd7^\x14b\x19\xf1\x13\xa6-\x8a\xb2+\x150\x87g/E\xb3\x1dl\xa40\xbd\x81Q"IK[)\xca\x9cw\x8cO\x08Z\xec\x8c\x0bp\x9f\xfd\xb3D\xa1\x00ew\xbe\xd5\xd0\xb6\xf0\xe8\xb4\xc3\x03\\\x1b\xa7\x88\x00\xf8\xe9jp@7\xe8\x13\xca\xc7\x9b\x94\x8e\x13\xc0\xa3rx\xd4,\xee\x83N\\\x821zp%\xe3\x11-_\xf3\xa8H\xc0\x01\x8d\xfa,\x13\x12dE\xdd\xde\x1d\x84n\xb8\x1c\x0b\xc8\xc6\x064\x1d\xeaQ\xba\xfa";\xa9m\xb9\x07\x8d\xe3\xab\xd8\x9a\xd2\x02>\x81\x8b\x8a\xd4\x16\xefU\x7f *\xe4\xe1a{1p\x02\xaa\xa0\xbb\x84sE\xf1\x07\xdej@2[\\n\xc0\x1d\x81\xc5\xda\x91=\xf14z\x04Nh\xc9\x13\x81>\x00\x17"yF\xb3W\x10\xb5\xe3\x19\xb78\xd2\x8b0\x86\xed\x9e\x16\xa0\xca\x89s\xdf\x85\xfd0\t\x9b\xbd\xfb\x05\xb9\x9e\xd3Ec-\xbf\x11\x1e\x17\x7f\x1b\xee\xe2\xf5\xa3\xa7>\x96\xden\x18\x94\xfc\xdcF\xebmR4q\xe4\xce\x88:\xc8?\x02\x92i0bc\xfcmS\xda\x97t\x02G\xb9h\x01L\xb2c:g\x98\xcf\x87`\xcbb\xe2 \x98`\x8a?\x93\x13\xc9\xff.\xcd\xfeiHJ\xc9{\xbcm\xa4k8Q\x7f\xc8\x0b\xcfo\xf4B\x99"\xc07\xf7\xd2\x0c\xba\xa5\xe9\xa4\xd9\xf0\xe22\x95-V\xb4Y\xc1H\x10]`\x93c\x13\xae\xac\xb2\xcf\xa1\xf0\x99\x07\xe8\xd8\xf8\x11K\x14\xe8\xfc\x9b\x9dR\xb6hY\xb0\xcf\xe9\x00\xf5\xb6%6X\x8fd\x95\xb5U\x07$#A\xc4u\x98\x96j\xc7\xe3jS\x8b\xf02&\x8a=\xc9\rs\xdd\x96\xbb\xdc?\xd2d\x91g\xbd4\x87tU\xeb\xc8>\n\xdb\xf4\x15')
但是,該文件可以被正確的運行(需要搭配輔助包),就像運行普通的代碼那樣:python main.py
加密包含依賴程序
一些程序并非全部都是python代碼組成的,比如說,可能包括數(shù)據(jù)庫文件,模板文件等。
直接對數(shù)據(jù)庫,模板文件進行加密是不可行的,會導致文件無法讀取,因此,必須單獨保留這些文件。
在這種情況下,可以只加密python部分,然后自行移動所需的依賴文件。
加密python包
假如,我有一個python包,其中包括了多個文件,此時,可以加密整個python包。
pyarmor gen -O 輸出目錄 待加密包目錄
同樣的,此時得到了一個加密以后的python包,以及一個輔助包。在分發(fā)加密包時,需將輔助包與加密后的包一起提供,這是必要的。
你可以添加輔助包的前綴,以防止輔助包名字沖突。
pyarmor gen -O --prefix sagegrass_pkg1 輸出目錄 待加密包目錄
設(shè)置有效期
按時間設(shè)置有效期
通過pyarmor加密的腳本,可以設(shè)置有效期。
設(shè)定具體的過期日期
pyarmor gen -e 2024-12-31 main.py
如果超過了時間限制,可能提示:RuntimeError: this license key is expired,無法運行程序。
綁定設(shè)備
通過pyarmor加密的腳本,可以綁定到硬盤序列號,網(wǎng)卡mac地址,以及ip地址上,來精確指定哪個設(shè)備可以使用。
首先,我們需要查詢目標設(shè)備的設(shè)備信息:
python -m pyarmor.cli.hdinfo
根據(jù)得到信息,進行指定:
pyarmor gen -b 設(shè)備信息 main.py
如果設(shè)備信息不符,可能提示:RuntimeError: this license key is not for this machine,無法運行程序。
P.S. 英文單詞armor的意思是盔甲。
到此這篇關(guān)于python如何通過pyarmor庫保護源代碼的文章就介紹到這了,更多相關(guān)python pyarmor保護源代碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
升級keras解決load_weights()中的未定義skip_mismatch關(guān)鍵字問題
這篇文章主要介紹了升級keras解決load_weights()中的未定義skip_mismatch關(guān)鍵字問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06Python 對象序列化與反序列化之pickle json詳細解析
我們知道在Python中,一切皆為對象,實例是對象,類是對象,元類也是對象。本文正是要聊聊如何將這些對象有效地保存起來,以供后續(xù)使用2021-09-09pycharm不在cmd中運行卻在python控制臺運行問題解決
這篇文章主要介紹了pycharm不在cmd中運行卻在python控制臺運行問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08Python中playwright啟動瀏覽器與常見運行方式詳解
Playwright是一個功能強大的工具,可以幫助開發(fā)人員自動化測試、網(wǎng)頁截圖、信息提取等任務(wù),本文主要介紹了如何使用Playwright來啟動瀏覽器,感興趣的可以了解下2024-05-05python?動態(tài)導入模塊實現(xiàn)模塊熱更新的方法
這篇文章主要介紹了python?動態(tài)導入模塊,實現(xiàn)模塊熱更新,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08Python實現(xiàn)批量合并多個txt文件并生成Excel文件
在數(shù)據(jù)處理中,有時會面臨合并多個文本文件的任務(wù),本文將詳細介紹如何使用Python批量合并多個txt文件,并將其生成為一個Excel文件,需要的可以參考下2023-12-12pygame實現(xiàn)俄羅斯方塊游戲(基礎(chǔ)篇2)
這篇文章主要為大家介紹了pygame實現(xiàn)俄羅斯方塊游戲基礎(chǔ)的第2篇,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-10-10Python中函數(shù)參數(shù)調(diào)用方式分析
這篇文章主要介紹了Python中函數(shù)參數(shù)調(diào)用方式,結(jié)合實例形式分析了Python函數(shù)參數(shù)定義與使用的四種常見操作方法,需要的朋友可以參考下2018-08-08