2012-04-18 44 views
0

我想避免我的程序很容易將許可證驗證程序部分從中刪除。手動混淆所需的思路

我不希望使用商業混淆,因爲:

  1. 成本。雖然他們可以比我做得更好 - 他們也不會讓它不可能破解,只是更難。
  2. 似乎有時混淆器會在生成的 代碼中導致錯誤。

顯然,我會保留一個未經模糊處理的副本進行維護。

+4

手動混淆還可能導致最終結果中的錯誤。具有更高的可行性。 – 2012-04-18 15:46:09

+0

重複? http://stackoverflow.com/questions/1857685/how-to-create-own-dotnet-obfuscator – 2012-04-18 15:47:31

+2

加上VS2010包括dotfuscator社區版。 – 2012-04-18 15:47:32

回答

2

我曾經不得不在客戶可以修改的代碼中隱藏許可證驗證程序。可以想象,如果他們知道在哪裏尋找,他們可以將其刪除。這是我當時使用的一些技巧。

  1. 給你的驗證者類,程序集名稱和變量名稱,看起來像他們實際上做別的事情。
  2. 從代碼的多個部分調用驗證者。
  3. 在調用中添加一個隨機數發生器以進行驗證,以便有時運行,有時不運行。這會使得難以知道驗證碼實際來自哪裏。

我要補充一點,所有這一切都是可擊敗,並可能導致嚴重的維護問題,但在我的特別情況下,它的工作。

+0

謝謝。這是我正在尋找的答案類型。 – ispiro 2012-04-18 15:57:49

+0

不難通過調試器追蹤。 – 2012-04-19 01:03:49

+0

是的,但是如果你試圖欺騙的人擁有調試器並且完全訪問你的源代碼,那麼你可能需要更強大的東西。 – SouthShoreAK 2012-04-19 02:46:25

1

如果您的目的是讓它更難但並非不可能,一種方法是有多個代碼點來檢查您的許可證文件是否有效。

比方說你有一些關鍵的,像這樣

abc-def-fhi-asdf 

所以,四個部分的密鑰的許可文件。然後,我們將創建四種不同的方法來檢查密鑰的各個部分。

通過這樣做,並改變通過代碼使用的方法(理想情況下,在運行時隨機選擇驗證方法),您將使刪除驗證變得非常困難。除此之外,一種方法是創建一個發佈過程,將發佈過程內聯到您的驗證方法中,並在每次調用時微妙地更改驗證方法。

例如是這樣的:

*user clicks a common function 
// [VALIDATION STUB] 
*perform user action 

新的發佈過程中,通過代碼運行,拉出// [證實STUB]與您的驗證代碼替換它(編譯代碼之前),這正如我所說,應該儘可能每次都有所不同。

從我的回答中拉出來的主要原因是混淆很難,但並非不可能。特別是如果你自己辭去惡意用戶最終會破壞的現實

+0

謝謝。但是我不明白「有一個發佈過程可以證明你的驗證方法」這個部分 - 它會以什麼方式提供幫助? – ispiro 2012-04-18 16:00:40

+0

通過增加代碼存在的位數,它會讓別人更難以破解它。發佈過程本質上是將代碼中的許多地方注入您的驗證代碼(目前可能只有一種方法,通過刪除該方法可輕鬆破解)。 – Jroc 2012-04-18 16:02:00

+0

明白了。謝謝。 – ispiro 2012-04-18 16:03:35

0

我有一些建議,你可能會覺得有用。

當然,您可以使用Visual Studio附帶的免費混淆器。這比沒有好。

其次你可以編寫你的許可證驗證碼,一旦它工作正常,儘可能地重構它,將類名,成員變量,局部變量和方法改爲類似c1,v1,l1,m1等等。這基本上是混淆器所做的。

三,完成以上所有操作。第四,在非託管代碼(C++,Delphi)中編寫你的許可證驗證,並將其命名爲像core.dll,net.dll等重要的DLL。你也可以在那裏放置一些誘餌方法,它們不會做任何重要的事情。從代碼的多個位置對該DLL進行多次調用,並假裝您對這些調用的結果進行了一些操作。