標籤:

對寫的python代碼進行加密有什麼好的實現方法?

對寫的python代碼進行加密有什麼好的實現方法


目前來看,由於Python解釋器是開源的,最有效而不像脫褲子放屁的辦法其實是,自己hack一下解釋器,對解釋器執行的源碼及生成位元組碼都做加密,啥加密方法都行,AES、DES都好,最好是個非對稱,還方便你控制許可權。

比較蛋疼的是自此以後你需要對所有用到的模塊也先給加密一遍,並且改動的總工作量還不算小。


拿cython編譯成c模塊


保護python代碼有這麼幾條路

1。源碼混淆

源碼混淆替換函數名,變數名為人眼難以正確處理的字元串。雖然人眼難以處理但它無法對抗文本編輯器的查找替換功能,寫個腳本進行字元串替換成本也很低。基本相當於0保護,只能算聊勝於無吧。

2。發布編譯過的pyc文件,然而很容易被反編譯,也是皇帝新裝。

3。修改位元組碼定義並且發布pyc,這樣你的代碼將無法在標準Python解釋器/VM上運行,標準的反編譯器也無法反編譯你的程序。代價是你需要自帶能夠支持你私有位元組碼定義Python解釋器/VM。

4。對按標準位元組碼定義生成的pyc文件進行位元組碼混淆,混淆後的程序可以欺騙反編譯器以及反彙編器,但仍然能夠被Python解釋器/VM正確執行。參見這篇文章http://blog.csdn.net/ir0nf1st/article/details/61650984


兩個較方便的方案可以把 python代碼加密, 一個是 pyinstaller 另一個是 Nuitka

1. 打包工具 PyInstaller &>3.2 新加入一個加密參數 --k ,用戶可自定義一個16位密鑰, 例:

python.exe pyinstaller.py --k=xxxxxxxxxxxxxxxx --clean xxx.py

關於這個功能,個人理解是加密後沒有密鑰第三方解不出pyc(pyo)文件 ,也就無從反編譯,當執行exe文件時,打包工具將加密的位元組碼送入內存解密運行.

但是pyinstaller所用加密模塊是開源的PyCrypto,理論上高手還是能想辦法的,不過聊勝於無,就算是c程序只要花時間也能被反彙編,pyinstaller這個新參數可以加大破譯難度,增加破解成本

詳見官方文檔

Using PyInstaller

--key The key used to encrypt Python bytecode

Encrypting Python Bytecode

2. 關於 Nuitka, 是把 python代碼轉成c++代碼然後靜態編譯成二進位文件,比第一種方案稍麻煩一點,但據說可以提升執行速度

Nuitka Home | Nuitka Home


定製虛擬機

然後直接改位元組碼索引


推薦閱讀:

如何看待「Python星人」這個群體?
Python基本語法學完了,接下來不知道要幹什麼?
python在不用框架的情況下如何寫網站後台?
如何使用Python實現多進程編程?
現在學完Python的就業形勢怎麼樣?

TAG:Python開發 |