C#軟體如何良好的防止反編譯被破解?

用C#編寫了一個小程序,有C#的exe C#的dll類庫。

因為考慮到或許會拿去出售,應當怎樣防範自己辛苦編寫的軟體不被輕易的破解?

補充,只是個人編寫的軟體,面向的領域比較小眾的用戶。無力承擔太高價位的防範措施。


有一個工具 DotNetReflector 是可以反編譯 IL ( Intermediate Language ,是指.NET包括C#在內編譯後的中間語言)到 C# 的。但這個是不可避免的。

所以,可以使用 DotFuscator 這樣的混淆器來修改變數名,降低反編譯代碼的可閱讀性。

還有,為了防止軟體被反編譯還會修改,可以考慮使用強簽名(Strong Name Signing),這樣即使代碼被修改了,正常情況下就無法再執行了。


實際上,我理解你的關鍵點在於防破解

市面上有專門提供這種服務的公司,應該會比較專業,可以考慮

不過話說回來,破解這事其實也是一個雙刃劍

試想一下,如果當初沒有Office鋪天蓋地的破解,

哪有它今天一統天下的局面?

有時候,破解也是一種推廣宣傳,

你的軟體有價值了,人家才會來破解

在國內這種惡劣的軟體生態環境下,沒辦法啊


樓上幾位有點答非所問了,用C#或java這種編譯為中間代碼的語言從根本上不可能做到真正的編譯,從中間代碼上都很輕易地還原出原始代碼。用混淆只是增加還原後代碼讀懂的難度。

如果要從根本上解決你的問題,辦法就是不把所有代碼放到客戶機上,比如說大部分代碼放在雲上執行,讓用戶無從破解。


兩種努力方向:

1. .NET這個技術其實是適合用來做互聯網軟體的,不適合用來開發單機軟體,所以其中一個思路就是把你的產品給互聯網化,引入伺服器參與。

2. .NET也有將代碼轉換為本機代碼的辦法,.NET開發包里有個叫NGEN的工具,可以把中間代碼客戶端轉換成本機代碼客戶端,用轉換後的客戶端來進行發布,一方面可以增強運行的性能,另一方面也加大了破解的難度。


可以使用 Dotfuscator Community Edition。但是該工具只是改變變數名和進行低級地控制流混淆,可以延長破解者的時間,做一般防範是可以用的。

另外也可以使用一些更為專業的軟體保護工具,比如themida。但是其專業版是要收費的。


不知道樓主有沒有發現好的辦法

我用過.net reflector但是有些dll或者exe是反編譯不了的 不知道別人是怎麼做的

如果樓主知道怎麼防止的話 還望告知

在此多謝了


推薦閱讀:

為什麼說非同步編程是反人類?
程序員真的需要一台 Mac 嗎?
為什麼 Mac 適合編程?
在前端開發中,你曾經遇到過什麼大坑,很久才跳出來?
程序編譯器是否存在這種機制?

TAG:逆向工程 | 軟體 | 破解 | 編程 | 軟體工程 | C# | 安全軟體 |