2010-08-12 231 views
6

我想知道多少簡單的反編譯python字節碼。我已經在python中創建了一個應用程序,其源代碼希望是安全的。我正在使用py2exe,它基本上依賴於python編譯的文件。是否可以輕鬆完全反編譯python編譯(* .pyc)文件?

確保代碼安全嗎?

+0

可能重複的[如何保護python代碼?](http://stackoverflow.com/questions/261638/how-do-i-protect-python-code) – 2010-08-12 02:41:06

+2

啊... 3年後,我意識到代碼保護是多麼荒謬。事實上,在像C/C++這樣廣泛的語言中,沒有其他語言不能被反編譯。 – Shubham 2013-06-24 17:44:07

回答

6

取決於您對「完全」(在「完全反編譯」)中的定義... ;-)。你不會輕易找回原始的Python源代碼,但獲取字節碼很容易,而標準庫模塊dis的存在恰好可以使字節碼容易讀取(儘管它的仍然是字節碼,而不是完整的Python源代碼;-) 。

+0

那裏也有C++反編譯器,但它們只是無用的。他們沒有得到原始的源代碼,只是一些彙編級的指令。所以通過完全可解析我的意思是哪個*實際*生成*實際*源代碼。 – Shubham 2010-08-12 02:34:04

+0

你不會得到「實際的源代碼」。評論將會消失。但變量名稱,方法名稱,常量,字符串以及您應用於其中的所有邏輯都可供有興趣的人閱讀。 – 2010-08-12 02:39:07

+1

@Shubham,yep,@Ned是對的:Python的字節碼離Python源碼更近,比彙編語言更接近它的源代碼。任何值得他或她的鹽的Python專家將能夠精確地從字節碼中重建源的邏輯,而不會永遠關注它(不是從彙編代碼中完成它更難 - 看看每個新的需要多長時間愚蠢的「複製保護」計劃讓遊戲被拆解,理解和破壞...... ;-)。 – 2010-08-12 03:09:32

1

如果你在線搜索,你可以找到Python字節碼的反編譯器:有一個免費的下載版本,但它只能處理Python 2.3以上的字節碼,而online service可以反編譯到2.6版本。

目前似乎還沒有任何反編譯器用於更新版本的Python字節碼,但這幾乎肯定是因爲沒有人覺得需要編寫一個字節碼,而不是字節碼本身的任何基本難點。

有些人試圖通過修改解釋器來保護Python字節碼:沒有什麼特別的理由說明,爲什麼你不能編譯你自己的解釋器時使用了字節碼的不同值:這將阻止簡單檢查import dis的代碼,但是不會長時間站在任何確定的攻擊之下,而且代碼更好地投入到改進程序本身的所有代價中。

總之,如果你想保護你的程序,然後使用法律來做到這一點:使用適當的軟件許可證,並起訴那些忽略它的人。代碼編寫起來很昂貴,但最終的結果很少是軟件包的寶貴部分:數據更有價值。