我正在創建軟件的全功能試用版。現在,因爲我不想有時間限制(比如30天試用版)或者功能有限的試用版,所以用'用戶可以執行軟件的次數'試用版會很好。軟件試用 - 限制使用次數
它是一個基於C#的.NET應用程序,我正在努力想出一個方法來實現這一點。嘗試過的註冊表項,基於文件的跟蹤等,但他們似乎不是很可靠。
真的很感謝這個話題的幫助。
感謝, 羅漢
我正在創建軟件的全功能試用版。現在,因爲我不想有時間限制(比如30天試用版)或者功能有限的試用版,所以用'用戶可以執行軟件的次數'試用版會很好。軟件試用 - 限制使用次數
它是一個基於C#的.NET應用程序,我正在努力想出一個方法來實現這一點。嘗試過的註冊表項,基於文件的跟蹤等,但他們似乎不是很可靠。
真的很感謝這個話題的幫助。
感謝, 羅漢
正常的兩種方式試用期保持跟蹤的是一個註冊表項,並使用Web服務:
註冊表項:實現一些方法在Windows註冊表中將一些程序啓動項存入一個密鑰中,可能會造成某種混淆。一種「鹽味」加密方案,在這種方案中,你加密一個包含你的價值的方案加上一些與機器有關的值,比如網卡的MAC地址,可能效果最好;確保你的代碼很難反編譯,使用Dotfuscator之類的東西。最好將密鑰放在使用安裝程序的地方,以便程序可以簡單地將密鑰的缺失視爲篡改的嘗試。
然後,在啓動時,檢索密鑰,解密並檢查它。如果這是您所期望的,請將該值加1,將其寫回註冊表,如果新值大於允許的啓動次數,則鎖定用戶。如果註冊表項永遠是您不期望的值(意味着它們被篡改了),包括根本不存在,只需將用戶鎖定即可。
這種方法的優點是它提供了非常強大的安全性,無需互聯網。缺點是「機器相關」細節可能會因合法原因而發生變化,如果發生這種情況,用戶在使用所有開始之前就會被鎖定,這可能會阻止用戶。此外,用戶的計算機上還存在用於醃製和加密的實施;一個複雜的黑客將有辦法檢查你的程序,即使你混淆了代碼,並且可以發現你的實現並模仿它來「重置」櫃檯。只需要一個人就可以做到這一點,並且會有一個簡單的Warez應用程序來允許其他人執行此操作。
Web服務:在您控制的服務器上實現WCF服務。將其鎖定嚴密,所以從局域網外部進出的唯一方法就是通過WCF端口完全按照WCF預期的方式進行。現在在你的程序和安裝程序中實現一個客戶端。在安裝時,安裝程序將調用一種服務方法,說明該軟件正在安裝在具有特定MAC地址或硬件ID的計算機上。如果您的數據庫中沒有列出該獨特的機器,請添加它;否則不要做任何事情。然後,在程序啓動時,從您的程序中調用Web服務,傳入相同的信息,Web服務將更新啓動次數,並返回一個值,告訴客戶端是否允許啓動。
Web服務的優勢在於,通過Warez可以大規模銷售的方式非常困難;攻擊這種系統的主要方式是破解許可證服務器,或者放入一個「中間人」,他可以將程序請求的Web服務重定向到他控制的計算機。缺點是對計算機硬件ID的更改仍然可能導致過早鎖定,或者更糟糕的是,允許攻擊者僅僅僞造一個您以前從未見過的新MAC地址或硬件ID,然後重新安裝軟件用戶在「新」機器上啓動一組新的啓動。也有辦法可以防止這種情況發生,但是每增加一層混淆和反黑客檢查都會增加複雜性。
無論你做什麼,請記住80/20規則;通過確保試用過程的最基本措施,80%的用戶將會保持誠實。 20%的用戶會找到解決辦法。在這20%中,其中80%將受到您採取的任何額外措施的阻礙。這個過程是遞歸的;重點在於某個人會在任何地方避開任何措施,但如果數學成立,96%的用戶會面對轉移加密的註冊表鍵和混淆程序時付出全額訪問權限碼。你可以通過添加其他任何東西來達到99.2%的用戶,比如用特定機器來詆譭密鑰。
非常感謝你的想法。我相信註冊表方法應該這樣做,因爲無線認證可能會削弱我的服務器,並且肯定會減慢用戶體驗,因爲每次用戶打開軟件時都需要進行認證;有時候他們不會連接到互聯網。 – Rohan 2012-03-02 06:47:04
什麼問題? – 2012-02-29 18:46:34
產品密鑰和基於Web的授權,產品被鎖定,直到Auth完成?比我聰明的人可能會有更好的想法。 – FGhilardi 2012-02-29 18:47:28
您選擇了最不可靠的試用模式之一,那麼您爲什麼驚訝它不是很可靠? – CodesInChaos 2012-02-29 19:06:28