Contents

使用 Pyarmor 保護您的 Python 腳本免受逆向工程影響

Python 具有高度的易讀性,這有助於其在各個領域的廣泛使用。然而,這一屬性也給安全性帶來了一定的挑戰。競爭實體或惡意代理未經授權的入侵和利用的可能性不容忽視。此類行為可能會導致敏感信息和專有組件的複制,從而損害軟件的可靠性和最終用戶對其的信心。

通過實施高級安全功能(包括代碼混淆和許可驗證)來增強對軟件的保護,有助於加強對潛在風險的防禦。在數字生態系統中保護編程的機密性和維護用戶的信任是這一過程的重要方面,這超越了單純的程序考慮。

了解 Pyarmor

Pyarmor 是一個命令行庫。它有助於保護和混淆 Python 腳本和包。它將原始Python代碼轉換為更難理解的形式,同時保持其功能。混淆過程將變量、函數和類重命名為非描述性名稱。它還刪除了註釋並重組了代碼。這使得代碼難以逆向工程、篡改或複制。

Pyarmor 為各種形式的基於 Python 的資產提供全面的保護,包括保護單個腳本文件、包級安全措施以及將許可驗證納入代碼本身。

安裝 Pyarmor 庫

PyArmour 是一個專為 Python 中的安全通信和加密操作而設計的軟件包,已添加到 Python 包索引 (PyPI) 中,該索引充當使用流行編程語言構建的軟件包的中央存儲庫。要安裝此軟件包,可以通過執行以下指令來使用 Pip 工具:

 pip install pyarmor

您不需要將 Pyarmor 放置在與項目相同的文件夾中,因為它可以安裝在設備上的任何位置,並為位於任何目錄中的 Python 腳本提供保護。

為了在項目上下文中安全地執行腳本而不需要在目標系統上安裝 Pyarmor,前者必須安裝在項目所在的同一文件夾中。這一要求背後的基本原理在於,受保護的代碼包含專門指 Pyarmor 運行時環境的命令式組件,對於執行其中的內容是必不可少的。

保護單個 Python 腳本的安全

利用 Pyarmor 保護單個腳本提供了一個簡單的過程,如以下計算兩個數值之和的腳本實例所證明的那樣。

 def add_numbers(num1, num2):
   result = num1 \+ num2
   print("The sum of {} and {} is: {}".format(num1, num2, result))


# Example usage
num1 = float(input("Enter the first number: "))
num2 = float(input("Enter the second number: "))
add_numbers(num1, num2)

請使用終端界面遍歷到Pyarmor的安裝位置。隨後,執行後續指令,通過將“main.py”替換為特定腳本的標題來保護和隱藏您的腳本。

 pyarmor gen --output dist main.py

執行給定命令後,Pyarmor 會生成一個標記為“dist”的新目錄,其中包含受保護的腳本。

/bc/images/safeguarding-python-scripts-aganist-reverse-engineering-using-pyamor-dist-directory.jpg

為了訪問受保護腳本的內容,有必要解鎖或禁用現有的安全措施。此過程可稱為“打開”腳本,並且可能涉及輸入密碼或執行某些其他操作以授予查看其內容的權限。

/bc/images/safeguarding-python-scripts-aganist-reverse-engineering-using-pyamor-encrypted-script.jpg

上述圖形表示說明了 Pyarmor 編碼和隱藏基本算術計算過程的結果。因此,僅僅通過目視檢查,人們辨別其功能的能力就會受到嚴重損害。

要執行加密的腳本,請訪問終端或命令提示符並將導航定向到包含“dist”目錄的文件夾。隨後,使用以下命令啟動腳本:

 python dist/main.py 

請執行提供的代碼來代替現有的main.py文件,並確保所有功能在徹底測試後正確運行。

保護整個 Python 包

Pyarmor 提供了一種方便的解決方案來保護可能包含多個模塊的包。 Pyarmor 不是單獨保護每個模塊,而是可以一次性全面保護整個包。這消除了繁瑣且耗時的手動流程的需要,使開發人員更容易確保其代碼庫的安全性。

