2011-12-08 165 views
0

我打算創建一個應用程序,它將在客戶端的計算機上運行。該程序將允許客戶使用該軟件N次,然後爲了使客戶能夠再次使用該軟件,他/她需要購買X次以使用該軟件。這將像是購買許可證或令牌(我不知道它們是否相同,因爲我的英語不太好)。客戶端加密文件

我正在考慮創建一個.lic或.txt或其他任何會被加密的東西,並且當用新的.lic或.txt等進行更新時,它會改變客戶端能夠訪問的次數使用該軟件。

事情是,我不認爲這種方法是非常可靠的,因爲即使加密,客戶端也能夠破解和理解這個文件。

有人能幫我解決這個問題嗎?

PS:軟件無法通過互聯網驗證,客戶端必須能夠離線使用軟件,如果不是,我會通過互聯網驗證軟件的使用情況,並不會有這個問題。

+1

你如何跟蹤軟件運行的次數?這看起來似乎比破解加密許可證更容易被利用。 – UnhandledExcepSean

+3

不管你做什麼,加密密鑰總是必須在客戶端系統的某個地方。沒有辦法完全保證這一點,你只能試圖讓客戶很難打破你的設計。 – Darhuuk

+0

回答第一條評論:我仍然沒有辦法監控客戶使用該軟件的次數。我正在考慮通過許可證文件或類似的東西來做到這一點。回答第二個問題:所以就像我在想。我將不得不創建一個加密文件,每次客戶端使用該軟件時都會對其進行更改。有沒有其他方式可以爲用戶創造更多的障礙? – morcillo

回答

1

首先,我必須同意評論,簡單地說,這將是不安全的。儘管他們是正確的,但開發人員很容易解決問題,但仍然有可能需要/希望阻止其他99%的人口。這是DRM面臨的同樣的戰鬥,總有那些願意投入時間來解讀你正在做的事情和解決它的1%的人。但讓我們繼續談談如何實現這一目標......

步驟1 - 您需要一個「計數器」來知道您的應用程序運行了多少次。不幸的是,這隻會被用戶混淆,因爲你的應用程序必須能夠讀取這個值。這種混淆通常是通過隱藏註冊表和文件系統中幾個地方的值來實現的。偶爾你會發現這些信息是'加密的'(實際上它被加密算法混淆),使用主機,BIOS,CPU類型,硬盤ID等信息。

最終這個存儲器和執行計數器的混淆是你的'祕訣',唯一讓你難以逆轉的是保持你正在做的密切保密的祕密(因爲大多數形式的混淆依賴於保密)。由於這個原因,我並沒有真正提供給你一個解決方案的價值,一旦在這裏發佈它不再是祕密:)

第2步 - 一旦你有這個櫃檯工作,你需要提供給用戶的'許可'。這實際上是簡單的部分,並且PKI cryptography可以很好地爲您服務。你想要的只是一個只有你自己控制的私鑰,而你的客戶端軟件的公鑰是在某個地方被硬編碼的。然後你使用你的私鑰來'digitally sign'爲客戶的許可證文件。當您的客戶端加載許可證文件時,它會驗證簽名以確保此許可證文件由相關私鑰簽名,理論上只有您有權訪問此密鑰,這意味着您已授權此許可證。

第3步 - 現在您需要提供一種方法來驗證此計數器是否未超過許可使用次數。這應該是直截了當的。

問題和解決方案

  1. 這樣的解決方案最明顯的攻擊將是逆向工程的代碼。您需要通過.NET obfuscation庫或編寫非託管代碼來解決此問題。

  2. 下一個最有可能的攻擊是使用調試器跳過此驗證。那裏有很多反調試文章。我發現的最完整的標題是「An Anti-Reverse Engineering Guide」。

  3. 應該考慮的另一個攻擊是修改你的可執行文件。簽署您的可執行文件並驗證其簽名,就像您將獲得許可證一樣,以防止直接編輯代碼。

  4. 您的執行計數器的存儲器將是一個明顯的目標,請確保將其存儲在多個位置,如果其中任何一個已被篡改,您可以採取適當的措施。

最後,所有這一切都將不足以防止確定個人從成功擊敗你的授權策略。根據您的平均用戶的計算機能力水平以及收入損失金額與實施成本的差異,現在就接受並根據您的需要實施。換句話說,你實現了一些非常愚蠢和基本的東西,並期望有20%的用戶能夠找到答案。根據您的客戶,您認爲20%的用戶中只有不到四分之一的用戶會實際規避您的DRM,而不是爲許可證支付費用。所以你希望在你的可能收入中有5%的收入減少,比如說你每年賺100萬,那意味着你的收入會減少5萬。現在問問自己,我是否花了X美元讓自己的時間變得更難以避開,在什麼時候它會成爲負面回報?當然,在預計損失5萬美元的情況下,你不會想花費一年時間研究DRM。

老實說,我認爲大多數採用DRM的應用程序可以用很少的工作來完成。如果你的應用價格合適,人們會爲此付費。對於那些會規避DRM的人來說,他們可能不會購買你的應用程序,所以你並沒有真正失去任何東西。如果我在那裏放置了固定的時間花費在這個問題上,(一個星期?),並且只做你能在這個時間限制內做的事情。

+0

非常適合。非常感謝,你的回答可能會對我有很大的幫助。如果我找到解決方案,我會將它張貼出來供人破解。 – morcillo