對,我在談論桌面應用程序中的許可證驗證碼,例如方法bool ValidateLicense(string licenseCode)
。當然,任何保護方案都可以由熟練和堅定的裂解工人逆向工程。但是,我想阻止任何具有一些基本編程知識的人都可以在幾分鐘內使用Reflector構建一個keygen。如何保持.NET程序邏輯(合理)的祕密?
可能的方法
模糊處理。我的理解是混淆導致性能開銷並可能妨礙(合法的)調試。那麼是否有工具只允許混淆選定的方法?
將方法移動到ngen'ed程序集或非託管DLL。但是,這不是簡單地替換DLL的邀請嗎?任何想法如何防止這種情況(閱讀:讓攻擊者有點難)?
其他?
PS:問題顯然與Protect .NET code from reverse engineering?試圖把思緒從那裏練
UPDATE
到1之間的第一混淆一步肯定會重新命名的驗證方法。 (謝謝,Jonathan)
至2.假設應用程序使用Win32 API方法,可以通過非託管DLL重新路由調用,從而使它成爲應用程序的組成部分。擺弄方法簽名(例如更改名稱,交換參數)會使這一點變得不那麼明顯。你認爲先天的缺點是合理的嗎?
至3. 請勿分發驗證方法屬於此處。將它保存在你的服務器上並遠程調用,即使用在線驗證(謝謝David Hedlund)
我們決定不使用模糊處理,並使用簡單的許可證密鑰機制和在線激活。當然,這可能是「破解」(事實上是這樣)。我們的計算如下:使用盜版軟件的用戶永遠不會購買該工具,而且我們還可以分發更多的軟件。雖然不夠完美,但還是比較努力保護軟件和編寫好工具的(更好的)「保護」。 – 2012-07-19 07:00:38
使用一個隱蔽的虛擬機,聯機驗證的組合以及使用在線驗證服務提供的隨機VM代碼來處理代碼中的一些重要(但不是性能關鍵的)部分。甚至將部分基本功能(不僅僅是驗證)轉移到在線服務中。 – 2012-07-19 08:13:27