Dot-Net

(為什麼)我應該使用混淆?

  • June 23, 2010

在我看來,混淆是一種屬於“默默無聞的安全”或“虛假的保護意識”陣營的想法。保護智慧財產權,有版權;為了防止發現安全問題,我們正在修復這些問題。簡而言之,我將其視為解決社會問題的技術解決方案。那些幾乎從不工作。

然而,我似乎是我們開發團隊中唯一有這種感覺的人,所以我要麼錯了,要麼只需要令人信服的論據。我們的產品使用 .NET,一位開發人員建議使用 .NET Reactor(順便提一下,在這個 SO 執行緒中也提出了建議)。

.NET Reactor 通過將任何純 .NET 程序集(用 C#、VB.NET、Delphi.NET、J#、MSIL…編寫)與本機機器程式碼混合,完全停止任何反編譯。

所以,基本上,你一次就把字節碼的所有優點都扔掉了嗎?

混淆是否有良好的工程優勢?

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

正如您所說,混淆旨在解決社會問題。與技術問題不同,社會(或商業)問題很少有完整的解決方案。在解決或最小化問題方面只有一定程度的成功。

在這種情況下,混淆會提高有人反編譯和竊取您的程式碼的障礙。它會阻止隨意的攻擊,並通過慣性降低您的智慧財產權被盜的可能性。打一個令人厭煩的類比,防盜器並不能防止您的汽車被盜,但它會降低它的可能性。

當然,在可維護性、(可能)性能方面以及最重要的是使使用者更難準確送出錯誤報告是有成本的。

正如 GateKiller 所說,混淆不會阻止有決心的團隊進行反編譯,但是(這取決於你的產品是什麼)一個團隊可能會攻擊你的決心有多大?

因此,這不是對社會問題的技術解決方案,而是為複雜的社會結構增加影響的技術決策。

如果一大群程序員真的想獲得你的原始碼並且有時間、金錢和精力,那麼他們就會成功。

因此,混淆應該阻止那些沒有時間、金錢或精力來獲取您的來源的人,您可能會打電話給他們。

引用自:https://stackoverflow.com/questions/31882