使用Cython來保護Python代碼庫
Python部落(python.freelycode.com)組織翻譯,禁止轉載,歡迎轉發。
最近,我在做一個需要使用Cython來保護整個代碼庫的Python項目。
起初儘管保護Python源碼免受逆向工程的影響似乎是一項徒勞無功的任務,但是所有代碼的cythonizing都會帶來合理的安全性(二進位文件非常難以拆解,但是還可以通過程序的猴子補丁程序來完成)。
這種安全性是有代價的 - Cython的主要用途是編寫可以輕鬆與Python代碼連接的編譯擴展。
因此,對複雜模塊/包結構的支持是相當有限的,我們必須做一些額外的工作來實現所需的結果。
我們必須克服的第一個障礙是很難用Cython編譯整個Python包(如「包含__init__.py文件的目錄」)。想像一下下面的結構:
推薦的cythonizing方法是使用setup.py文件,如下所示:
setup.py或多或少是使用Cython的項目所期望的。但是有兩件事要注意。第一,always_allow_keywords指令通過禁用具有大量參數的函數只允許使用關鍵字參數這一優化,使Flask視圖函數可以正常工作。其次,我們不使用一些指南建議的ext_package參數,因為這會將cythonized代碼放入另一個包中。通過省略這個參數,編譯的代碼保存在同一個地方。
但是,在使用python setup.py build_ext構建項目之後,我們注意到生成的程序包無法導入 - 它缺少__init__.py文件。__init__.so可以從Python導入,但這還不足以使目錄成為Python的一個包。 無法導入包不是唯一的問題 - 其中的代碼也無法執行包相對導入(例如.foo import foo),這會破壞其功能。
要解決這個問題,我們可以在構建項目的其餘部分後從源代碼樹中複製__init__.py文件。 一個很好的方法是覆蓋setup.py中的build_ext類:
我們已經成功地創建了可以導入的Python包。它們在build / lib.linux-x86_64-3.6或類似的目錄下。 遺憾的是,這不足以分發我們的包。理想情況下,我們希望安裝一個僅包含已編譯代碼的軟體包。目前Python存檔的標準是wheel格式(.whl),其目的是替換.egg格式。所以,讓我們嘗試用python setup.py bdist_wheel創建wheel格式! 命令完成後,應該有一個包含wheel文件的dist文件夾。打開就能產生這樣的東西:
顯然,歸檔不僅包含編譯代碼,還包含源代碼。有一種方法可以解決這個問題,但是它似乎是反直覺的。我們需要在調用setup時刪除packages參數中的包名。這樣,仍然可以構建擴展並包含在wheel中,但源代碼將不會在其中。
構建的wheel的內容應該如下所示:
可以使用pip install dist/*.whl安裝wheel。如果我們不需要檢查wheel或手動分配wheel,我們可以在項目目錄中運行pip install,構建並安裝wheel。
也可以從.egg存檔中刪除Python源代碼,但它涉及到從setuptools覆蓋bdist_egg命令。我不會在這裡覆蓋,但如果您有興趣,請查看上述命令類的--exclude-source-files選項和zap_pyfiles方法。
通過遵循本指南,你應該能夠利用複雜軟體包/模塊結構對Python代碼庫進行cythonize,從而讓惡意黑客難以對其進行逆向工程並竊取你的編程成果。
英文原文:https://bucharjan.cz/blog/using-cython-to-protect-a-python-codebase.html
譯者:大嘴
![](https://pic.pimg.tw/zzuyanan/1488615166-1259157397.png)
![](https://pic.pimg.tw/zzuyanan/1482887990-2595557020.jpg)
※看NASA的編碼哲學
※每月好書:Python與機器學習實戰
※Python到底怎麼讀?
※一個Python包,學會所有基礎演算法
※回顧python中的單元測試和模擬
TAG:Python部落 |
※iPhone X Plus保護殼曝光 還有台iPhone 9
※How2work 限量推出奈良美智 iPhone 8 Plus 及 iPhone X 電話保護套
※Identity Server 4-Hybrid Flow-使用ABAC保護MVC客戶端和API資源
※上帝保護我們遠離一切災害 The LORD Who Keeps Us From All Harm
※iPad變身Surface Pro羅技推Rugged Combo2鍵盤保護套
※iPhone 9/iPhoneX Plus模型保護殼曝光 可靠性高
※三星推Android數據保護和隱私保護Samsung Max應用程序
※Mophie推出iPhone X充電保護套
※iPhone SE2手機保護膜曝光,縮水版的iPhone X
※如何繞過csrf保護,並在burp suite中使用intruder?
※三星推出適用於Android數據保護和隱私保護Samsung Max應用程序
※保護模特身心健康,LVMH 再度聯手 Kering 推出數字平台 WeCareForModels.com
※iPhone的一個SurfacePad是光滑的皮革保護套X
※9月新iPhone機模曝光,保護殼與iPhone X通用
※iPhone X的Mophie Qi認證充電保護套即將推出
※Mophie發布首款Qi認證的iPhone X充電保護殼
※Mophie將會為三星Galaxy Note 9提供攜帶型電池保護殼
※Twelve South推出蘋果AirPods皮革保護套,售價30美元
※Daily Sharing-如何教孩子自我保護?
※母公司申請破產保護,美國鞋履品牌 Nine West 或被出售給品牌管理公司 Authentic Brands