在下面的教程中,我們將了解如何混淆 python 程序。我們將使用名為 pyarmor 的 Python 包進行混淆。
我們有時可能會遇到這樣一種情況,出於某些原因,我們必須將代碼直接交付給客戶端。然而,通過執行這樣的功能,我們將失去對代碼的控制。在這種情況下,我們可能會對腳本進行加密以保護它,保留控制,並包括一些用於控制依賴關係的後備條件,就像我們交付的代碼只在一定時間內使用一樣。
在下面的教程中,我們將使用由上述功能組成的函數來解決上述問題。我們將使用 pyarmor python 庫來混淆任何 python 代碼。
那麼,讓我們開始吧。
創建基本功能
我們將從創建一個新的 Python 程序文件開始,以便在 Python 代碼上實現混淆。在文件中,我們將定義一個推理函數,並在稍後對其進行加密。
讓我們考慮推理函數的以下代碼片段。
檔案:func.py
# importing the required modules
import os
import json
import sys
from datetime import datetime
# defining an inference function
def infer(person_name = "", tag = True):
'''
if the present year is 2021, then inference function will execute properly, else it fails.
Here the attribute variable contains the string version of the date in MM-DD-YYYY format
'''
print("Hello " + person_name + ", the inference function has been initiated successfully")
atr = str(datetime.now().strftime('%m-%d-%Y'))
resp = "Your license has been expired, please contact us."
expiration_year = int(2023)
try:
assert int(atr.split('-')[-1]) == expiration_year, resp
except AssertionError as e:
print(resp)
sys.exit()
# if the above assertion is True, it will reach until this point,
# otherwise it will stop in the previous line.
if tag:
print("Inference function has been done properly!")
return True
else:
return False
if __name__ == "__main__":
_ = infer(person_name = "Peter Parker")
'''
Function outputs,
Case 1: if expiration_year = int(2021)
Hello Peter Parker, the inference function has been intiated successfully
Inference function has been done properly!
[Finished in 0.2s]
Case 2: if expiration_year = int(2022)
Hello Peter Parker, the inference function has been intiated successfully
Inference function has been done properly!
[Finished in 0.2s]
Case 3: if expiration_year = int(2023)
Hello Peter Parker, the inference function has been intiated successfully
You license has been expired, please contact us.
[Finished in 0.2s]
'''
輸出:
Hello Peter Parker, the inference function has been initiated successfully
Your license has been expired, please contact us.
說明:
在上面的代碼片段中,我們已經導入了一些必需的模塊。然後我們定義一個推理函數為explore(),它接受兩個參數- person_name 和 tag = True 。然後,我們為啟動推理功能的用戶打印了一份聲明。後來,我們將存儲當前日期的變量定義為 atr ,將字符串變量定義為 resp 。我們還將另一個變量到期 _ 年賦給了 2023 。然後,我們使用嘗試-異常方法來處理任何引發的異常。最後,我們使用 if-else 條件語句根據情況打印一條語句。最後,我們將 name 分配給 main 來執行推理功能。
現在,讓我們將這個 python 文件保存在一個文件夾中。
使用 pyarmor 加密文件
藉助 pyarmor 對文件進行加密的過程分為兩個步驟:
步驟 1:安裝 pyarmor 包
我們可以使用如下所示的 pip 安裝程序安裝 pyarmor 包:
語法:
$ pip install pyarmor
步驟 2:加密 python 文件
我們可以通過在命令提示符下鍵入以下命令來加密文件。
語法:
$ pyarmor obfuscate --restrict=0
現在,讓我們在 func.py 文件上實現上面的命令。
語法:
$ pyarmor obfuscate --restrict=0 func.py
現在,如果我們打開包含原始 func.py 文件的文件夾,我們將看到創建了一個名為 dist 的新子文件夾。
在 dist 文件夾中,我們將找到另一個名為 pytransform 的文件夾和一個加密的 func.py 文件。
現在,讓我們看看這個文件裏面的內容。
文件:func.py(加密)
from pytransform import pyarmor_runtime
pyarmor_runtime()
__pyarmor__(__name__, __file__, b'\x50\x59\x41\x52\x4d\x4f\x52\x00\...', 2)
導入推理函數
完成後,直到這一部分,現在讓我們嘗試將這個加密的 func.py 導入一個名為 new.py 的新 python 文件中,該文件是我們在 dist 文件夾中創建的。
允許我們在運行時解密 func.py 的強制密鑰使用 pyarmor 來處理。它存在於 pytransform 文件夾中;因此,造成代碼不可讀的其他人的眼睛。
然而,如果我們想對實際的 func.py 腳本做一些修改,我們必須從步驟 1 開始,繼續執行相同的步驟。
讓我們考慮下面的代碼片段,我們必須在 new.py 文件中鍵入。
文件:new.py
# importing the inference function definition inside the func.py file
from func import infer
_ = infer(person_name = "Tony Stark")
輸出:
Hello Tony Stark, the inference function has been initiated successfully
Your license has been expired, please contact us.
說明:
在上面的代碼片段中,我們已經在新的 python 文件中導入了 func.py 的推理函數,該文件是我們作為 new.py 創建的。然後,我們使用與功能相同的配置來執行該功能。
原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/128871.html