2017-01-13 56 views
1

我在python(2.7)中創建了一個程序,我想保護它免於逆向工程。從反向工程保護python代碼

我使用cx_freeze(耗材的基本安全 - 混淆和反調試)

我怎麼可以添加更多的保護措施,如混淆,包裝,反調試編譯它,加密代碼識別虛擬機。

我想也許加密到有效載荷並在運行時解密它,但我不知道該怎麼做。

+1

計算機上的每個鎖都有一個洞,所以爲什麼要執行一個安全的東西,這將是昂貴的,並最終破碎 – user2740652

+0

你到底想要達到什麼目的? – fuz

+2

如果你想實現某種模糊處理,我建議你使用一種編程語言,它不需要在運行時知道符號名(Python可以)。 – fuz

回答

4

一般來說,只要黑客有足夠的動機,就幾乎不可能讓程序牢不可破。

但你仍然可以使它更難進行逆向工程,儘量使用cython編譯你的核心代碼爲pydso文件。

+0

爲什麼這會讓它更難?使用cython你會得到機器代碼,我會說它使*更容易*,不是? –

+2

那麼我會說它比機器代碼更容易理解python代碼。 – Shane

+0

這只是一個程度,當涉及到編譯的python字節碼,我希望他分佈,而不是簡單的源代碼。看,當它是所有簡單的機器代碼時,我相信它變得更容易,因爲它們之間沒有cpython。 Otoh python調試器也存在,但最有可能被欺騙比機器代碼調試器容易得多。 –

3

故事時間:我是一名Python程序員很長一段時間。最近我作爲一名Python程序員加入了一家公司。我猜我的經理是一個十年的Java程序員。他給了我一個項目,並在最初的審查中,他問我,我們混淆了代碼?我說過,我們在Python中不這樣做。他說我們在Java中做這樣的事情,我們希望在python中實現同樣的事情。最終,我設法混淆了代碼,只是刪除了註釋和空格以及重命名局部變量),但整個python調試過程都搞砸了。

然後他問我,我們可以使用ProGuard嗎?我不知道它到底是什麼。一些谷歌搜索後,我說它是用於Java,不能在Python中使用。我還說過我們在自己的服務器上部署的任何東西,所以我們不需要真正保護代碼。但他不願意說,我們有一套程序,在部署之前必須遵守。

最終我在厭倦了說服他們說服Python不是Java的一年後辭掉了我的工作。我也沒有興趣讓他們在那個時候有不同的想法。

TLDR;由於Python的開源性質,沒有可用的工具來混淆或加密您的代碼。只要您在自己的服務器上部署代碼(提供軟件即服務),我也不認爲這不是問題。但是,如果您實際上向客戶提供產品,則可以使用一些工具來包裝代碼或字節代碼,並將其作爲可執行文件。但是如果他們願意的話,總是可以查看你的代碼。或者如果絕對有必要保護您的代碼,您可以選擇其他一些能夠提供更好保護的語言。再次記住,始終可以對代碼進行逆向工程。

0

現在沒有辦法使任何數字安全的東西。

你可以做的是讓它很難到達令人沮喪的地步,但我承認我不知道python具體的實現方式。程序的安全性實際上並不是程序安全的功能,而是心理學​​

是的,心理學。

考慮到這是一個餅乾和反擊者之間的軍備競賽,在這兩個國家不斷試圖互相推top,唯一能做的就是儘量讓它變得令人沮喪。我們如何實現這一目標?

由於在後方疼痛!

爲了確保代碼難以破譯,每一個額外的步驟都是不錯的。

例如,你可以把你的程序變成一個字節碼的編譯塊,你可以從程序中調用它。事先使用外部庫進行加密,然後解密。對功能的代碼塊執行額外的步驟。或者,預編譯模塊中的函數已準備就緒,但已損壞。在運行時,利用字節播放,根據不同功能的其他字節以字節修復字節碼,這會在修改時停止程序的工作。

有很多方法會讓人們頭暈目眩,雖然我不能告訴你任何py的具體方法,但如果你在「如何成爲婊子」的背景下思考,你會發現最奇怪的製作方法處理你的代碼很麻煩。

有趣的是,這比Python更容易組裝,所以也許你應該考慮通過ctypes或其他方式來執行外部代碼。

召喚你的內心巨魔!

+1

Downvoted,爲什麼?曾經挑戰過某人破解你的代碼?我做到了。這是一場智力遊戲。 –

+0

也許:「現在沒有辦法讓任何數字安全的東西」是誇張的? – zaph

+0

您是否指望從未連接過任何地方的電腦,切勿使用USB,CD,DVD?那裏有軟件成功地瞄準* airgap *!馬克扎克伯格涵蓋了他個人電腦的凸輪。沒有數字是安全的。當然,你可以把硬盤放在安全的地方,但是有什麼意義呢? :) –