Neo's Life

星期三, 10月 18, 2006

License Management - Protection! Licensing Framework for Java

一、前言

老泰最近收到老闆的命令,說是要研究一下公司產品的License 管理。可能是因為最近產品要部署到非Windows 的環境,所以才發現原本License 管理的架構要porting 到Unix-like 的環境很麻煩。所以放眼望去全公司只有老泰,身上穿著短袖、短褲,腳下踩著夾腳鞋,手上拿個扇子還在那煽啊煽......就是這傢伙,過太爽。就這樣工作就派到老泰的頭上。

不知道這算好還是壞,以前沒玩過這方面的東西,能夠玩玩也不錯。但是又想想,每次為了產品study 或 survey新的技術或工具都很累,特別是非常傷眼力、腦力。總而言之,心裡很矛盾。說起來,搞產品的人還真命苦。做個產品因為怕人Decompile 竊取公司的資產,所以還要搞個Code protection。再來就是還得弄個Installer,方便客戶安裝。這還不夠,又怕客戶不付錢,還要做個License 管理。想到就辛苦,還是做專案好。

說實在的,中國人特別討厭License Management。老泰在網路上找了半天,沒有幾篇中文網頁再討論這個話題。就算有也只是一兩行,敷衍的帶過。另外,找了幾個做License Management的產品,想說大陸的網站上很多都有提供'合法測試用的序號'。沒想到什麼軟體工具都有,就是找不到有關License Management的。想想也對,中國有13億人口,可能將近一半的人在幹'破解'這一行。自然根本不會有這類軟體的需求,難怪找不到。

二、License Management

License Management 不知道要怎麼定義。老泰的定義是:License Management 是要告訴客戶,誰是老大,並且在客戶付錢之前,先給客戶一些甜頭,但是又不能過頭的一種軟體保護機制。總之它主要的目的是要達到

  1. Copy protection
  2. Demo license conrtol
  3. Feature control
  4. User licensing

這些是基本大多廠商提供的功能,當然根據每個License Management產品的不同也有提供自家獨有的賣點,如License 後端管理功能是否健全完善、License delivery的機制等。

三、Protection! Licensing Framework for Java

老泰對Protection! 的瞭解並不深,目前還是停留在功能的研究。還沒有正式開始下去implement ,因為懶.......。所以不用期待會有多深入的探討。當然,老闆的態度也很重要,這決定了老泰是不是要對該產品深入的瞭解。

Protection! 是一組Java-based的Framework。這是他們非常強調的,也就是說。不是你買來,用了他們的工具,滑鼠拖拉一下,按個按鈕License就做完了。還必須靠Developer 來給它'整合'一下。Protection! 給人的感覺是很簡單,沒有太過複雜的設定、也沒有必要架設複雜的License Sever。這是最令人感到高興的。 簡單說一下它的功能,可以說他大致上都涵蓋了上述的四個目的 - Copy Protection, Demo License Control, Feature Control, User Licensing。廣度大至上是做足夠了,深度做到什麼樣的程度?老泰現在也說不准,大家自己判斷好了。但是除了基本的功能外,Protection!也做足了有關License Delivery的機制。以及對某些Resource 做CRC 判斷的功能。這應該算是有些加分的效果吧。

其實最令老泰感興趣的是有關Floating License這功能是怎麼做到的。特別印象深刻的是,手冊上寫Protection! 在驗證License 時是UDP 來Broadcasting 給所有的User。然後分析每個user 的response,最後如果超過了人數的上限,再呼叫某個Interface 的某個Method。如此一來,就不用有License Server,架構也簡單許多。但是,整個機制是怎麼做到的?有沒有什麼限制?恐怕還是要實際implement 後才會有明確的答案。或許過兩天有空,研究一下Protection! 是怎麼做到的在跟大家報告一聲。

另外有個有趣的東西是CRC檢驗的功能。在Protection! 手冊裡提到,該功能可以有效避免惡意的更新程式。這個基本上的概念並不難,但是實際在提供這個功能時Protection! 似乎並不周全。當然很有可能是老泰並不瞭解。CRC的驗證是根據使用者所選擇要做的資源為對象,來進行SHA-1或MD5演算。然後,再進行License的驗證前,先驗證這些資源的完整性,使否有被非法的惡意程式修改或置換。但是,Protection! 在保存這個Digest 時並沒有特別的處理。並且將這些必須驗證的資源與這個Digest放在同一個Class 裡面。這就是不能理解的地方了。這樣做只要有心人士換掉這個Class,那麼CRC驗證的功能就形同廢物。當然,可能是老泰還沒弄懂之間的奧秘吧。阿彌陀佛.....#$%^

上圖為Protection! 的Control Center。什麼東西啊?說明白了就是License Generator,就是幫你產生License的工具。這個工具最主要的功能就是幫你產生License file。至於怎麼在你的產品裡面做驗證,這個還得要靠Developer。當然,Protection! 有一組API 來做這件事,所以放心,不難做。

在為你的產品產生License前,必須先設定產品基本的資料。

Feature Control相關的設定介面。

設定不同的Edition有什麼樣的Feature

Copy Protection相關設定的介面。如上圖'Lock License to'的區域。

CRC相關的設定介面,在視窗的上面可以增加要保護的資源檔案與路徑。視窗中間有可以產生Digest的按鈕,該按鈕可以自動幫你修改下面的code snippet。

該介面根據設定來產生License file,這個介面可以設定Demo license control與User licensing。

標籤: ,

0 個意見:

張貼留言

訂閱 張貼留言 [Atom]



<< 首頁