使用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 循環如何使用?

TAG:逆向工程 | Python | 保密 |