2010-12-03 187 views
5

是否有可能提供一種服務,在該服務中,每個設備都有一個免費試用版,而不會有可能在單個設備上獲得多個免費試用版的可能性。如果不可能的話,你是否知道一種難以獲得多個免費試用的方法。是否可以針對每個設備進行單個試用?

+0

請注意,Android ID顯然不是唯一的 - 據稱這裏有一個型號/固件版本,所有設備都有相同的ID。 – 2010-12-03 07:06:01

+0

我這樣做:)也是Windows Mobile。請注意,Android上的唯一設備ID很難實現。 – 2011-01-20 17:10:49

回答

11

您可以根據設備的唯一ID,請求日期和您自己的私鑰生成許可證密鑰,以創建僅在特定日期有效的許可證。

您的應用程序將通過使用您的公鑰解碼許可證密鑰並比較其過期日期和設備ID來驗證許可證密鑰是否有效。人們無法僞造虛假請求,因爲許可證密鑰僅對規定的日期和給定的設備ID有效。

(提示:瞭解公鑰加密)

但是,它不是完全萬無一失。真正確定的攻擊者可以根據他的設備,並安裝一個自定義固件,允許他控制由「getDeviceId()」返回的標識符。這不是大多數人願意做的事情,大多數人寧可找到另一種免費的應用程序,或者只是購買應用程序,而不是通過該路線。有了這種決心和技巧的反擊者,你可以做的事情不多。

另一種攻擊途徑是用攻擊者的私鑰/公鑰組合替換你的應用程序中附帶的公鑰,並且他可能會寫一個可以爲僞造的應用程序生成許可證密鑰的密鑰生成器。您可以通過對自己的可執行文件進行自我驗證來使此攻擊變得困難。

但是,沒有安全方案是萬無一失的,java/android應用程序可以被反向設計,並且確定的黑客可以僞造您的應用程序並禁用其許可證檢查。防止未經授權使用應用程序的唯一簡單方法是根本不分發應用程序。

3

當然,但您需要設置爲將設備標識符存儲在您自己的服務器上。在iPhone上,你可以使用獲得

UIDevice *device = [UIDevice currentDevice]; 
NSString *uniqueIdentifier = [device uniqueIdentifier]; 

你可能會做一個數據庫調用和acompare uniqueIdentifier到您的存儲列表中的UDID,確保只有一個試驗可以爲每個設備被激活。

在android中,getDeviceID()爲您提供了唯一的設備標識符。請查詢the documentation瞭解更多信息。

1

如果我沒有遺漏什麼東西,我的解決方案會很簡單。我將使應用程序提供的服務到期,而不是應用程序本身。這可以通過使用像oAuth這樣的令牌機制來完成。 (帶有相當一生的到期令牌,在這種情況下是您的試用期)。在客戶端註冊過程中,我將根據android設備ID和請求的時間創建請求令牌。 Checkout oAuth可能很麻煩,但幾乎所有主要服務提供商都使用它。

4

我想你可以得到99%的更復雜的方案的效果與腦死 - 簡單的方案:只是在設備上的某個地方存儲文件,表明該試驗已過期。當然,懂技術的用戶可以找到並刪除文件,但絕大多數人不會打擾 - 設備對他們來說是一塊魔法板塊,干擾內部文件可能會讓那些小小的侏儒們瘋狂地兜售屏幕。

通過隱藏鎖定文件,根據設備ID更改名稱和位置,您可以使事情變得更具挑戰性 - 這樣,對於某人分享關於如何逃避您的試用計劃的指示,要困難得多。

正如其他答案所指出的那樣:沒有一個系統是萬無一失的,總會有人比你更聰明,誰會津津樂道破解你的計劃。訣竅是不要浪費你的時間給這個人一個精神鍛鍊,而是迎合大多數人。

1

如何存儲WiFi適配器的MAC地址?可能在您的服務器上,如果該MAC已經註冊,您的應用程序將查詢服務器。

WITH USER'S PERMISSION在第一次運行應用程序時,如果當前設備的MAC地址已經註冊,則查詢服務器?如果沒有,請將MAC地址存儲在您的服務器上。如果已經註冊,請讓用戶購買該應用程序以繼續使用。

這種方法可以由Lie Ryan提出的一些加密算法作爲補充,以提供額外的安全性和鎖定和/或試用期。

我對iPhone不太瞭解,但我相信每個iPhone都有WiFi適配器,每個WiFi適配器都有唯一的MAC地址。同時檢查此解決方案的法律方面,因爲存儲MAC可能會引發隱私問題。所以,在使用這個之前,請檢查適用的法律。

相關問題