2008-08-28 129 views
8

在我看來,混淆是一個落在「隱晦安全」或「虛假保護感」陣營中的想法。爲保護知識產權,有版權;爲防止安全問題被發現,有修復了這些問題。簡而言之,我認爲這是解決社會問題的技術方案。 Those almost never work.(爲什麼)我應該使用混淆?

但是,我似乎是我們開發團隊中唯一一個這樣認爲的人,所以我沒有錯,或者只是需要有說服力的論點。我們的產品使用.NET,一位開發人員建議使用.NET Reactor(順便說一句,was suggested in this SO thread as well)。

.NET反應堆通過混合任何純.NET組件(用C#,VB.NET,Delphi.NET,J#,MSIL編寫)與本機機器代碼完全停止反編譯。

那麼,基本上,你把字節碼的所有優點都帶走了嗎?

有沒有好的工程好處混淆?

回答

4

如果您堅持使用純託管代碼模糊處理,則可以削減相當大的程序集大小,而混淆的類/函數名稱(摺疊爲單個字母)意味着較小的內存佔用量。這幾乎總是可以忽略不計,但對某些移動/嵌入式設備(儘管大部分是在Java中)有影響(並且被使用)。

3

一個潛在的工程好處是,在某些情況下,模糊處理可以創建更小的可執行文件或其他工件 - 例如,混淆javascript導致更小的文件(因爲所有的變量被命名爲「a」和「b」而不是「descriptiveNameOne」,並且所有的空白被剝離等)。這會爲使用混淆javascript的網頁加載更快的時間。顯然這並不適用於.NET世界,但它是一個直接工程優勢的例子。

6

如果一個龐大的程序員團隊真的想要得到您的源代碼,並且有時間,金錢和精力,那麼他們就會成功。

混淆,因此,應該阻止那些沒有時間,金錢或努力獲取源代碼的人,路人可能會給你打電話。

2

儘管與.net無關,但我會考慮Javascript中的混淆,以及其他可能的其他Interwoven語言。 Javascript受益於混淆,因爲它減少了需要的帶寬,解析器必須讀取令牌。

但混淆編譯的字節碼對我來說並不真正有用。我的意思是你會嘗試和實現什麼?我只能看到混淆在許可證檢查代碼中略微有用,以避免它容易被繞過。

2

使用模糊處理的主要原因是爲了保護知識產權,正如您所指出的那樣。對於一個企業來說,購買像.NET Reactor這樣的迷惑產品通常要比試圖合法執行你的版權更具成本效益。

混淆還可以提供其他更多附帶的好處,如性能改進和裝配尺寸縮小。這些將是你正在尋找的engineering好處。

13

你問工程的原因,所以這不是嚴格的問題的答案。但我認爲這是一個有效的澄清。

正如你所說,混淆意在解決社會問題。社交(或商業)問題與技術問題不同,很少有完整的解決方案。解決或最大限度地減少問題只有一定程度的成功。

在這種情況下,模糊處理將會給反編譯和盜取代碼的人帶來障礙。它會阻止偶然的攻擊,並且由於慣性,可能會使您的知識產權被盜用的可能性降低。要做一個令人厭煩的比喻,防盜裝置並不能防止你的車被盜,但它會使它不太可能。

當然,在可維護性(可能)性能方面存在成本,最重要的是使用戶難以準確提交錯誤報告。根據GateKiller的說法,混淆並不能阻止一個有決心的團隊進行反編譯,但是(並且這取決於你的產品是什麼)團隊如何確定你可能會攻擊你?

因此,這不是一個社會問題的技術解決方案,而是一個技術決策,它爲複雜的社會結構增加了一個影響力。

1

使用加密來保護途中的信息。

使用模糊處理來保護信息,同時您的程序還有它。

相關問題