考慮一個假設場景,其中一個人擁有一個名為“sample\_package”的基本 Python 模塊,該模塊顯示以下組織配置:

 sample_package/
|-- __init__.py
|-- module1.py
|-- module2.py 

如果需要,您可以自由生成無限數量的模塊。

為了通過加密和遮蔽的方式保護和隱藏包裹,請訪問終端或命令提示符界面並前往包裹存儲的位置。隨後,執行後續指令如下:

 pyarmor gen -O dist -r -i sample_package 

利用以下過程通過加密和隱藏“dist”文件夾中的內容來保護您的包目錄。受保護的版本可以像任何常規 Python 包一樣使用。請用“sample\_package”替換您的特定包的名稱。

要使用提供的示例包,請在“dist”文件夾中創建一個新腳本:

 from my_package import module1, module2

module1.say_hello()
module2.do_something()

在安全狀態下執行時,代碼的執行不應改變其功能。

控制對腳本的訪問

設計 Python 腳本時要考慮的一種可能方法是實施一種限制其執行持續時間的機制,特別是在試用階段。這可以通過合併一個計時器或計數器來實現,該計時器或計數器跟踪自腳本啟動以來所經過的時間,並在達到預定時間限制後終止腳本。通過這樣做,您可以確保用戶無法在指定的試用期之後繼續使用該腳本,而不會產生額外的費用或處罰。

要控制腳本運行的持續時間,請在隱藏腳本的過程中使用上述指令。

 pyarmor gen -O dist -e 30 main.py 

請修改提供的文本如下:“通過在‘天數’字段中輸入特定天數或確切日期來調整持續時間。一旦指定的時間範圍過去,腳本將自動結束。

要評估上述功能,您可以在系統日曆中設置之前的日期。此操作預計會在執行腳本時觸發異常。要使用無效日期來隱藏腳本,請使用以下指令:

 pyarmor gen -O dist -e 2022-01-01 main.py

然後運行受保護的腳本。

/bc/images/safeguarding-python-scripts-aganist-reverse-engineering-using-pyamor-error.jpg

該消息表明許可信息已達到到期日期,這將阻止執行關聯的腳本。

平衡安全性和效率

雖然 Pyarmor 提供了旨在增強代碼保護的全面混淆技術,但在增強安全功能和保持軟件的運行效率和性能之間取得平衡至關重要。這可以通過實施有效的策略來防範潛在威脅,同時優化系統性能來實現。

在專有算法、機密信息或獨特的商業原則受到威脅的情況下,必須將混淆視為保護這些資產的關鍵措施。另一方面,在處理知識產權影響相對較少的開源應用程序時,將安全性置於性能之上的決定變得越來越重要。

混淆的實現可能會導致運行時開銷的增加,這對於較小的腳本來說可能微不足道,但隨著項目規模的增加而變得更加明顯。通過徹底的分析和測試來評估對性能的潛在影響對於保持軟件的效率和響應能力至關重要。

定期檢查和維護軟件對於解決任何新出現的漏洞或過時的組件至關重要。在確保系統保持安全和最新狀態與避免最終用戶不必要的中斷之間取得平衡非常重要。通過定期更新混淆代碼、應用當前的許可實踐以及實施強大的安全措施,組織可以降低風險並確保平穩運營。

有人能破解混淆代碼嗎?

軟件盜版也稱為軟件破解,涉及繞過對應用程序施加的安全措施和許可限制,以便在不合法購買的情況下使用其完整功能。雖然使用代碼混淆等技術可以在一定程度上阻礙盜版者的努力,但它不能完全防止未經授權的訪問程序的功能。

通過堅定不移的奉獻精神和充足的手段,即使是複雜的隱藏代碼也可能最終屈服於勤奮的努力。因此,必須持續實施持續更新和精心維護,以密封可能出現的任何潛在漏洞。