簡體   English   中英

如何編寫超級簡單的軟件激活系統?

[英]How to program a super simple software activation system?

我有一份我寫的共享軟件,我想在互聯網上發布。 我有一個序列號類型的東西設置,但仍然有大量的密鑰共享:(。我想添加一個系統,一旦用戶輸入序列,它與我的服務器檢查,以確保它是有效的簡單是關鍵。

-Client使用php類型的東西“www.mywebsite.com?key=3434343”將序列號的MD5發送到網頁

-Php腳本采用MD5並根據簡單數據庫進行檢查。 如果數據庫中存在MD5密鑰,它會遞增與該密鑰關聯的計數器,並生成顯示1的網頁。如果數據庫中沒有條目,則腳本會生成顯示0的網頁。

-Client讀取網頁並檢查0或1並相應地采取行動。

我將在數據庫中手動輸入有效密鑰(md5'd)並監視活動密鑰以進行過多激活。 我對php一無所知,所以我不知道這是否有效。 這看起來足夠好嗎? 有明顯的安全漏洞嗎? 我將使用共享主機。 有沒有更好的辦法? 謝謝

實際上,您的方案中存在幾個明顯的安全漏洞。

首先,用戶可以將本地互聯網流量重定向到假冒您的網站,但始終顯示“1”。

第二個是每個鍵只對X“激活”有好處,但是如果消息在傳輸中丟失,那么太糟糕了 - 計數器仍然會增加。 你需要一些方法來驗證一切正常; 查看頁面是不夠的。

第三是黑客程序認為它從你的網站得到“1”將是世界上最容易的事情。

不要實施自己的復制保護。 它只會惹惱合法用戶,甚至不會減慢真正的海盜速度。 要么使用復雜的商業系統,要么(更好的是!)試圖打擊導致用戶竊取您的程序的任何動機。 這可能是你的價格太高,或者他們覺得你不尊重他們。 人們做事是有原因的。

你缺乏對密鑰的重要理解......關鍵是MD5的形式,它將包含字母和數字字符,請將此視為一個示例:

3c102d6b53a7a8723e694f1417c2abfe

你打算怎么生成鑰匙? 憑什么你生成的關鍵?

我也看到,這是使用如下參數傳遞密鑰到網站:

www.mywebsite.com?key=3434343

黑客需要一段時間才能找到一個密鑰...隨着處理器速度和密鑰生成的出現......它將立即被破解,更多的是,你將暴露你的腳本....不要低估黑客/破解者可以做什么來打破腳本...這是你在帖子中沒有提到的,沒有任何安全防御!

此外,沒有提及使用安全證書進行身份驗證而不是嚇跑最終用戶,甚至更糟糕的是,防病毒掃描程序可能會將站點標記為可疑,因此最終用戶被鎖定在應用程序之外.....

底線:不要嘗試這樣的安全方案,因為它們是虛假的經濟,無論哪種方式,它都相當於吸引火焰的飛蛾,當應用程序“受到保護”時,黑客/破解者將試圖繞過它而不管是什么你想...你會開玩笑地思考並欺騙自己,你是一個出色的程序員,而你夢寐以求的計划是萬無一失的 - 不要 ......遠離這些方案......

我會回應在評論中提出的關於為什么你應該考慮不這樣做,或者至少不自己這樣做的觀點。 但是如果你真的想(和/或出於教育目的),對於像這樣的系統,我會選擇非對稱加密。

基本上,我們的想法是生成公鑰​​/私鑰對,將公鑰嵌入應用程序中,並將私鑰保留在服務器上。 要注冊,您的應用程序副本會將序列號發送到您的服務器。 服務器上的PHP腳本將檢查其數據庫中的序列號,確定注冊是否有效,如果是,則服務器發回使用其私鑰加密的序列號。 然后,您的程序可以使用公鑰解密收到的消息,將解密的版本與序列號進行比較,如果匹配,則可以自行激活。 當然,這不會阻止(半)確定的黑客,但它確實消除了解決您在問題中給出的方案的最簡單方法,即將請求重定向到始終返回1的站點。

如果您擔心未加密的互聯網上的序列號,您可以在程序將序列號發送到服務器之前使用公鑰加密序列號。 並且當服務器響應時,它將發回(1)服務器上生成的隨機數和(2)隨機數和序列號的加密散列,而不是發送回加密的序列號。 或者使用HTTPS,它做類似的事情。 但是,如果你試圖防止有能力和動機攔截你的程序和服務器之間的通信的人,你需要的不僅僅是這個簡單的方案,因為那個人幾乎肯定擁有更復雜的工具供他/她使用。 在這種情況下,您需要一個信譽良好的商業DRM系統,以便最有可能保護您的計划。 在那一點上,我會問自己這是否真的值得。

暫無
暫無

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

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