專利名稱:手機軟件加密和驗證方法
技術(shù)領(lǐng)域:
本發(fā)明總體上涉及手機軟件的數(shù)字保護方法。具體來講,本發(fā)明涉及
J2ME (Java 2 Micro Edition)手機軟件的保護,能夠通過特定的軟件加密和 驗證方法防止J2ME軟件被非法用戶使用。
背景技術(shù):
為便于描述和理解本發(fā)明,現(xiàn)給出現(xiàn)有技術(shù)中相關(guān)名詞的解釋如下 OTA: Over The Air,即空中、無線方式
J2ME: Java 2 Micro Edition,即適合小型手持系統(tǒng)(包括移動終端)使用 的Java
MIDP: Mobile Information Device Profile,移動信息設(shè)備描述,是J2ME 的技術(shù)規(guī)范,目前有兩個版本,即MIDP1.0和MIDP2.0。MIDP2.0是MIDPl.O 的升級版本,向下兼容MIDP1.0規(guī)范
JAR: Java Archive, Java包文件
KVM:千字節(jié)級java虛擬機,手機等小型設(shè)備的Java虛擬機,針對這 類設(shè)備內(nèi)存較少的事實,它需要的內(nèi)存以千字節(jié)(k)為單位
Java文件java源代碼文件,通常以.java為擴展名
Class文件編譯后的Java 二進制可執(zhí)行文件,運行在Java虛擬機上, 通常以.class為擴展名
字節(jié)碼(bytecode):特指class文件中包含的二進制可執(zhí)行代碼,是java
虛擬機指令的組合
類(class):是Java語言中功能模塊的基本單位,包含若干個Java Method。 在編譯后的二進制發(fā)布包中,每一個class文件對應(yīng)一個類
MIDlet: MIDlet類是所有J2ME軟件的入口類的超類(父類)。有時候也 使用MIDlet術(shù)語來指一個J2ME軟件
Java Method: Java方法,是Java語言中邏輯組合的基本單位,在其它編 程語言(如C和Pascal)中通常稱為函數(shù)flmction或過程procedure,在編譯
后的class文件中,字節(jié)石馬也是以method為單4立而組合存在的
編譯把源文件轉(zhuǎn)換成可執(zhí)行代碼的過程,在下文中特指從java源代碼 到class文件的轉(zhuǎn)換
反編譯把二進制可執(zhí)行文件還原成源代碼的轉(zhuǎn)換過程,在下文中特指 從class文4牛到Java源文件的轉(zhuǎn)^臭
預(yù)校驗(preverify):使用Java編譯器編譯后的class文件要經(jīng)過預(yù)校驗 處理,處理后的class文件才能正確地被KVM載入運行,J2ME用預(yù)校驗機 制一方面減輕了 KVM的負(fù)擔(dān), 一方面仍然確保了 class文件的正確性。
混淆(obfoscate): —種對二進制可執(zhí)行文件進行處理,在不改變程序運 行邏輯的前提下,通過刪除執(zhí)行文件內(nèi)的調(diào)試和輔助信息,修改變量、方法 名稱,改變包結(jié)構(gòu)等手段,使得處理后的可執(zhí)行文件反編譯得到的源代碼可 讀性大大下降,從而達到保護開發(fā)者知識產(chǎn)權(quán)的方法。
J2ME技術(shù)是由美國sun公司提出的,旨在為手機等小型手持無線設(shè)備提 供可移植的Java擴展機制。從此技術(shù)提出到現(xiàn)在已經(jīng)過了好幾年的時間,得 到了手機廠商、運營商、軟件開發(fā)商的廣泛支持。目前,可以說支持J2ME 的手機已經(jīng)在全世界范圍內(nèi)普及。然而,有調(diào)查數(shù)據(jù)顯示,在中國的Java手 機用戶中,僅有約30%為下載J2ME應(yīng)用和游戲付費,大部分用戶則使用盜 版手機軟件。這是因為,J2ME軟件由于其先天性的安全性缺陷,使得應(yīng)用很 易于破解,且難以對非法傳播進行有效控制。J2ME軟件的非法傳播現(xiàn)象并非 僅在中國出現(xiàn),國外也面臨著類似的情況。
針對J2ME軟件被大量非法復(fù)制和使用的情況,OMA國際組織 (OpenMobileAUiance.org)提出了無線設(shè)備上的DRM (Digital Rights Management,數(shù)字版權(quán)管理)方案,用來防止J2ME軟件被非法傳播。DRM 把內(nèi)容(圖片,鈴聲,主題,游戲,應(yīng)用 )和使用權(quán)限分開,人們對使
用權(quán)付費而不是對內(nèi)容本身付費。然而,OMA的方案需要硬件的特殊支持, 也就是說無法適用于市場上保有的巨大基數(shù)的現(xiàn)有終端。
圖1是現(xiàn)有技術(shù)的一種基于DRM方案的軟件保護方法的示意圖。這種 軟件保護方法是由國外一些公司(比如Wi-software)提出的。按照這種方法, 通過一定的技術(shù)手段,向J2ME軟件中自動加入一些權(quán)限驗證代碼。使用者 在訪問到真正的內(nèi)容之前要先經(jīng)過權(quán)限的檢測,因此,只有通過了權(quán)限檢測 的用戶才能訪問到真正的內(nèi)容。如圖1所示,通過在入口類(MIDlet)嵌入合法
性驗i:正邏輯來進行;f又限檢測,只有通過了澤又限檢測,才可以訪問到軟件主邏輯。
然而,以Wi-software為代表的這種基于DRM方案的軟件保護方法仍然 存在著不足之處。對于普通用戶來講,它能夠起到一些防止非法傳播和使用 的目的,但是,對于經(jīng)驗豐富的破解者來說,比如說掌握了一定破解技術(shù)的 技術(shù)人員,有可能通過"反編譯-刪除權(quán)限檢測代碼-重新編譯-重新打包"這 樣模式化的手段來進行破解。對于這樣的技術(shù)人員,以Wi-software為代表的 這種基于DRM方案的軟件保護方法便起不到應(yīng)有的防解密作用。
圖2是現(xiàn)有技術(shù)的一種基于注冊碼的軟件保護方法。這種方法是由一些 軟件開發(fā)者在開發(fā)過程中,為防止所開發(fā)的軟件日后被非法使用,在程序中 人為的加入了注冊碼驗證機制,要求使用者必須購買 一 個合法的注冊碼或序 列號才能訪問軟件的全部功能。如圖2所示,在軟件主邏輯中加入注冊碼驗 證邏輯。這樣,在軟件運行時,將執(zhí)行注冊碼驗證邏輯,用戶必須使用另行 購得的注冊碼或序列號,才能通過注冊碼驗證邏輯,進而訪問軟件的全部功 能。
然而,由于手機軟件技術(shù)平臺的限制,注冊碼無法與手機終端實現(xiàn)綁定。 也就是說, 一些惡意的用戶完全可以取得一個合法注冊碼后將其與軟件的拷 貝一起傳播。因此這種方案同樣無法有效防止軟件被非法傳播和使用,因而 不能對軟件開發(fā)者的軟件開發(fā)成果進行有效保護。而進一步說,有經(jīng)驗的破 解者同樣可以按照前面說過的方法,定位到注冊驗證代碼,將此代碼刪除或 篡改后重新打包發(fā)布。
由此,需要提供一種更好的軟件保護方法,以防止J2ME軟件被以網(wǎng)絡(luò) 下載等方式非法傳播并使用。
發(fā)明內(nèi)容
本發(fā)明致力于解決上述現(xiàn)有技術(shù)中存在的問題。本發(fā)明的 一 個目的是提 供一種J2ME軟件保護方法,使用java類變形技術(shù),通過直接對手機軟件的 二進制發(fā)布包(JAR包)進行加密處理而提供對手機軟件的可靠的數(shù)字保護。
按照本發(fā)明,使用java類變形技術(shù),直接對手機軟件的二進制發(fā)布包(JAR 包)進行加密處理。處理后的被保護JAR包仍然是一個合法的J2ME程序,可 以正常安裝到手機終端上。但被保護JAR包依賴于由服務(wù)器提供的激活碼才
能正常運行,它會自動向服務(wù)器發(fā)起請求以更新激活碼。
根據(jù)本發(fā)明的一個方面,提供了一種手機軟件加密和驗證方法,包括步
驟a.在手機軟件的二進制發(fā)布包中的多個類文件中加入多個激活碼;b.使 用加入的激活碼設(shè)置對手機軟件的使用權(quán)限;c.在手機軟件被啟動后,檢驗 激活碼的有效性;d.在激活碼為無效的情況下,獲取手機用戶的唯一標(biāo)識; e.利用所獲取的用戶唯一標(biāo)識,向服務(wù)器發(fā)出請求,以獲取更新的激活碼; 和f.如果服務(wù)器判定用戶唯一標(biāo)識正確,則向手機返回更新的激活碼和/或更 新的使用權(quán)限。
根據(jù)本發(fā)明的另一個方面,提供了一種手機軟件加密和驗證方法,包括 步驟a.在手機軟件的二進制發(fā)布包中的多個類文件中加入多個激活碼;b. 使用加入的激活碼設(shè)置對手機軟件的使用權(quán)限;c.在手機軟件被啟動后,檢 驗激活碼的有效性;d.在激活碼為無效的情況下,向服務(wù)器發(fā)出請求,以獲 取更新的激活碼;和e.服務(wù)器識別手機用戶的唯一標(biāo)識,根據(jù)唯一標(biāo)識判斷 是否為合法用戶,并且在判斷為合法用戶的情況下,向手機返回更新的激活 碼和/或更新的使用權(quán)限。
本發(fā)明的軟件保護方法將內(nèi)容和使用權(quán)分開,經(jīng)過加密的內(nèi)容可以任意 傳播,但必須獲得適當(dāng)?shù)氖褂脵?quán)后才能使用該內(nèi)容,使用權(quán)限對象中包含對 內(nèi)容進行解密的必要數(shù)據(jù)。
本發(fā)明的J2ME軟件加密和驗證方法可以基于現(xiàn)有硬件平臺和軟件規(guī) 范,能適用于市場上所有支持J2ME的終端設(shè)備。由于本發(fā)明使得對軟件破 解非常困難,因此能夠有效防止J2ME軟件被非法使用,從而有效遏制盜版。
本發(fā)明也可以完全基于現(xiàn)有硬件平臺和軟件規(guī)范而運行。因此本發(fā)明的 還具有易于實現(xiàn)、成本低的優(yōu)點,在遏制盜版的同時也可靠保護J2ME軟件 的版權(quán)。
通過參照附圖對本發(fā)明進行詳細(xì)說明,本發(fā)明的上述和其它優(yōu)點、特征 將更加清楚。附圖中
圖1是現(xiàn)有技術(shù)的一種基于DRM方案的軟件保護方法的示意圖; 圖2是現(xiàn)有技術(shù)的一種基于注冊碼方案的軟件保護方法的示意圖; 圖3是本發(fā)明的軟件加密和驗證方法的方框圖4是本發(fā)明的激活碼檢驗和更新的流程圖5是圖4的激活碼檢驗和更新過程中的檢驗激活碼有效性的具體流程 圖;和
圖6是圖4的激活碼檢驗和更新過程中的獲取用戶唯一標(biāo)識(ID)的具 體流程圖。
具體實施例方式
圖3是本發(fā)明的軟件加密和驗證方法的方框圖。本發(fā)明的軟件加密和驗 證方法使用Java類變形技術(shù),直接對手機軟件的二進制發(fā)布包(JAR包)中的 多個類(Class)文件進行加密處理。如圖3所示,功能模塊A-D是JAR包中的 類文件,對功能模塊A-D中的全部或部分功能模塊進行加密。在本發(fā)明中, 這種加密可以通過加入激活碼驗證代碼來實現(xiàn)。然而,本發(fā)明并不僅限于這 種方式,也可以通過加入其它的密碼,如隨機產(chǎn)生的加密來實現(xiàn)。
處理后的被保護JAR包仍然是一個合法的J2ME程序,可以正常安裝到 手機終端上。但被保護JAR包依賴于由服務(wù)器提供的全部激活碼才能正常運 行,它會自動向服務(wù)器請求更新激活碼。
按照本發(fā)明,加入的激活碼驗證邏輯并非簡單的集中存在于一個固定的 位置,而是可以存在于多個class文件的Java Method中,甚至遍布所有class 文件的JavaMethod。由于本發(fā)明的激活碼產(chǎn)生邏輯完全在服務(wù)器端,破解者 無法根據(jù)加密內(nèi)容推導(dǎo)出激活碼產(chǎn)生算法。
按照本發(fā)明,所加入的激活碼并不是永久有效的。本發(fā)明對于所加入的 激活碼分配日期和時間限制。例如,激活碼在某個日期(如2006年12月31 日)前有效。或者,激活碼在幾小時 幾天的時間內(nèi)有效。當(dāng)然,對于日期和 時間的限制并不是固定的,而是可以在實現(xiàn)本發(fā)明過程中根據(jù)實際情況選擇。
根據(jù)本發(fā)明,使用權(quán)限以激活碼的形式存在,并且激活碼只在一定日期 或時間限制范圍內(nèi)有效。例如,嵌入的激活碼驗證邏輯可以使用系統(tǒng)日期作 為驗證運算的一個輸入,激活碼必須與系統(tǒng)日期匹配才能通過驗證。使用與 日期不匹配的激活碼將導(dǎo)致程序發(fā)生不可預(yù)知的錯誤。例如,每天第一次運 行的時候,被保護J2ME程序?qū)⒆詣酉蚍?wù)器請求更新激活碼。當(dāng)然,向服 務(wù)器請求更新激活碼的間隔并不限于一天,而可以是幾小時、幾天或更長的 曰期。
根據(jù)本發(fā)明,使用^權(quán)限還可以通過規(guī)定4吏用次數(shù)來限制。例如,可以對 嵌入的激活碼驗證邏輯設(shè)定一個規(guī)定的使用次數(shù),每過一定的時間(如一天 或幾小時),則次數(shù)減l。當(dāng)次數(shù)減到0時,激活碼變?yōu)闊o效,必須更新激活 碼才能繼續(xù)使用軟件。本發(fā)明對次數(shù)的限定并不限于以一定的時間間隔(如 一天或幾小時)來作為次數(shù)遞減的時間單位,本發(fā)明也可以將次數(shù)設(shè)定為每 次專欠件啟動則減1。
本發(fā)明可以采用二進制數(shù)據(jù)作為激活碼。由于二進制數(shù)據(jù)不具有可讀性, 因此難以被抄錄并傳播。另外,由于本發(fā)明對激活碼設(shè)置日期和/或時間限制, 因此,在日期或時間比較短的情況下,使得傳播激活碼的行為喪失了意義。
另外,本發(fā)明也并不限于僅在JAR包的類文件中加入密碼(或激活碼), 而是,本發(fā)明可以將JAR包的入口類(MIDlet)、軟件主邏輯、各個功能模塊 均作為加密的對象。如圖3所示,本發(fā)明的激活碼可以同時加在入口類 (MIDlet)、軟件主邏輯、和多個功能模塊A-D中。
激活碼的檢驗和更新流程
本發(fā)明向JAR包中嵌入的激活碼檢驗和更新邏輯可用下面圖4-圖6的流 程圖來表示。
圖4是本發(fā)明的激活碼檢驗和更新的流程圖。本發(fā)明使用類變形技術(shù)在 客戶端(也就是JAR包)中加入激活碼檢驗和更新邏輯。而在服務(wù)器端,提 供一個對應(yīng)的服務(wù)器端程序,用以產(chǎn)生合法激活碼并根據(jù)客戶端的請求向其 發(fā)放激活碼。服務(wù)器端程序可對激活碼的產(chǎn)生和發(fā)放進行完全的控制,進而
實現(xiàn)各種資費模式。
如圖4所示,在手機上的J2ME軟件被啟動后,在步驟Sl,程序檢驗激 活碼的有效性。如果激活碼有效,則直接進入軟件主邏輯。如果在步驟S1中 判斷出激活碼已變?yōu)闊o效,則在步驟S2獲取用戶唯一標(biāo)識(ID)。在步驟S3, 手機向服務(wù)器發(fā)送請求,以獲取更新的激活碼。響應(yīng)于該請求,在步驟S4, 服務(wù)器在判定用戶唯一標(biāo)識正確的情況下,返回更新的激活碼和更新的使用 權(quán)限。該更新的使用權(quán)項可以是更新的時間或日期限制,也可以是可用次數(shù) 限制。在步驟S5,手機保存用戶ID、更新的激活碼和更新的使用權(quán)限。
圖5是圖4的激活碼檢驗和更新過程中的檢驗激活碼有效性的具體流程 圖。如圖5所示,在步驟Sll,首先判斷是否存在激活碼。如果判斷結(jié)果為
激活碼不存在,則激活碼無效("否"),程序進入圖4的步驟S2,以獲取新 的激活碼。如果在步驟Sll中判斷出激活碼存在,則在步驟S12,進一步判 斷當(dāng)前激活碼使用權(quán)限是否有效,即判斷是否在規(guī)定的使用日期之前、或規(guī) 定的時間長度之內(nèi)、或規(guī)定的可用次數(shù)之內(nèi)。如果判斷結(jié)果為激活碼已無效 ("否"),則進入圖4的步驟S2,以向服務(wù)器請求獲取新的激活碼。如果在 步驟S12中判斷出激活碼的使用權(quán)限有效,即在規(guī)定的使用日期之前、或規(guī) 定的時間長度之內(nèi)、或規(guī)定的可用次數(shù)之內(nèi),則將可用次數(shù)減1,并進入軟 件主邏輯。
在圖5的實施例中,如果所設(shè)置的使用權(quán)限為可用次數(shù),則在判斷為激 活碼的可用次數(shù)大于O的情況下,將可用次數(shù)減l,并進入軟件主邏輯。
圖6是圖4的激活碼檢驗和更新過程中的獲取用戶唯一標(biāo)識(ID)的具 體流程圖。如圖6所示,在步驟S21,手機從本地載入用戶唯一標(biāo)識。該用 戶唯一標(biāo)識可以是手機號碼或設(shè)定的密碼,也可以是由本發(fā)明預(yù)先在JAR包 中嵌入的唯一ID。如果成功獲取用戶唯一標(biāo)識,則進入圖4的步驟S3,以進 一步獲得更新的激活碼。如果在圖6的步驟S21沒有獲取用戶唯一標(biāo)識,則 在步驟S22請求用戶輸入其唯一標(biāo)識(如手機號或密碼)。在步驟S23,手機 檢驗用戶所輸入的標(biāo)識是否有效。如果有效,則進入圖4的步驟S3,以進一 步獲得更新的激活碼。如果無效,則返回步驟S22。
在圖6中,手機在步驟S23檢驗用戶輸入的標(biāo)識是否有效。然而,本發(fā) 明并不限于此,手機可以將用戶輸入的唯一標(biāo)識不經(jīng)過檢驗就發(fā)送到服務(wù)器 側(cè),并由服務(wù)器側(cè)判斷是否為有效的用戶唯一標(biāo)識,并在判斷為有效的用戶 唯 一 標(biāo)識時向手機返回更新的激活碼和新的〗吏用^又限。
上面的流程描述了一種通用的方案,而對于移動網(wǎng)絡(luò)運營商,因為他們 可以直接根據(jù)手機的網(wǎng)絡(luò)請求獲得用戶的唯一標(biāo)識(手機號碼),所以獲取用 戶唯一ID的過程可以省略,這樣流程還能更加簡化。在這種情況下,服務(wù)器 識別手機用戶的唯一標(biāo)識,根據(jù)唯一標(biāo)識判斷是否為合法用戶,并且在判斷 為合法用戶的情況下,向手機返回更新的激活碼和/或更新的使用權(quán)限。在這 種情況下,除了一次網(wǎng)絡(luò)請求之外(出于安全方面的考慮,手機上的Java運 行環(huán)境通常需要用戶確認(rèn)后才允許Java軟件訪問網(wǎng)絡(luò),這點和PC上網(wǎng)不同), 其它的過程完全不需要跟用戶交互,對用戶更加透明,用戶的體驗更好。
激活碼-險證邏輯的 一 個例子
本發(fā)明向JAR包中各個class的多個Java Method中嵌入了激活碼-瞼證邏 輯,以提高破解難度。在本發(fā)明的一種實施方式中,激活碼和當(dāng)日日期匹配。 在這種情況下,加入的代碼是一個簡單的表達式-瞼證,其邏輯可用以下偽代 碼近似表示
if (<當(dāng)日時間碼> <運算> <方法特征碼>)!= <方法激活碼>){ return;
其中
a. <當(dāng)日時間碼>是經(jīng)過運算的本日時間數(shù)字,要求在本日內(nèi)任意兩個時 刻,運算獲得的<當(dāng)日時間碼>相等,而在任意兩不等日期內(nèi)的兩個時刻,運 算獲得的時間碼則不等;
b. <運算>是加、減、異或等算術(shù)或邏輯運算;
c. <方法特征碼>是由本發(fā)明加入的,只與特定方法相關(guān)的特征數(shù)字。服 務(wù)器端記錄所有特征數(shù)字,并產(chǎn)生和其匹配的激活碼;
d. <方法激活碼 > 是從服務(wù)器端獲得的激活碼中的 一 部分(數(shù)組的 一 個或 多個元素)。
在實際應(yīng)用中,本發(fā)明的軟件加密和l^證方法還采用以下手段減少插入 代碼的特征,以防止破解者摸出一定的規(guī)律或模式后編寫電腦程序輔助破解
1. 隨機的把<當(dāng)日時間碼>或<方法激活碼>先賦值給局部變量,再使用局 部變量參與表達式驗證,這樣生成的驗證代碼中使用的虛擬機指令是不一樣 的;
2. 利用加法、異或、邏輯比較等運算滿足交換率的特性,隨機的改變表 達式中各個項的位置;
3. 并不是把插入代碼集中添加到 一個位置,而是在Method的前部隨機找 若干位置分散的插入虛擬機指令;
4. 隨機使用幾種不同的方法來獲取系統(tǒng)時間和運算<當(dāng)日時間碼>;
5. 表達式驗證中用到的靜態(tài)變量,隨機的、分散的分布在各個類中。 將以上幾點組合起來,隨機選用,這樣在最終產(chǎn)生的類文件的字節(jié)碼中
極難找出各個加密點的共同特征或模式,因此編寫程序進行自動破解幾乎不 可能。由于本發(fā)明激活碼產(chǎn)生邏輯完全在服務(wù)器端,破解者也無法根據(jù)加密
內(nèi)容推導(dǎo)出激活碼產(chǎn)生算法。對于試圖進行破解的人來說,他必須找到所有
加密位置,并在所有加密方法的二進制字節(jié)碼上--進行修改,只要有一兩
處遺漏的地方,就會導(dǎo)致程序運行中發(fā)生不可預(yù)知的錯誤。同時,本發(fā)明還
可以對class文件進行有針對性的"反反編譯"處理,處理后的絕大多數(shù)class
文件都不能被主流反編譯器(jad,jode等)完全反編譯,使得"反編#-修
改——重新編譯"的簡單破解方法徹底失效。
在本發(fā)明的這個實施例中,例如,可以使用系統(tǒng)日期或時間作為驗證運 算的一個輸入,激活碼必須與系統(tǒng)日期和時間匹配才能通過驗證。使用與日 期或時間不匹配的激活碼將導(dǎo)致程序發(fā)生不可預(yù)知的錯誤。例如,每隔預(yù)定 的時間(比如 一 天),被保護J2ME程序?qū)⒆詣酉蚍?wù)器請求更新激活碼。
服務(wù)器端的控制
服務(wù)器端的基本職責(zé)是響應(yīng)手機軟件的更新請求,驗證請求合法性, 生成激活碼,并根據(jù)資費模式和用戶定購關(guān)系發(fā)放激活碼。服務(wù)器端比較靈 活,可以根據(jù)具體需求來進行相應(yīng)的擴展。
被保護J2ME軟件向服務(wù)器發(fā)起的激活碼更新請求中可以包含以下參
數(shù)
1. 軟件的唯一編號,服務(wù)器端使用此編號來確定該軟件的資費模式;
2. 用戶的唯一標(biāo)識(手機號/密碼),服務(wù)器端使用此標(biāo)識來識別合法用 戶并維護該用戶的定購關(guān)系;
3. 發(fā)起請求時刻的手機本地時間,因為手機的時間可能和服務(wù)器時間存 在一定誤差,因此服務(wù)器使用此時間來確定誤差量。
服務(wù)器端根據(jù)以上參數(shù)可以選擇是否正?;貞?yīng)
1. 用戶唯一標(biāo)識正確(手機號和密碼匹配),且用戶對軟件擁有有效定購 關(guān)系,則正常發(fā)放激活碼;
2. 用戶唯一標(biāo)識錯誤(手機號和密碼不匹配),拒絕回應(yīng);
3. 用戶對軟件沒有有效定購關(guān)系,拒絕回應(yīng);
4. 同 一位用戶 一天內(nèi)對激活碼請求次數(shù)過多,則認(rèn)為此用戶唯一標(biāo)識已 被非法傳播,可拒絕回應(yīng);
5. 請求中的手機時間和服務(wù)器時間相差過多(比如l天),則認(rèn)為用戶惡 意修改了手機系統(tǒng)時間,可拒絕回應(yīng);
服務(wù)器端向被保護J2ME軟件回應(yīng)的數(shù)據(jù)中包含以下內(nèi)容
1. 狀態(tài)碼,正?;蝈e誤,對于出錯的情況此代碼表示錯誤代碼;
2. 新的激活碼;
3. 新的可用次數(shù),使用可用次數(shù)可以實現(xiàn)計次資費模式。 本發(fā)明的軟件加密和-險證方法有以下幾個技術(shù)優(yōu)點
1. 可以完全基于MIDPl.O技術(shù)規(guī)范實現(xiàn),不需要設(shè)備的特殊支持,可適 用于市面上絕大多數(shù)終端。
2. 本發(fā)明的軟件加密和驗證方法沿用了數(shù)字版權(quán)管理的思想,即把內(nèi) 容和使用權(quán)分開,經(jīng)過加密的內(nèi)容可以任意傳播,但必須獲得適當(dāng)?shù)氖褂脵?quán) 后才能使用該內(nèi)容,使用權(quán)限對象中包含對內(nèi)容進行解密的必要數(shù)據(jù)。本發(fā) 明充分考慮到了現(xiàn)有硬件平臺和軟件技術(shù)的局限性,對各種破解手段均設(shè)計 了相應(yīng)的對策。本發(fā)明是完善、可靠、健壯的DRM解決方案,把內(nèi)容本身 與內(nèi)容的使用權(quán)限成功的剝離。內(nèi)容已被加密,可以用任意方式傳播,能夠
限也可以使用多種方式、通過多種渠道進行銷售??梢詫崿F(xiàn)以使用時間和使 用次數(shù)為單位的,非常靈活的資費控制模式。
3. 通過技術(shù)手段,直接對最終的二進制可執(zhí)行文件(.class文件)進行加 密。開發(fā)者在開發(fā)流程中完全不必考慮版權(quán)保護問題,而可以把精力全部投 入到內(nèi)容的開發(fā)上。
4. 激活碼更新流程定期發(fā)生(例如, 一天只發(fā)生一次),對用戶體驗的影 響很小。而加入的激活碼驗證代碼對軟件的性能影響極小。
5. 加入的代碼非常精簡,對軟件發(fā)布包體積的影響很小,且可以通過改 變加密點的數(shù)量來進行控制,
綜上所迷,本發(fā)明的軟件加密和驗證方法將軟件的內(nèi)容本身與其使用權(quán) 限進行了有效的分離,拷貝可以自由的傳播,但必須獲得適當(dāng)?shù)募せ畲a和相 應(yīng)的使用權(quán)限才能正常使用。激活碼的產(chǎn)生和權(quán)限的發(fā)放則完全由服務(wù)器控 制,安全而可靠。本發(fā)明使得J2ME等無線軟件易于傳播的特性不再成為軟 件開發(fā)者的敵人,相反,成為他們拓展市場的有力途徑。
雖然上面參照特定實施例對本發(fā)明進行了說明,但是很明顯的,在不脫 離本發(fā)明的主要精神和范疇的前提下,可以對這些實施例進行各種修改和改 變。所以,應(yīng)該將說明書和附圖理解為示例性的而非限制性的。
權(quán)利要求
1.一種手機軟件加密和驗證方法,包括步驟a.在手機軟件的二進制發(fā)布包中的多個類文件中加入多個激活碼;b.使用加入的激活碼設(shè)置對手機軟件的使用權(quán)限;c.在手機軟件被啟動后,檢驗激活碼的有效性;d.在激活碼為無效的情況下,獲取手機用戶的唯一標(biāo)識;e.利用所獲取的用戶唯一標(biāo)識,向服務(wù)器發(fā)出請求,以獲取更新的激活碼;和f.如果服務(wù)器判定用戶唯一標(biāo)識正確,則向手機返回更新的激活碼和/或更新的使用權(quán)限。
2. —種手機軟件加密和驗證方法,包括步驟a. 在手機軟件的二進制發(fā)布包中的多個類文件中加入多個激活碼;b. 使用加入的激活碼設(shè)置對手機軟件的使用權(quán)限;c. 在手機軟件^皮啟動后,檢驗激活碼的有效性;d. 在激活碼為無效的情況下,向服務(wù)器發(fā)出請求,以獲取更新的激活碼;和e. 服務(wù)器識別手機用戶的唯一標(biāo)識,根據(jù)唯一標(biāo)識判斷是否為合法用 戶,并且在判斷為合法用戶的情況下,向手機返回更新的激活碼和/或更新的 使用權(quán)限。
3. 如權(quán)利要求1或2所述的方法,其中,如果所述步驟c的判斷結(jié)果為激活碼有效,則手機被正常啟動并進入正 常使用狀態(tài)。
4. 如權(quán)利要求l或2所述的方法,其中, 所述手機軟件的使用權(quán)限為使用日期限制。
5. 如權(quán)利要求1或2所述的方法,其中, 所述手機軟件的使用權(quán)限為使用時間限制。
6. 如權(quán)利要求l或2所述的方法,其中,所述手機軟件的使用權(quán)限為手機軟件的可用次數(shù)限制,在每次手機軟件 被啟動時,預(yù)定的可用次數(shù)減l。
7. 如權(quán)利要求1或2所述的方法,其中,所述激活碼為二進制數(shù)據(jù)或文本數(shù)據(jù)。
8. 如權(quán)利要求1或2所述的方法,其中,在步驟a中,還在手機軟件的二進制發(fā)布包入口類加入激活碼,并且,插入的激活碼 可以是位于類文件中的多個位置的分散的插入虛擬機指令。
9. 如權(quán)利要求1或2所述的方法,其中,激活碼和當(dāng)日日期匹配,其加入的激活碼可用以下偽代碼近似表示 if (<當(dāng)日時間石馬> <運算> <方法特4正石馬>)!= <方法-敫活石馬>){ return;其中a. <當(dāng)日時間碼>是經(jīng)過運算的本日時間數(shù)字,要求在本日內(nèi)任意兩個時 刻,運算獲得的<當(dāng)日時間碼>相等,而在任意兩不等日期內(nèi)的兩個時刻,運 算獲得的時間碼則不等;b. <運算>是加、減、異或等算術(shù)或邏輯運算;c. <方法特征碼>是只與特定方法相關(guān)的特征數(shù)字,服務(wù)器端記錄所有特 征數(shù)字,并產(chǎn)生和其匹配的激活碼;d. <方法激活碼>是從服務(wù)器端獲得的激活碼中的一部分,即數(shù)組的一個或多個元素。
10. 如權(quán)利要求1或2所述的方法,其中,在所述步驟(d)中所獲取的手機用戶的唯一標(biāo)識為手機號碼或用戶設(shè)定的用戶名/密碼或預(yù)先嵌入二進制發(fā)布包的唯一標(biāo)識。
11. 如權(quán)利要求1或2所迷的方法,其中,所述步驟c包括cl.判斷手機軟件中是否存在激活碼,并在判斷結(jié)果為激活碼不存在的 情況下執(zhí)行所述步驟d;c2.如果步驟cl的判斷結(jié)果為激活碼存在,則判斷當(dāng)前激活碼的使用權(quán) 限是否有效,并在當(dāng)前激碼的使用權(quán)限為無效的情況下執(zhí)行所述步驟d。
12. 如權(quán)利要求l所述的方法,其中,在所述步驟d中,所述用戶的唯一標(biāo)識可以從手機本地載入或由用戶輸 入或從手機的網(wǎng)絡(luò)請求中獲得。
13. 如權(quán)利要求12所述的方法,其中,向服務(wù)器所發(fā)出的請求包括 手機軟件的唯一編號; 用戶的p喪一標(biāo)識;和發(fā)起請求時刻的手才幾本地時間。
14.如權(quán)利要求13所述的方法,其中,所述服務(wù)器根據(jù)所述請求所包括 的數(shù)據(jù)是否正確,來確定是否生成更新的激活碼以及相應(yīng)的使用權(quán)限。
全文摘要
本發(fā)明提供了一種手機軟件加密和驗證方法,能夠通過特定的軟件加密和驗證方法防止J2ME軟件被非法用戶使用。該方法包括步驟a.在手機軟件的二進制發(fā)布包中的多個類文件中加入多個激活碼;b.使用加入的激活碼設(shè)置對手機軟件的使用權(quán)限;c.在手機軟件被啟動后,檢驗激活碼的有效性;d.在激活碼為無效的情況下,獲取手機用戶的唯一標(biāo)識;e.利用所獲取的用戶唯一標(biāo)識,向服務(wù)器發(fā)出請求,以獲取更新的激活碼;和f.如果服務(wù)器判定用戶唯一標(biāo)識正確,則向手機返回更新的激活碼和/或更新的使用權(quán)限。
文檔編號H04W12/02GK101106771SQ20061010146
公開日2008年1月16日 申請日期2006年7月10日 優(yōu)先權(quán)日2006年7月10日
發(fā)明者磊 王 申請人:磊 王