① 如果python的源代碼無法保密,那不是說所有的演算法大夥都可以用
可以使用pymod對代碼加密部署
先睹為快,看看一個項目發布的時候,只有幾個文件,
main.py 項目程序入口
setting.py 項目配置
apps 項目模塊
plusins 項目插件目錄
pymod 使用指南,訪問https://pymod.cn
② 使用python語言如何保密源代碼以防止逆向工程
大家都很忙,誰有時間看你的的爛代碼!
如果真的怕泄露,別用python.
我以前做過這類事情,而且當時更嚴格,需要打包部署到客戶的服務只在有效期內有效,超過有效期必須更新證書才行。
Python代碼用任何方法都沒法保證保密性,這個時候你可以考慮用一個工具「nuitka」,這個工具會把你的python源代碼映射為c++然後編譯為二進制,因此對方是無論如何得不到你的源代碼的。
代價就是nuitka這個工具並不完美,有一些限制並不能100%完美的轉換所有python代碼。
1.用Cython編譯python成 Windows的pyd文件或Linux的so文件,二進制文件相對安全性較高。
2.用源碼混淆器把代碼搞的又臭又長。。。混淆完了再用Cython編譯為二進制。。。這樣靜態反編譯逆向難度也不小。
3.同其他語言程序一樣,可以對調試狀態進行檢測,當處於調試狀態時退出程序或進入混亂代碼耗費逆向工程人員心神。
4.分享一個跨平台反調試手段,檢測函數運行時間,加斷點會導致函數運行時間變長,也可感知正在被調試。
Python是提倡開源的,既然選擇Python還是擁抱開源才好~ 都開源還擔心逆向工程嘛
沒有不能逆的軟體。
只要匯編語言過關,逆向工程都是可以實現的,不要有其它想法。
你唯一可以做的,就是不讓別人用python讀取源代碼而已。那樣實現起來比較簡單。
python 適合開發伺服器程序,或者自己科研使用的程序,如果是 作為用戶程序,安裝到 pc 或手機上,還是 其它 c++ 或java 比較合適
1)可以把需要保護的部分用c語言實現,從而編譯成so等文件,這樣逆向的成本會比較高,可以防止直接打開python文件看到代碼邏輯。
2)so文件通過ida等工具也是可以反匯編的,可以通過對c語言進行代碼混淆,花指令等操作,提高通過ida等反匯編工具的分析難度。
3)不存在絕對無法逆向的技術手段,因此只能是看具體需求,選擇具體的防逆向的技術手段。
有工具類似py2exe轉成可執行程序,隱藏全部源代碼,雖然bytecode還是可以反編譯,但是難度大多了
1. 最穩的就是你改cpython載入代碼的過程,改zip包讀取最穩。
2. 藉助一些加密工具在編譯pyc之前進行一定的混淆,可以防君子,自我安慰一下。
商用一般都是用第一種辦法,小打小鬧用第二種。
可以考慮使用pymod工具,使用pymod pack 將模塊加密打包,發布的時候一個模塊就一個文件。
先睹為快,看看一個項目發布的時候,只有幾個文件,
main.py 項目程序入口
setting.py 項目配置
apps 項目模塊
plusins 項目插件目錄
創建項目 pymod create demo1
cd demo1
創建模塊 pymod add mod1
啟動pycharm 開始編寫功能模塊
一個模塊默認由三個文件組成
__init__.py 、 handlers.py 、param_schemas.py
業務邏輯主要在handlers.py中編寫
__init__.py
from pymod.blueprint import Blueprint api = Blueprint("/mod1") from .handlers import *
param_schemas.py
schema_sfz = { "type": "object", "required": ["sfz", "nl"], "properties": { "sfz": { "type": "string", "minLength": 18, "maxLength": 18, "description": "身份證明號碼" }, "nl": { "type": "integer", "minimum": 0, "maximum": 150, "description": "年齡" } } }
handlers.py
from . import api from pymod.ext import RequestHandler, params_validate,TrueResponse,FalseResponse from .param_schemas import schema_sfz from pymod.plugins import sfz_check @api.add_route('/hello') class Hello(RequestHandler): def get(self): self.write('Hello World') @params_validate(schema_sfz) def post(self): sfz = self.get_json_arg("sfz") nl =self.get_json_arg("nl") # self.write(TrueResponse(sfz=sfz, nl=nl)) if sfz_check.check_sfzmhm(sfz): self.write(TrueResponse(hint="身份證明號碼驗證通過")) else: self.write(FalseResponse(hint="身份證明號碼驗證失敗"))
三、項目部署
程序調試 修改setting.py
# 開發模式下 運行的模塊名稱必須填寫
moles = ["mod1"] moles_config ={ "mod1": { "deny_ip": "", "allow_ip": "*" } }
啟動程序 python main.py
調試沒有問題,進入發布模式
在項目目錄下
pymod pack mod1
在target目錄下生成mod1.mod文件,將其復制到apps目錄中
修改setting.py
# 開發模式下 運行的模塊名稱必須填寫
moles = []
再次運行 python main.py 測試
一切OK,系統就可以發布了。
說不能保密的,是沒有研究過python的機制的。我做個一個項目,所有源代碼自定義加密,運行時解密。
③ python 如何保密源代碼
python 如何保密源代碼?
相關推薦:《Python教程》
加密方式
對 Python 加密時可能會有兩種形式,一種是對Python轉成的exe進行保護,另一種是直接對.py或者.pyc文件進行保護,下面將列舉兩種形式的保護流程。
1、對 python轉exe加密,下載最新版Virbox Protector加密工具,使用加密工具直接對demo.exe進行加密操作。
2、對.py/.pyc加密。
第一步,使用加密工具對 python 安裝目錄下的 python.exe 進行加密,將 python.exe 拖入到加密工具 VirboxProtector 中,配置後直接點擊加密。
第二步,對.py/.pyc 進行加密,使用 DSProtector 對.py/.pyc 進行保護。
④ Python編程實現加密解密讀取文件
對Python加密時可能會有兩種形式,一種是對Python轉成的exe進行保護,另一種是直接對.py或者.pyc文件進行保護,下面將列舉兩種形式的保護流程。
1、對python轉exe加殼
下載最新版VirboxProtector加殼工具,使用加殼工具直接對demo.exe進行加殼操作
2、對.py/.pyc加密
第一步,使用加殼工具對python安裝目錄下的python.exe進行加殼,將python.exe拖入到加殼工具VirboxProtector中,配置後直接點擊加殼。
第二步,對.py/.pyc進行加密,使用DSProtector對.py/.pyc進行保護。
安全技術:
l虛擬機外殼:精銳5的外殼保護工具,創新性的引入了預分析和自動優化引擎,有效的解決了虛擬化保護代碼時的安全性和性能平衡問題。
l碎片代碼執行:利用自身成熟的外殼中的代碼提取技術,抽取大量、大段代碼,加密混淆後在安全環境中執行,最大程度上減少加密鎖底層技術和功能的依賴,同時大量大段地移植又保證了更高的安全性。
lVirbox加密編譯引擎:集編譯、混淆等安全功能於一身,由於在編譯階段介入,可優化空間是普遍虛擬化技術無法比擬的,對代碼、變數的混淆程度也有了根本的提升。
l反黑引擎:內置R0級核心態反黑引擎,基於黑客行為特徵 的(反黑資料庫)反制手段。精準打擊調試、注入、內存修改等黑客行為,由被動挨打到主動防護。
加密效果:
加密之前
以pyinstall 的打包方式為例,使用pyinstxtractor.py文件對log_322.exe進行反編譯,執行後會生成log_322.exe_extracted文件夾,文件夾內會生成pyc文件。
成功之後會在同目錄下生成一個文件夾
⑤ Python源代碼保密、加密、混淆
Python源代碼的保密、加密和混淆是開發者保護代碼安全的重要手段,但其效果有限。以下是幾種常見的方法:
1. 使用pyc或pyo文件:通過編譯py文件為pyc文件,提高執行速度且不便於直接查看源代碼。但要注意與源文件所用Python版本一致,且.pyc文件可能需要調整命名和路徑。
2. 混淆源代碼:在線混淆服務提供一定程度的代碼混淆,增加閱讀難度,但並不能完全保密。
3. 打包工具:如pyexe、PyInstaller和py2app將Python代碼打包成可執行文件,但壓縮包內的內容易被獲取,基本無保護。
- PyInstaller教程:確保使用正確Python版本安裝,有四種打包方式,如主文件打包(-F)和依賴文件打包(-p)。注意處理相對路徑和參數傳遞。
4. Cython:將Python代碼轉化為C語言,通過編譯提高執行速度,但不支持JIT技術,且可能影響純Python的性能。
總的來說,這些方法在一定程度上保護了源代碼,但實際安全取決於對手的實力和資源。在實際應用中,可能需要結合多種策略來增強代碼保密性。