2014-09-24 73 views
-1

這是我一直在研究了幾個月,並需要幫助來自社區的一個問題:如何強制許可限制爲SDK

我建立一個原生SDK(.LIB和.h文件)上Windows是我的客戶購買並使用它爲其最終客戶構建有用應用程序(.exe文件)的可銷售產品:這是大多數SDK供應商的常見用例。

我想制定一個授權計劃,以便我的客戶無法與其他人共享他們的SDK副本。但是,他們可以免費分發他們使用SDK構建的最終應用程序,而無需向每位最終客戶請求許可證。

我在過去已經編寫了多個許可方案,這些方案限制軟件在運行時僅在存在正確的被許可人(基於時間,節點鎖定,浮動)的情況下工作。然而,這個項目需要一個在鏈接時發生的許可檢查:當開發者試圖將他們的代碼鏈接到我的.lib文件時,這個鏈接檢查應該允許鏈接器只有在他們有有效的許可證時才能通過。

所以我想知道在CL.exe(ms visual studio)中是否有可用的鏈接器鉤子,它允許我調用自定義許可證檢查模塊。

最終用戶不需要許可證即可運行最終產品也很重要。

我研究了所有可用的鏈接選項,但無法找到任何有用的東西。

+0

我依稀記得IPP(英特爾性能原語)有這個功能,他們不會讓你鏈接,直到你有一個有效的許可證。我會嘗試窺探它並檢查它是如何工作的。有人知道嗎? – kumaakh 2014-09-24 15:03:47

回答

3

的prooblem:

據我所知,許可實施是不是MS連接的功能。即使如此,也不會阻止您的客戶使用另一個鏈接器,因爲庫文件具有已知的定義。

這個問題是圖書館分發的內在問題:在基於圖書館的SDK中,您可以爲您的客戶提供構建好應用程序所需的所有內容,而無需向您提供帳戶。沒有什麼能阻止開發者將你提供給他的所有東西都複製給其他人。唯一能讓他們依靠你的想法是你提供的支持和保證。

的潛在解決方案

你可以存儲在庫中牌你的客戶的信息,並告知一下。開發商仍然可能會違反許可證,但他們會知道你會發現漏洞並可以起訴他們。這會讓他們更不願意分享你的工作。

難點在於您的分發基礎架構必須能夠爲每個客戶生成獨特的lib文件。從實際的角度來看,我建議使用兩個lib文件:一個用於真正的庫,另一個用於許可證信息(又名包含全局外部變量的定義,持有加密的許可證信息)。

在Windows上,您甚至可以更進一步:在exe文件的清單或屬性中,有幾個適用於控件的供應商特定字段(版權,發佈者,公共keu令牌,...)。您可以要求提供此信息以生成許可證庫文件,並且首先調用庫函數,您可以將這些信息與嵌入庫中的許可證信息進行交叉檢查。

其他信息

1)靜態數據是不夠的:

只要有庫文件中的信息是不夠的。您的客戶可以簡單地用虛假信息替換您的許可證信息,或將其清除。因此加密數據非常重要,以符合特殊的校驗和。您的庫然後實現單件控制功能,第一步是控制許可證數據的有效性。

2)你的客戶是developpers,所以他們的聰明如你

什麼阻止他們逆向工程的庫和補丁你控制功能?或者找出您使用的校驗和並計算虛擬許可證信息?

結論

有一定的方法來執行這種方案,但它們對於你昂貴的(額外developpment,複雜的分佈),並有足夠的努力,有可能將其禁用。另一方面,如果它對客戶過於束縛,他們會簡單地使用另一個庫。

如果我是你,我真的會考慮兩次。功能強大的圖書館的快樂客戶傾向於忠於他們的供應商。特別是如果提供響應式支持!那爲什麼要麻煩?爲什麼不從一開始就建立一個信任你的客戶關係?