我想避免我的程序很容易將許可證驗證程序部分從中刪除。手動混淆所需的思路
我不希望使用商業混淆,因爲:
- 成本。雖然他們可以比我做得更好 - 他們也不會讓它不可能破解,只是更難。
- 似乎有時混淆器會在生成的 代碼中導致錯誤。
顯然,我會保留一個未經模糊處理的副本進行維護。
我想避免我的程序很容易將許可證驗證程序部分從中刪除。手動混淆所需的思路
我不希望使用商業混淆,因爲:
顯然,我會保留一個未經模糊處理的副本進行維護。
我曾經不得不在客戶可以修改的代碼中隱藏許可證驗證程序。可以想象,如果他們知道在哪裏尋找,他們可以將其刪除。這是我當時使用的一些技巧。
我要補充一點,所有這一切都是可擊敗,並可能導致嚴重的維護問題,但在我的特別情況下,它的工作。
謝謝。這是我正在尋找的答案類型。 – ispiro 2012-04-18 15:57:49
不難通過調試器追蹤。 – 2012-04-19 01:03:49
是的,但是如果你試圖欺騙的人擁有調試器並且完全訪問你的源代碼,那麼你可能需要更強大的東西。 – SouthShoreAK 2012-04-19 02:46:25
如果您的目的是讓它更難但並非不可能,一種方法是有多個代碼點來檢查您的許可證文件是否有效。
比方說你有一些關鍵的,像這樣
abc-def-fhi-asdf
所以,四個部分的密鑰的許可文件。然後,我們將創建四種不同的方法來檢查密鑰的各個部分。
通過這樣做,並改變通過代碼使用的方法(理想情況下,在運行時隨機選擇驗證方法),您將使刪除驗證變得非常困難。除此之外,一種方法是創建一個發佈過程,將發佈過程內聯到您的驗證方法中,並在每次調用時微妙地更改驗證方法。
例如是這樣的:
*user clicks a common function
// [VALIDATION STUB]
*perform user action
新的發佈過程中,通過代碼運行,拉出// [證實STUB]與您的驗證代碼替換它(編譯代碼之前),這正如我所說,應該儘可能每次都有所不同。
從我的回答中拉出來的主要原因是混淆很難,但並非不可能。特別是如果你自己辭去惡意用戶最終會破壞的現實
我有一些建議,你可能會覺得有用。
當然,您可以使用Visual Studio附帶的免費混淆器。這比沒有好。
其次你可以編寫你的許可證驗證碼,一旦它工作正常,儘可能地重構它,將類名,成員變量,局部變量和方法改爲類似c1,v1,l1,m1等等。這基本上是混淆器所做的。
三,完成以上所有操作。第四,在非託管代碼(C++,Delphi)中編寫你的許可證驗證,並將其命名爲像core.dll,net.dll等重要的DLL。你也可以在那裏放置一些誘餌方法,它們不會做任何重要的事情。從代碼的多個位置對該DLL進行多次調用,並假裝您對這些調用的結果進行了一些操作。
手動混淆還可能導致最終結果中的錯誤。具有更高的可行性。 – 2012-04-18 15:46:09
重複? http://stackoverflow.com/questions/1857685/how-to-create-own-dotnet-obfuscator – 2012-04-18 15:47:31
加上VS2010包括dotfuscator社區版。 – 2012-04-18 15:47:32