1. 程式人生 > >【轉】類似py2exe軟件真的能保護python源碼嗎

【轉】類似py2exe軟件真的能保護python源碼嗎

腳本 放心 icon 復雜 保存 壓縮文件 mpi nts 函數

類似py2exe軟件真的能保護python源碼嗎

背景

最近寫了個工具用於對項目中C/C++文件的字符串常量進行自動化加密處理,用python寫的,工具效果不錯,所以打算在公司內部推廣。為了防止代碼泄露就考慮不采用直接給源碼方式,而python二進制腳本pyc和pyo,雖然提供的不是源碼,但可以通過uncompyle2直接得到源碼。通過網上資料發現有Windows下的py2exe、Mac下的py2app和跨平臺的PyInstaller工具都可以將python腳本打包成可執行文件,第一反應應該滿足需要,但有些不放心,故親自嘗試和分析了這些工具。

pyexe

該工具用於Windows下將python腳本和python解釋器打包成可執行文件。這樣可以在沒有安裝python的機器上運行。打包後會有個library.zip打包的文件,如圖1技術分享

裏面包含有所依賴的模塊和打包的模塊,都是pyc存儲,因此可以很容易的通過uncompyle2得到源碼。因此基本上是零保護。

跨平臺工具PyInstaller

使用了這幾個工具後發現該工具功能更為強大。打包後的可執行文件不依賴python,可以直接在沒裝python的機器上運行。要生成不同系統的可執行文件就必須在對應系統上進行打包,而不能一次打包跨平臺運行。

該工具可以打包成一個目錄或者成一個可執行文件,網上教程很多我也就不介紹了。但打包成一個文件實質執行的時候首先會解壓成一個目錄,然後才能運行,因此一個文件實質上是對一個目錄的壓縮存儲。該工具提供接口可以使用AES對模塊進行加密。

該工具將與系統無關的部分打包進CArchive格式(類似於zip)的文件中,並將該文件放入到生成的可執行文件末尾。PyInstaller提供工具pyi-archive_viewer進行查看,如圖2所示,技術分享

下面將對上述圖中所列的重點文件進行介紹。

out00-PYZ.pyz

保存打包所依賴的模塊,類似於上述的library.zip,該文件屬於ZlibArchive格式,如圖3所示,

技術分享

從圖中可以看出,Table Of Contents部分包含有模塊名字、在文件中的偏移和長度。通過這些信息可以得到模塊的內容,該內容是壓縮的,需要使用zlib進行解壓。pyi-archive_viewer也可以查看上述信息。如圖4所示。

技術分享

pyimod00_crypto_key

當使用AES加密選項後,才會有該文件,該文件是pyc格式文件,使用uncompyle2得到的內容為圖5所示,

技術分享

從圖中可以看出,只有一個key,實際上這就是我使用AES加密的key,因此該key相當於明文存儲。

DealProject

該文件是我處理的python源代碼文件,他是直接以源碼形式存在的。

可以看出PyInstaller雖然比py2exe復雜點,但同樣也是非常容易得到源代碼的。

py2app

同樣也對Mac上該工具進行了測試,發現py2app打包後的程序同樣存在上述問題,並且不能再沒有python的機器上運行,處理的文件也是以源碼的形式存在,其他文件是以pyc格式打包在壓縮文件中。

總結

通過目前主流的打包軟件看出,他們只是提供了將python腳本打包成可執行文件,用於在沒有python的機器上運行,並沒有對python腳本進行保護處理,可以很方便的得到源碼。目前了解的解決方案有cython,cython是屬於python的超集,他首先會將python代碼轉化成c語言代碼,然後通過c編譯器生成可執行文件,這樣會克服上述出現的情況,並且可以調用c庫的函數,這樣提高了程序的性能,並增加了代碼的安全性,不失為一種不錯的方案。

轉自:http://blog.csdn.net/liwugang43210/article/details/50096875

其他:

怎樣對 Python 源碼加密?

PHP 可以使用 Zend Guard 對源碼加密,然後發布使用。
想知道 Python 有沒有類似的加密工具,加密後的代碼仍然可以運行。

發布python源碼編譯生成的pyc文件就好了
python -m py_compile src.py

http://my.oschina.net/wizardpisces/blog/107445

其實加密很簡單的,修改Python虛擬機的代碼,針對編譯出pyc的部分修改下虛擬碼,或者對調幾個.別人死都解不出來的.這個方法是來自於(雲風大俠的書<我的編程感悟>中的)
缺點也很顯而易見,執行時必須使用自己的修改的Python虛擬機.

最多也只是混淆,想到達真正意義的加密是不可能的,解釋型語言天生如此。

可以用這個 python混淆器 來加密。
加密效果不可逆,別手手段比如pyc、編譯成exe甚至修改字節碼都比較好還原。

Python 最多也就是像前面說的那樣進行混淆, 想要真的加密暫時沒發現神馬好的解決辦法

將核心代碼用cython(註意:用的還是python語法)編譯成os文件。

【轉】類似py2exe軟件真的能保護python源碼嗎