混淆 Python 程序

在下面的教程中,我們將了解如何混淆 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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
簡單一點的頭像簡單一點
上一篇 2024-10-03 23:25
下一篇 2024-10-03 23:25

相關推薦

  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29

發表回復

登錄後才能評論