Python加密腳本的通用方案介紹
最近想要解決關(guān)于python源碼加密的問(wèn)題暇番,相信這也是許多公司的共性問(wèn)題霜定。簡(jiǎn)單地說(shuō)就是好多測(cè)試運(yùn)維腳本中直接編寫了連接各種服務(wù)器的代碼(包括應(yīng)用服務(wù)器档悠,數(shù)據(jù)庫(kù)服務(wù)器等等),這是非常不安全的做法望浩!看了一下辖所,目前網(wǎng)上大概的解決方案如下:
1.把.py文件轉(zhuǎn)換為.pyc文件(比較容易破解)
2.將.py編譯為.c文件,再將.c文件編譯為.so
3. 把py打包成在某一平臺(tái)的可執(zhí)行文件磨德,例如生成exe文件
4.代碼混淆加密(今天重點(diǎn)介紹)
本文講述如何通過(guò)代碼混淆加密來(lái)解決這個(gè)問(wèn)題
核心思路
把連接各種服務(wù)器的代碼統(tǒng)一寫到一個(gè)py文件中缘回,并對(duì)外提供訪問(wèn)api
把步驟1中的py代碼混淆加密
無(wú)需加密的腳本中通過(guò)步驟1中的api,進(jìn)行服務(wù)器的連接相關(guān)操作
在網(wǎng)上找到了一款比較優(yōu)秀的工具pyarmor可以實(shí)現(xiàn)這一需求典挑,github star 目前1.8k
https://github.com/dashingsoft/pyarmor
pyarmor基礎(chǔ)使用介紹
pyarmor是可以保護(hù) Python 腳本的工具酥宴,能夠加密 Python 腳本,保護(hù)運(yùn)行時(shí)刻的 Python 代碼不被泄露您觉,設(shè)置加密腳本的有效期限拙寡,綁定加密腳本到硬盤、網(wǎng)卡等硬件設(shè)備琳水。
基本使用也非常的方便
最簡(jiǎn)單的安裝方式:pip install pyarmor
查看版本號(hào):
pyarmor --version肆糕,成功在終端看到版本號(hào)即安裝成功,目前版本7.7.0在孝。
使用命令 obfuscate 用來(lái)加密腳本诚啃。最常用的一種情況是切換到腳本main.py所在的路徑,然后執(zhí)行私沮。加密:
pyarmor obfuscate main.py始赎,PyArmor 會(huì)加密 main.py 相同目錄下面的所有 *.py 文件到dist文件夾中。
運(yùn)行加密代碼:
cd dist之后仔燕,python main.py即可造垛。
我遇到安裝pyaramor的大坑
接下來(lái)我要介紹一下安裝pyaramor時(shí),我遇到的大坑涨享,在這里分享出來(lái)筋搏,幫助看到文章的同學(xué)節(jié)省時(shí)間調(diào)試厕隧!
有的同學(xué)如果用ide查看加密文件的源碼可能會(huì)發(fā)現(xiàn)奔脐,無(wú)法識(shí)別pyarmor_runtime 和__pyaramor__的問(wèn)題,如下圖:
如果大家想解決這個(gè)問(wèn)題吁讨,就會(huì)遇到大坑髓迎!接下來(lái)我把自己的血淚史介紹給大家:
看到上面的截圖,相信很多人很自然地會(huì)去重新安裝包pytransform建丧,然后大家又會(huì)遇到下面這個(gè)問(wèn)題
Preparing metadata (setup.py) ... error
error: subprocess-exited-with-error
× python setup.py egg_info did not run successfully.
│ exit code: 1
╰─> [7 lines of output]
Traceback (most recent call last):
File "<string>", line 36, in <module>
File "<pip-setuptools-caller>", line 34, in <module>
File "C:\Users\XK-ADMIN\AppData\Local\Temp\pip-install-cnikyffq\mdanalysis_eeb11174b9ff49c4a5b48e03d806aa22\setup.py", line 58
print "MDAnalysis requires Python 2.6 or better. Python %d.%d detected" % \
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("MDAnalysis requires Python 2.6 or better. Python %d.%d detected" % \)?
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed
× Encountered error while generating package metadata.
╰─> See above for output.
note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
想要解決上面的問(wèn)題排龄,需要手動(dòng)下載pytransform-0.2.3.2.tar.gz,然后修改配置文件后手動(dòng)重新打包翎朱,步驟如下:
解壓壓縮包橄维,修改setup.py文件
修改requires=['MDAnalysis==0.8.1']
信息如下:
install_requires=['MDAnalysis']
接下來(lái)執(zhí)行如下命令:
python setup.py build
python setup.py install
注意:安裝時(shí)可能出現(xiàn)類似報(bào)錯(cuò):MDAnalysis requires Python 3.8 or better. Python 3.7 detected
也就是說(shuō)我們的python版本不能低于3.8尺铣!然后大家又會(huì)去升級(jí)py3.8!
看到這里我來(lái)告訴大家:上面這些步驟完全不需要U琛A莘蕖!>捍ā店溢!
應(yīng)該是新版本的pyarmor做了相關(guān)優(yōu)化!
我們只需要老老實(shí)實(shí)地執(zhí)行 pip install pyarmor 即可委乌,也不需要升級(jí)py到3.8
我親自嘗試床牧,python 3.7.4和pyarmor 7.7.0 是完成可行的。
pyarmor完成腳本加密實(shí)戰(zhàn)
大家只需按照以下步驟即可完成對(duì)需要的腳本進(jìn)行加密然后進(jìn)行調(diào)用的過(guò)程:
1.pyarmor obfuscate 你的py腳本.py遭贸。執(zhí)行后會(huì)在當(dāng)前目錄下生成一個(gè)dist目錄如下圖戈咳,當(dāng)前目錄下的py文件是沒(méi)有被加密的
2.進(jìn)入dist目錄,打開(kāi)py文件革砸,如下:
這個(gè)文件是完全可以直接通過(guò)命令:python sql_test.py 直接運(yùn)行的除秀!
3.如果大家想通過(guò)其他非加密的py腳本調(diào)用sql_test.py中的函數(shù),也非常方便算利!
首先把加密的py腳本拷貝到dist目錄
然后直接運(yùn)行調(diào)用腳本册踩,即下圖中的call_script.py即可
實(shí)測(cè)可以正常運(yùn)行!原創(chuàng)不易效拭,如果文章幫到了你暂吉,勞煩點(diǎn)贊轉(zhuǎn)發(fā)!