C#軟體如何良好的防止反編譯被破解?
01-15
用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 適合編程?
※在前端開發中,你曾經遇到過什麼大坑,很久才跳出來?
※程序編譯器是否存在這種機制?