Python代码加密混淆
python作為一種解釋型語言,源代碼加密本身比較困難。但有時(shí)候我們?cè)诎l(fā)布一款python產(chǎn)品時(shí)又必須考慮到代碼的加密性,以避免源代碼泄露。為此,我查閱了一些資料,研究了幾種python代碼加密的常見方式,在此記錄一下。
源代碼加密
(一)py腳本編譯成pyc二進(jìn)制文件
編譯命令:
python -m py_compile file.pypyc文件是一個(gè)二進(jìn)制文件,但是可以被很輕松的被逆向,在線反編譯工具:https://tool.lu/pyc/。當(dāng)然也有針對(duì)這個(gè)問題的解決方案,解決方案是可以通過修改python源代碼中的opcode,然后重新編譯py代碼,可以一定程度上防止被逆向,因?yàn)槟嫦蛘咝枰辣恍薷牡膐pcode才能還原出來。如果使用私有的Bytecode指令集,那么通常的Python反匯編器和反編譯器無法工作在由你私有Python編譯器產(chǎn)生的pyc文件上,也相當(dāng)于保護(hù)了你的Python代碼。但是這么做的代價(jià)是你的Python應(yīng)用只能在你的私有Python解釋器上運(yùn)行。(實(shí)際在發(fā)布一款產(chǎn)品時(shí),并不適用)
(二)py腳本打包成exe文件
exe文件針對(duì)windows平臺(tái)使用,一般是使用打包程序(py2exe、PyInstaller等)打包成exe,這些工具用于將一個(gè)Python項(xiàng)目打包成單個(gè)可執(zhí)行的文件,方便(在沒有Python環(huán)境的機(jī)器上)使用。但通過壓縮包可以方便地得到所有pyc文件或源文件,與C/C++編譯生成的可執(zhí)行文件有本質(zhì)上的區(qū)別,基本上是零保護(hù),所以需要將exe進(jìn)行加殼操作。
(三)py腳本編譯成c文件(cython)
用cython將核心代碼py模塊文件轉(zhuǎn)化成.c文件,再用gcc編譯成so(unix)文件,或者將其編譯成pyd(windows)文件。
編譯過程:
1、服務(wù)器安裝依賴
pip install python yum install python-devel gcc2、編寫setup.py文件,內(nèi)容如下:
from distutils.core import setup from Cython.Build import cythonize setup( ext_modules = cythonize("test.py",language_level=2) ) # 批量編譯 setup( ext_modules = cythonize(["test.py","test2.py".......],language_level=2) )3、運(yùn)行以下命令
python setup.py build_ext —inplace會(huì)生成一個(gè)test.so,刪除其余文件,直接引用test.so即可(跟引用py文件一樣)
源代碼混淆
除了加密以外,還可以對(duì)源代碼進(jìn)行混淆,增加源代碼的閱讀難度。這個(gè)有很多第三方庫,我列舉幾個(gè):
https://pypi.org/project/pyminifier/
https://github.com/astrand/pyobfuscate
http://pyob.oxyry.com/
pyminifier庫用法:
----------------------------------------------------- 注:我這有個(gè)學(xué)習(xí)基地,里面有很多學(xué)習(xí)資料,感興趣的+Q群:895817687 -----------------------------------------------------pyminifier -O test.py >> test_py.py pyminifier --replacement-length=1 --obfuscate-builtins --obfuscate-import-methods --obfuscate-variables test.py總結(jié)
以上是生活随笔為你收集整理的Python代码加密混淆的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python多线程和队列结合demo
- 下一篇: Python 开发植物大战僵尸游戏