授權模式
電子授權一般採用“一次開發,多次授權”的機制,將軟體代碼與授權方案區分開來。電子授權主要有雲授權和本地授權兩種模式。
雲授權
雲授權是完全由伺服器進行授權存儲和驗證的強授權模式。它的獨特之處在於所有與授權相關的安全數據及運算都交由Internet伺服器完成。客戶端需要通過網路連線調用伺服器方法,並與伺服器保持心跳連線。雲授權的優勢是安全性非常高,並且可以由伺服器進行實時管理,但要求客戶端具有長期線上的聯網能力。
雲授權在國外的遊戲軟體中套用比較廣泛。包括育碧(Ubisoft)和暴雪(Blizzard)在內的頂級遊戲軟體製作商都在最新產品中包含了類似雲授權的技術,並取得了很好的保護效果。國際上最大的線上遊戲銷售平台Steam也對雲授權提供了支持。
本地授權
是較為傳統的電子授權方式。當客戶端應用程式連線伺服器完成線上激活之後,伺服器會在客戶端生成一個與本地硬體指紋綁定的客戶端許可檔案,並記錄客戶端的激活信息。開發商可以對本地授權設定“智慧型連線”和“強制認證”兩個伺服器驗證屬性。在這種情況下,本地授權會自動(智慧型連線模式)或在指定周期內(強制認證周期,如15天)與伺服器連線一次,完成授權的周期性驗證和升級。
本地授權支持以下幾種模式:
1、單機授權——授權用於一台或多台單獨的終端電腦。
2、集團授權——授權用於集團內部。集團授權需在區域網路內安裝單獨的本地授權服務,並為集團管理員提供了本地管理工具界面。
3、試用授權——授權用於實現軟體的試用功能。試用授權使用相同的授權碼,可用於任意數量的客戶端機器。每一個客戶端都可在試用期內進行軟體試用。
電子授權安全性設計
從安全形度考慮,電子授權的安全設計主要有下面幾個重點。
環境指紋的選取和採集
電子授權對套用環境的軟、硬體指紋的選取基於三個原則:
1、具有一定程度的唯一性。
2、不易被複製。
3、對不同指紋進行組合。
目今為止,一般用戶的計算機上還不存在具有高度唯一性並且無法被修改的軟、硬體指紋特徵。可以採用下面的選取策略:
(1)選取一、兩種不可被修改且具有較好唯一性的指紋作為主硬體指紋,如CPU特徵。CPU特徵中包含了廠商信息、型號、批次、製程及出廠設定等眾多信息,不同客戶端上重複的幾率很低。
(2)選取幾種輔助指紋信息,用於降低環境指紋重複率。如網卡、硬碟信息等。
(3)選取幾種參考指紋信息,不用於環境綁定判斷,但可用於軟體開發商進行人工識別和判斷參考。如機器名、用戶名、IP位址和軟體版本等。
通過上面的策略,可以得到唯一性非常高的可靠的環境指紋信息。由於CPU等硬體信息是無法被修改的,因此安全性很高。
安全庫調用過程保護
前面提到,軟體破解的方法之一是監視客戶端安全庫API調用過程,並偽造返回結果。相比基於專用硬體的保護方式,電子授權對API調用過程保護有自己的優勢和劣勢:
1、雲授權由網際網路上的授權伺服器進行應用程式的授權和API調用的實現,客戶端與伺服器之間的通信使用隨機會話密鑰,具有很高的安全性。
2、基於本地環境指紋採集的API調用過程的通訊數據無法被完全加密。套用軟體與安全庫之間的通訊是安全的,但採集指紋必須基於標準的系統功能調用。
3、與系統功能有關的系統調用很難被篡改,而且修改過程容易給系統造成損害,影響用戶的正常使用。
綜合來說,經過精心設計的電子授權API調用過程可以獲得很高的安全強度,迫使破解者必須通過分析或修改安全庫才能了解或繞過具體安全過程,使對API過程的破解失去意義。
逆向工程破解保護
一旦破解者採用對應用程式進行逆向工程的破解方法,其安全程度已經與底層授權機制無關,更多的取決於軟體開發商在集成授權模組代碼時所套用的安全技巧。
最簡單有效的安全技巧包括在應用程式的多個關鍵位置進行授權驗證、API調用點與返回值判斷點的距離要遠、儘量讓API返回結果與應用程式運行狀態相關等等。
雙因素保護機制
客戶端安全庫可以採用“雙因素保護”的安全機制。簡單的說,就是將本地授權機制與伺服器驗證相結合。
雙因素保護不僅為客戶端授權驗證增加了一重保護,而且因為在伺服器驗證的同時對客戶端信息作了記錄,為軟體破解提供了可追蹤和可補救的可行方案。
破解者完全移除應用程式代碼中的安全驗證比軟體破解本身要困難得多。
這是因為一般的軟體破解都以“軟體功能可用”為目的。這一方面是因為破解者希望減少破解時間;另一方面也是從技術上,破解總是以軟體運行時的出錯點或API調用點為基礎而進行的。
因此,絕大部分的破解版軟體都不能做到100%的破解。這對於傳統的本地授權方式(包括基於專用硬體的保護方式)沒有太大的影響,但對的雙因素機制來說,軟體開發商可以因此對破解行為進行追蹤,或對破解進行補救。
舉例來說,軟體開發商可以在軟體代碼的非關鍵路徑上調用客戶端安全庫的Update函式,並根據返回值進行錯誤處理。每次調用Update函式時,如果客戶端存在網路連線,將會在伺服器端留下相應的記錄,並同步開發商在管理系統中的設定。如果發生破解,開發商將會發現同樣的授權碼在不同的機器上的使用記錄,進而可以選擇禁用這些授權碼。應用程式將在下一次Update時對自身狀態進行更新。
開發商也可以針對破解程度,選擇快速發布一個軟體的升級補丁,這個升級補丁對得到授權的用戶將可以正常安裝,而非授權用戶在安裝時將無法通過伺服器驗證,必須再次實施破解過程或者繼續使用老的應用程式版本。