『壹』 為什麼python的保存類型是Pythinfiles
Python主程序的格式的後綴名是點exe,Python主程序是可執行型程序類文件。
Python保存文件的後綴名是點py,是Python文件我們可以使用其他工具,將Python文件打包成點exe文件,使其可以在未安裝Python的電腦上運行你的Python作品。
Python的文件分為以下兩種類型:
1.源代碼文件,也就是以.py為擴展名的文件,由python程序解釋,不需要編譯
2.位元組代碼文件,python源代碼文件經過編譯後生成的擴展名為.pyc的文件
『貳』 python源代碼程序文件擴展名
python源文件後綴是py。
以 py 擴展名的文件是 Python 源碼文件,由 python.exe 解釋,可在控制台下運行。可用文本編輯器讀寫。
Python中經常使用的文件後綴名:
pyc
以 pyc 為擴展名的是Python的編譯文件。其執行速度快於 py 文件且不能用文本編輯編輯查看。所以 pyc 文件往往代替 py 文件發布。
Python 在執行時,首先會將 py 文件中的源代碼編譯成 PyCodeObject 寫入 pyc 文件,再由虛擬機執行 PyCodeObject。
當 Python 執行 import 時會先尋找對應的 pyc或 pyd(dll)文件,如果沒有則將對應的py文件編譯寫入 pyc 文件。pyc文件也可以通過 python -m py_compile src.py 生成。
pyw
pyw 文件與 pyc 文件相似,但 pyw 執行的時候不會出控制台窗口。開發(純圖形界面程序)時可以暫時把 pyw 改成 py 以調出控制台窗口調試。
pyo
pyo 是優化編譯後的程序,不能用文本編輯器編輯。 python -O source.py 即可將源程序編譯為 pyo 文件。
pyd
pyd 一般是 Python 外的其他語言如 C/C++ 編寫的 Python 擴展模塊,即 Python 的一個動態連接庫,與 dll 文件相當。在Linux系統中一般為.so文件
『叄』 使用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編譯成.exe文件。
此外你可以多看一下類似的文章:
如何一本正經地寫出別人無法維護的代碼?
『伍』 python怎麼保存代碼 python寫好的代碼如何保存
1、python保存代碼按Ctrl+S快捷鍵即可,也可以點擊左上角文件-保存。
2、Python是一種跨平台的計算機程序設計語言。是一種面向對象的動態類型語言,最初被設計用於編寫自動化腳本(shell),隨著版本的不斷更新和語言新功能的添加,越多被用於獨立的、大型項目的開發。
3、Python的創始人為荷蘭人吉多·范羅蘇姆(Guido van Rossum)。1989年聖誕節期間,在阿姆斯特丹,Guido為了打發聖誕節的無趣,決心開發一個新的腳本解釋程序,作為ABC 語言的一種繼承。之所以選中Python(大蟒蛇的意思)作為該編程語言的名字,是取自英國20世紀70年代首播的電視喜劇《蒙提.派森的飛行馬戲團》(Monty Python's Flying Circus)。