使用python語言如何保密源代碼以防止逆向工程?
比如CC++可以編譯成二進位代碼,Java可以編譯成.class位元組碼,python是否也有相似的功能?假如沒有,就意味著用python語言開發的項目源代碼總是暴露的
我的觀點:Python簡介
Python的第二個缺點就是代碼不能加密。如果要發布你的Python程序,實際上就是發布源代碼,這一點跟C語言不同,C語言不用發布源代碼,只需要把編譯後的機器碼(也就是你在Windows上常見的xxx.exe文件)發布出去。要從機器碼反推出C代碼是不可能的,所以,凡是編譯型的語言,都沒有這個問題,而解釋型的語言,則必須把源碼發布出去。
這個缺點僅限於你要編寫的軟體需要賣給別人掙錢的時候。好消息是目前的互聯網時代,靠賣軟體授權的商業模式越來越少了,靠網站和移動應用賣服務的模式越來越多了,後一種模式不需要把源碼給別人。再說了,現在如火如荼的開源運動和互聯網自由開放的精神是一致的,互聯網上有無數非常優秀的像Linux一樣的開源代碼,我們千萬不要高估自己寫的代碼真的有非常大的「商業價值」。那些大公司的代碼不願意開放的更重要的原因是代碼寫得太爛了,一旦開源,就沒人敢用他們的產品了。
可以直接拿http://cython.org/ 編譯一下
套一層自定義虛擬機 內部 硬碟加密 對外介面做成web
改下python解釋器,生成加密的pyc
開源
變成Web服務
查看類似的主題的時候,忽然意識到Web的巨大優勢。
想起個段子:小時候,我總是為上清華還是上北大而苦惱,後來發現,我想多了。
可以用這個工具混淆一下,基本能做到還原比重寫費力: http://pyob.oxyry.com
補充:
沒想到,還有人點贊,補充一下,結合最近的經驗,我發現可以通過pyinstall 生成exe程序,如果你這個是用於windows的話;這個相對就比較難破解了;一般的做法是做成pyc格式的,但是,我曾經破解過一個pyc格式的二進位,反編譯出來以後,可以直接運行;c或者c++的二進位,就是大名鼎鼎的刷機大師VRoot,它在手機上進行root的二進位我也恢復成C代碼,並且實現它該有的功能;java或者APK包就更不用說了,基本上是沒什麼難度;所以,結論就是道高一尺魔高一丈,破解和反破解是個持續不斷的鬥爭;
python確實更容易被破解;我的做法還是做成C,而且做strip,不用任何字元串,關鍵函數都是動態獲取的;python的pyc基本上就是位元組碼,是很容易復原成python程序的。
目前python界內沒有很好的混淆工具,只能聽天由命了,或者自己寫一些簡單的混淆腳本,對py文件進行一定的處理,例如變數名稱替換,無用命令的添加等等。
又或者去研究下R python,在有限的python語法中,將py程序直接編譯到純C的exe中。這樣只能反彙編了。我只想說:保護代碼那麼費事,歡迎開源!
Python閉源產品發布一般都是打包成二進位代碼,不可能直接把代碼或位元組碼交給用戶。位元組碼甚至是二進位代碼也是不安全的,要防止逆向工程還是要藉助代碼混淆等工具
最簡單的用pyc格式,再就是用p2exe等工具生成exe,但是實際執行時,還是將pyc文件提取出來執行,和c,c++編譯後生成的exe本質上有區別。兩種方式都不算安全。
在線pyc,pyo,python,py文件反編譯
nuitka,好像叫這個名字,可以打包成exe
Cython吧 感覺沒有其他路 看到樓上有 pyminifier 這個的,建議也不要用,這個只能混淆單個文件,多文件時,不會處理內部關聯關係。
這篇文章 類似py2exe軟體真的能保護python源碼嗎 講了目前打包軟體py2exe不能保護python代碼。
這個之前跟著導師做過一段時間加密,通過編譯器將自己的代碼位元組碼改為o或者0等,別人看不懂,但是能正常執行!
曾有個想法,就是把.py文件的全文作為字元串寫進Python解釋器源碼里,再做些相應的修改。然後make出來的python,在運行的時候會直接跑那個字元串里的內容,而且是經過編譯的(我在吹牛)
改寫成http服務。提供python代碼轉http服務,幫忙搭建web伺服器哦
python一般當著工具或後段語言,沒有太大的泄露源碼機會吧
推薦閱讀:
※Python 3.x 上 str 與 bytes 轉換函數是什麼?
※看完廖雪峰的python,但是感覺自己掌握不紮實,不知道該怎麼做?
※用python的前輩們,pylab是matplotlib的一個模塊嗎,跟pyplot又是什麼關係呢?
※windows下如何安裝libxml2?
※Python 中的 for 循環如何使用?