干貨!分享解決python腳本中涉及賬號密碼泄露的方案(pyarmor)


Python加密腳本的通用方案介紹

最近想要解決關(guān)于python源碼加密的問題,相信這也是許多公司的共性問題。簡單地說就是好多測試運維腳本中直接編寫了連接各種服務(wù)器的代碼(包括應(yīng)用服務(wù)器,數(shù)據(jù)庫服務(wù)器等等),這是非常不安全的做法!看了一下,目前網(wǎng)上大概的解決方案如下:

1.把.py文件轉(zhuǎn)換為.pyc文件(比較容易破解)

2.將.py編譯為.c文件,再將.c文件編譯為.so

3. 把py打包成在某一平臺的可執(zhí)行文件,例如生成exe文件

4.代碼混淆加密(今天重點介紹)

本文講述如何通過代碼混淆加密來解決這個問題

核心思路

把連接各種服務(wù)器的代碼統(tǒng)一寫到一個py文件中,并對外提供訪問api

把步驟1中的py代碼混淆加密

無需加密的腳本中通過步驟1中的api,進行服務(wù)器的連接相關(guān)操作

在網(wǎng)上找到了一款比較優(yōu)秀的工具pyarmor可以實現(xiàn)這一需求,github star 目前1.8k

https://github.com/dashingsoft/pyarmor

pyarmor基礎(chǔ)使用介紹

pyarmor是可以保護 Python 腳本的工具,能夠加密 Python 腳本,保護運行時刻的 Python 代碼不被泄露,設(shè)置加密腳本的有效期限,綁定加密腳本到硬盤、網(wǎng)卡等硬件設(shè)備。

基本使用也非常的方便

最簡單的安裝方式:pip install pyarmor

查看版本號:

pyarmor --version,成功在終端看到版本號即安裝成功,目前版本7.7.0。

使用命令 obfuscate 用來加密腳本。最常用的一種情況是切換到腳本main.py所在的路徑,然后執(zhí)行。加密:

pyarmor obfuscate main.py,PyArmor 會加密 main.py 相同目錄下面的所有 *.py 文件到dist文件夾中。

運行加密代碼:

cd dist之后,python main.py即可。

我遇到安裝pyaramor的大坑

接下來我要介紹一下安裝pyaramor時,我遇到的大坑,在這里分享出來,幫助看到文章的同學(xué)節(jié)省時間調(diào)試!

有的同學(xué)如果用ide查看加密文件的源碼可能會發(fā)現(xiàn),無法識別pyarmor_runtime 和__pyaramor__的問題,如下圖:

如果大家想解決這個問題,就會遇到大坑!接下來我把自己的血淚史介紹給大家:

看到上面的截圖,相信很多人很自然地會去重新安裝包pytransform,然后大家又會遇到下面這個問題

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.

想要解決上面的問題,需要手動下載pytransform-0.2.3.2.tar.gz,然后修改配置文件后手動重新打包,步驟如下:

解壓壓縮包,修改setup.py文件

修改requires=['MDAnalysis==0.8.1']

信息如下:

install_requires=['MDAnalysis']

接下來執(zhí)行如下命令:

python setup.py build

python setup.py install

注意:安裝時可能出現(xiàn)類似報錯:MDAnalysis requires Python 3.8 or better. Python 3.7 detected

也就是說我們的python版本不能低于3.8!然后大家又會去升級py3.8!

看到這里我來告訴大家:上面這些步驟完全不需要?。。。?!

應(yīng)該是新版本的pyarmor做了相關(guān)優(yōu)化!

我們只需要老老實實地執(zhí)行 pip install pyarmor 即可,也不需要升級py到3.8

我親自嘗試,python 3.7.4和pyarmor 7.7.0 是完成可行的。

pyarmor完成腳本加密實戰(zhàn)

大家只需按照以下步驟即可完成對需要的腳本進行加密然后進行調(diào)用的過程:

1.pyarmor obfuscate 你的py腳本.py。執(zhí)行后會在當前目錄下生成一個dist目錄如下圖,當前目錄下的py文件是沒有被加密的

2.進入dist目錄,打開py文件,如下:

這個文件是完全可以直接通過命令:python sql_test.py 直接運行的!

3.如果大家想通過其他非加密的py腳本調(diào)用sql_test.py中的函數(shù),也非常方便!

首先把加密的py腳本拷貝到dist目錄

然后直接運行調(diào)用腳本,即下圖中的call_script.py即可

實測可以正常運行!原創(chuàng)不易,如果文章幫到了你,勞煩點贊轉(zhuǎn)發(fā)!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容