一日一技:如何正確保護Python代碼
去年我寫過一篇文章《一日一技:如何對Python代碼進行混淆》介紹過一個混淆Python代碼的工具,叫做pyminifier,這個東西混淆出來的代碼,咋看起來有模有樣,但仔細一看,本質上就是變量名替換而已,只要耐下心來就能看懂,如下圖所示:
圖片
而我今天要介紹另一個工具,叫做pyarmor。pyminifier跟它比起來,就跟玩具一樣。
pyarmor使用pip就可以安裝:pip install pyarmor。pyarmor是一個收費工具,但免費也能使用。免費版有絕大部分功能,加密小的腳本足夠了。
我們今天要測試的腳本如下圖所示:
圖片
運行以后如下圖所示:
圖片
現在,執行命令pyarmor g json_path_finder.py。對這個腳本進行加密,會在dist文件夾中生成加密后的文件,如下圖所示:
圖片
加密后的文件打開以后長這樣:
圖片
這個代碼,人已經完全沒法看懂了。雖然代碼看不懂,但可以正常運行,如下圖所示:
圖片
需要注意的是,pyarmor會生成一個二進制文件pyarmor_runtime_000000。這個文件需要和加密后的程序放在一起,才能正常使用。
如果僅僅是這樣,那pyarmor只能算是一個加強版的pyminifier。而它更強大的地方是,可以設置程序的過期時間。執行代碼:
pyarmor g -e 30 json_path_finder.py
設定程序30天以后過期。
也可以使用絕對日期:
pyarmor g -e 2024-08-30 json_path_finder.py
當時間過了以后,運行加密后的程序,會報錯:
圖片
并且可以通過一個參數確保這個過期時間跟電腦時間無關,而是從一個授時服務器上面的時間來判斷:
pyarmor cfg nts=pool.ntp.org
pyarmor g -e 2024-08-30 json_path_finder.py
如下圖所示:
圖片
不僅可以設定過期時間,還可以綁定電腦的mac地址,這樣一來,只有特定的電腦才能運行:
pyarmor g -b <mac地址> json_path_finder.py
除了mac地址,也可以綁定IP地址、電腦序列號,如下圖所示:
pyarmor g -b 128.16.4.10 foo.py
pyarmor g -b HXS2000CN2A foo.py
有了這個工具,以后做私活時,就不用擔心用戶拿到代碼以后跑路了。還可以讓用戶定期付費。
pyarmor非常強大,可以在官方文檔中看到更多用法,比如對一個package進行加密。