簡體   English   中英

在客戶端加密文件

[英]Encrypt file on client side

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

我正在考慮創建一個.lic或.txt或其他任何要加密的文件,並用新的.lic或.txt等進行更新時,它將更改客戶端可以使用該軟件的次數。 。

事實是,我認為該方法不是非常可靠,因為即使加密了,客戶端也可能能夠破解並理解該文件。

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

PS:無法通過互聯網驗證該軟件,如果我不是通過互聯網驗證該軟件的使用且不會出現此問題,則客戶端必須能夠脫機使用該軟件。

首先,我必須同意簡單地說,這將是不安全的評論。 即使它們是正確的,對於開發人員來說也很容易解決,但仍然有防止/阻止其他99%人口的有效需求。 這就是DRM面臨的同樣的戰斗,總是有1%的人願意花時間來解讀您正在做的事情並解決它。 但是,讓我們繼續前進,如何實現這一目標...

步驟1-您需要一個“計數器”來知道您的應用程序已運行了多少次。 不幸的是,這只會使用戶感到困惑,因為您的應用程序必須能夠讀取該值。 通常,通過在注冊表和文件系統中的多個位置隱藏值來實現這種混淆。 有時,您會發現此信息是使用主機上可用的信息,BIOS,CPU類型,HDD ID等“加密的”(實際上是被加密算法模糊處理的)。

歸根結底,執行計數器的這種存儲和混淆是您的“秘密調味品”,而唯一難以逆轉的事情是將您正在做的事情嚴格保密,(大多數混淆形式都依賴保密)。 因此,在為您提供解決方案方面我沒有真正的價值,一旦在此處發布,它就不再是秘密了:)

第2步 -完成此計數器的工作后,您需要向用戶提供“許可證”。 這實際上是最簡單的部分, PKI加密可以很好地為您提供幫助。 您想要的是僅由您控制的私鑰,而客戶端軟件的公鑰則在某處進行了硬編碼。 然后,您可以使用私鑰對客戶端的許可證文件進行“ 數字簽名 ”。 當您的客戶端加載許可證文件時,它將驗證簽名以確保此許可證文件已由相關的私鑰簽名,從理論上講,由於只有您可以訪問此密鑰,因此意味着您已授權此許可證。

步驟3-現在,您需要提供一種方法來驗證此計數器未超過許可的使用次數。 這應該很簡單。

問題與解決方案

  1. 這種解決方案最明顯的攻擊是對代碼進行反向工程。 您將需要使用.NET模糊處理庫或編寫非托管代碼來解決此問題。

  2. 下一個最可能的攻擊是使用調試器跳過此驗證。 那里有很多反調試文章。 我找到的最完整的標題為“ 反逆向工程指南 ”。

  3. 應該考慮的另一種攻擊是對可執行文件的修改。 像執行許可證一樣對可執行文件簽名並驗證其簽名,以防止直接編輯代碼。

  4. 執行計數器的存儲將是顯而易見的目標,請確保將其存儲在多個位置,並且如果其中任何一個被篡改,則可以采取適當的措施。

最后 ,所有這些都不足以阻止堅定的個人成功擊敗您的許可策略。 立即接受,並根據普通用戶的計算機能力水平以及收入損失與實施成本之間的關系,僅執行您認為需要的程度。 換句話說,您實施了一些非常愚蠢且基本的操作,並期望20%的用戶可以解決。 根據您的客戶,您認為在20%的用戶中,不到四分之一的用戶實際上會繞過您的DRM,而不是支付許可證費用。 因此,您希望損失5%的可能收入,例如您每年賺100萬,這意味着您損失了5萬美元的收入。 現在問問自己,我是否花了X美元的時間使某人難以規避,這在什么時候變成負收益? 當然,在預期損失5萬的情況下,您不想花一年的時間進行DRM工作。

坦白地說,我認為大多數采用DRM的應用程序都可以減少很多工作。 如果您的應用程序定價合理,那么人們會為此付費。 對於那些會規避您的DRM的人們來說,他們可能還是不會購買您的應用程序,因此您並沒有真正失去任何東西。 如果我在您的位置,我會在此問題上留出固定的時間(一周?),然后在該期限內盡您所能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM