專利名稱:一種移動終端的軟件水印實現(xiàn)方法及其移動終端的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及移動終端軟件安全領(lǐng)域,尤其涉及一種移動終端軟件的水印實現(xiàn)方法,以及一種具有軟件水印功能的移動終端。
背景技術(shù):
手機(jī)軟件作為一種特殊的軟件形式,具備了體積小、軟件運行性能效率要求高、易被復(fù)制或改動等特點,特別是大規(guī)模的手機(jī)版本軟件的非法復(fù)制、篡改和濫用使得手機(jī)軟件開發(fā)商難以控制,所以從法律和技術(shù)方面加強手機(jī)軟件的版權(quán)保護(hù)措施勢在必行。
從技術(shù)方面來說,對手機(jī)軟件版權(quán)的保護(hù)可以借助“水印”技術(shù)。通常可以在手機(jī)軟件代碼的冗余區(qū)域嵌入代表版權(quán)信息的數(shù)字、字符、logo圖片甚至是一段音頻作為水印信息,這些水印信息的存在不依賴于軟件的運行狀態(tài),可以在存放、分發(fā)以及運行時被驗證,它們在軟件編制時或編制完成后被直接加入到軟件程序當(dāng)中。但這種方法有一個共同的缺陷,那就是水印信息本身相對來說容易被攻擊者識別,一旦攻擊者成功地檢測并識別到水印信息,他們會很容易對其進(jìn)行破壞甚至篡改。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是提供一種不易被篡改的移動終端軟件的水印實現(xiàn)方法,本發(fā)明要解決的另一個技術(shù)問題是提供一種不易被篡改軟件水印的移動終端。
本發(fā)明的技術(shù)問題通過以下技術(shù)方案加以解決 一種移動終端軟件的水印實現(xiàn)方法,包括以下步驟 A.水印生成模塊將水印數(shù)字轉(zhuǎn)化為以數(shù)據(jù)結(jié)構(gòu)形式存儲的水印代碼; B.嵌入模塊將所述水印代碼嵌入移動終端軟件。
上述步驟A具體包括以下步驟 A1.選擇單元選擇自然數(shù)N作為水印數(shù)字; A2.編碼單元對步驟A1的水印數(shù)字進(jìn)行編碼; A3.轉(zhuǎn)換單元將編碼后的水印數(shù)字轉(zhuǎn)化為以數(shù)據(jù)結(jié)構(gòu)形式存儲的水印代碼。
上述自然數(shù)N可分解成兩個素數(shù)的乘積。
上述步驟A2具體通過將步驟A1的自然數(shù)N表示成以m+1為基數(shù)的表達(dá)式來進(jìn)行編碼,其中0≤ei<m+1;步驟A3所述的數(shù)據(jù)結(jié)構(gòu)包括二叉樹。
上述二叉樹節(jié)點數(shù)目為2m,葉節(jié)點數(shù)目為m,每個節(jié)點具有左、右兩個指針,非葉節(jié)點的左指針指向左子節(jié)點、右指針指向右子節(jié)點,上述二叉樹包括一個頭節(jié)點,上述頭節(jié)點的左指針指向上述二叉樹的右下節(jié)點,上述頭節(jié)點的右指針指向上述二叉樹的根節(jié)點,上述二叉樹非葉節(jié)點右子樹左下節(jié)點的左指針指向該非葉節(jié)點左子樹右下節(jié)點,上述二叉樹左下節(jié)點的左指針指向上述頭節(jié)點;上述步驟A3還包括按照預(yù)設(shè)規(guī)則使用上述二叉樹葉節(jié)點右指針中包含的信息來表示ei的過程。
上述預(yù)設(shè)規(guī)則包括設(shè)定上述二叉樹的右下葉節(jié)點右指針包含的信息為e0,從該葉節(jié)點開始沿順時針方向的葉節(jié)點右指針包含的信息依次表示ei;上述使用葉節(jié)點右指針包含的信息來表示ei具體通過下式實現(xiàn)
其中Li為所述葉節(jié)點,j為上述葉節(jié)點Li的右指針指向的葉節(jié)點Lj的下標(biāo)。
上述方法,還包括以下步驟 C.水印生成模塊將至少一個偽水印數(shù)字進(jìn)行編碼并轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)存儲的偽水印代碼; D.嵌入模塊將所述偽水印代碼嵌入移動終端軟件; E.驗證模塊對偽水印代碼進(jìn)行驗證。
上述步驟C還包括選擇單元選擇手機(jī)軟件代碼中的常量作為偽水印數(shù)字的過程,上述常量為自然數(shù)。
步驟E所述驗證具體通過驗證模塊對所述偽水印代碼進(jìn)行解碼,當(dāng)解碼得出的結(jié)果與步驟C中選擇的常量相比發(fā)生改變時進(jìn)行報警。
一種移動終端,包括水印生成模塊,用于將水印數(shù)字轉(zhuǎn)換成數(shù)據(jù)結(jié)構(gòu)存儲的水印代碼;嵌入模塊,用于將所述水印代碼嵌入移動終端軟件。
上述水印生成模塊包括選擇單元,用于選擇自然數(shù)N作為水印信息; 編碼單元,用于對水印數(shù)字進(jìn)行編碼;轉(zhuǎn)換單元,用于將編碼后的水印數(shù)字轉(zhuǎn)化為以數(shù)據(jù)結(jié)構(gòu)形式存儲的水印代碼。
上述自然數(shù)N為兩個素數(shù)相乘所得的自然數(shù)。
上述編碼單元還用于將所述選擇單元的自然數(shù)N表示成以m+1為基數(shù)的表達(dá)式來進(jìn)行編碼,其中0≤ei<m+1;所述轉(zhuǎn)換單元還用于將所述表達(dá)式轉(zhuǎn)化為二叉樹。
上述二叉樹的節(jié)點數(shù)目為2m,其中葉節(jié)點數(shù)目為m,每個節(jié)點具有左、右兩個指針,非葉節(jié)點的左指針指向左子節(jié)點、右指針指向右子節(jié)點,上述二叉樹包括一個頭節(jié)點,上述頭節(jié)點的左指針指向上述二叉樹的右下節(jié)點,上述頭節(jié)點的右指針指向所述二叉樹的根節(jié)點,上述二叉樹非葉節(jié)點右子樹左下節(jié)點的左指針指向該非葉節(jié)點左子樹右下節(jié)點,上述二叉樹左下節(jié)點的左指針指向所述頭節(jié)點;上述轉(zhuǎn)換單元還用于按照預(yù)設(shè)規(guī)則使用上述二叉樹葉節(jié)點右指針中包含的信息來表示ei。
上述預(yù)設(shè)規(guī)則包括上述二叉樹的右下葉節(jié)點右指針包含的信息為e0,從該葉節(jié)點開始沿順時針方向的葉節(jié)點右指針包含的信息依次表示ei;所述轉(zhuǎn)換單元還用于按照下式使用葉節(jié)點右指針包含的信息來表示ei
其中Li為所述葉節(jié)點,j為上述葉節(jié)點Li的右指針指向的葉節(jié)點Lj的下標(biāo)。
上述水印生成模塊還用于將至少一個偽水印數(shù)字進(jìn)行編碼并轉(zhuǎn)換成數(shù)據(jù)結(jié)構(gòu)存儲的偽水印代碼;上述嵌入模塊還用于將所述偽水印代碼嵌入移動終端軟件;上述移動終端還包括驗證模塊,用于對偽水印代碼進(jìn)行驗證。
上述選擇單元還用于選擇手機(jī)軟件代碼中的常量作為偽水印數(shù)字,所述常量為自然數(shù)。
上述驗證模塊還用于對所述偽水印代碼進(jìn)行解碼,當(dāng)解碼得出的結(jié)果與為水印數(shù)字相比發(fā)生改變時進(jìn)行報警。
本發(fā)明與現(xiàn)有技術(shù)相比較的有益效果是 (1)本發(fā)明通過將水印數(shù)字轉(zhuǎn)化成以數(shù)據(jù)結(jié)構(gòu)形式存儲的水印代碼,隱藏在移動終端軟件中,由于數(shù)據(jù)結(jié)構(gòu)中的某些信息為動態(tài)生成,相對于通常使用的水印來說更加難以破解,增加了軟件水印的安全性; (2)選擇自然數(shù)N作為水印數(shù)字,自然數(shù)N可分解成兩個素數(shù)的乘積,分解難度大,使水印信息更加安全; (3)水印代碼存儲為二叉樹結(jié)構(gòu),可以通過數(shù)組或鏈表的方式實現(xiàn),其連接指針的具體值在每次運行時動態(tài)生成,給攻擊者帶來極大干擾;同時也便于對被修改的水印信息進(jìn)行修復(fù); (4)本發(fā)明還在終端軟件中嵌入偽水印代碼,使攻擊者難以找到真正的水印代碼; (5)偽水印數(shù)字選擇終端軟件中的常量,如攻擊者進(jìn)行修改,將導(dǎo)致報警,甚至使移動終端軟件無法正常運行。
圖1是本發(fā)明移動終端具體實施方式
結(jié)構(gòu)示意圖; 圖2是本發(fā)明方法具體實施方式
流程圖; 圖3是本發(fā)明方法具體實施方式
水印編碼結(jié)構(gòu)圖; 圖4是本發(fā)明方法具體實施方式
生成偽水印流程圖; 圖5是本發(fā)明方法具體實施方式
偽水印編碼結(jié)構(gòu)圖。
具體實施例方式 下面用具體實施方式
結(jié)合附圖對本發(fā)明做進(jìn)一步詳細(xì)說明。
如圖1所示,本發(fā)明移動終端,其一種實施方式,包括水印生成模塊和嵌入模塊。水印生成模塊用于將水印數(shù)字轉(zhuǎn)換成數(shù)據(jù)結(jié)構(gòu)存儲的水印代碼,嵌入模塊用于將水印代碼嵌入移動終端軟件。
水印生成模塊進(jìn)一步包括選擇單元、編碼單元和轉(zhuǎn)換單元。選擇單元用于選擇自然數(shù)N作為水印信息。編碼單元用于對水印數(shù)字進(jìn)行編碼。轉(zhuǎn)換單元用于將編碼后的水印數(shù)字轉(zhuǎn)化為以數(shù)據(jù)結(jié)構(gòu)形式存儲的水印代碼。
根據(jù)“大數(shù)分解難”的基本理論,自然數(shù)N可選擇一個代表版權(quán)信息的大自然數(shù),進(jìn)一步地,自然數(shù)N可分解成兩個素數(shù)P和Q的乘積,以進(jìn)一步增加分解難度。
編碼單元還可以用于將所選擇的自然數(shù)N表示成以m+1為基數(shù)的表達(dá)式來進(jìn)行編碼,其中0≤ei<m+1;轉(zhuǎn)換單元還用于將編碼單元的表達(dá)式轉(zhuǎn)化為二叉樹。
二叉樹的節(jié)點數(shù)目為2m,其中葉節(jié)點數(shù)目為m,每個節(jié)點具有左、右兩個指針,非葉節(jié)點的左指針指向左子節(jié)點、右指針指向右子節(jié)點,二叉樹包括一個頭節(jié)點,頭節(jié)點的左指針指向二叉樹的右下節(jié)點,頭節(jié)點的右指針指向所述二叉樹的根節(jié)點,二叉樹非葉節(jié)點右子樹左下節(jié)點的左指針指向該非葉節(jié)點左子樹右下節(jié)點,二叉樹左下節(jié)點的左指針指向頭節(jié)點;轉(zhuǎn)換單元還用于按照預(yù)設(shè)規(guī)則使用二叉樹葉節(jié)點右指針中包含的信息來表示ei。
該預(yù)設(shè)規(guī)則包括所述二叉樹的右下葉節(jié)點右指針包含的信息為e0,從該葉節(jié)點開始沿順時針方向的葉節(jié)點右指針包含的信息依次表示ei;轉(zhuǎn)換單元還用于按照下式使用葉節(jié)點右指針包含的信息來表示ei
其中Li為所述葉節(jié)點,j為所述葉節(jié)點Li的右指針指向的葉節(jié)點Lj的下標(biāo)。
水印生成模塊還用于將至少一個偽水印數(shù)字進(jìn)行編碼并轉(zhuǎn)換成數(shù)據(jù)結(jié)構(gòu)存儲的偽水印代碼;所述嵌入模塊還用于將所述偽水印代碼嵌入移動終端軟件。
選擇單元還用于選擇手機(jī)軟件代碼中的常量作為偽水印數(shù)字,該偽水印數(shù)字為自然數(shù)。當(dāng)該常量為浮點型量時,將其轉(zhuǎn)化為整型量。
在一種實施方式中,該偽水印數(shù)字可以分解成兩個素數(shù)的乘積。
本實施方式還包括驗證模塊,用于對偽水印代碼進(jìn)行解碼,當(dāng)解碼得出的結(jié)果與為水印數(shù)字相比發(fā)生改變時進(jìn)行報警。
報警可以通過移動終端顯示出錯信息,軟件退出運行狀態(tài)來實現(xiàn)。
本發(fā)明一種移動終端軟件的水印實現(xiàn)方法,其一種實施方式,包括以下步驟 A.將水印數(shù)字轉(zhuǎn)化為以數(shù)據(jù)結(jié)構(gòu)形式存儲的水印代碼; B.將所述水印代碼嵌入移動終端軟件。
A具體包括以下步驟 A1.選擇自然數(shù)N作為水印數(shù)字; A2.對步驟A1的水印數(shù)字進(jìn)行編碼; A3.將編碼后的水印數(shù)字轉(zhuǎn)化為以數(shù)據(jù)結(jié)構(gòu)形式存儲的水印代碼。
該自然數(shù)N可分解成兩個素數(shù)的乘積。
步驟A2具體通過將步驟A1的自然數(shù)N表示成以m+1為基數(shù)的表達(dá)式來進(jìn)行編碼,其中0≤ei<m+1;所述步驟A3所述的數(shù)據(jù)結(jié)構(gòu)包括二叉樹。
二叉樹節(jié)點數(shù)目為2m,葉節(jié)點數(shù)目為m,每個節(jié)點具有左、右兩個指針,非葉節(jié)點的左指針指向左子節(jié)點、右指針指向右子節(jié)點,二叉樹包括一個頭節(jié)點,頭節(jié)點的左指針指向所述二叉樹的右下節(jié)點,頭節(jié)點的右指針指向所述二叉樹的根節(jié)點,二叉樹非葉節(jié)點右子樹左下節(jié)點的左指針指向該非葉節(jié)點左子樹右下節(jié)點,二叉樹左下節(jié)點的左指針指向頭節(jié)點;步驟A3還包括按照預(yù)設(shè)規(guī)則使用二叉樹葉節(jié)點右指針中包含的信息來表示ei的過程。
預(yù)設(shè)規(guī)則包括設(shè)定所述二叉樹的右下葉節(jié)點右指針包含的信息為e0,從該葉節(jié)點開始沿順時針方向的葉節(jié)點右指針包含的信息依次表示ei;使用葉節(jié)點右指針包含的信息來表示ei具體通過下式實現(xiàn)
其中Li為所述葉節(jié)點,j為所述葉節(jié)點Li的右指針指向的葉節(jié)點Lj的下標(biāo)。
在另一種實施方式中,也可從左下葉節(jié)點開始,沿以逆時針方向排列的葉節(jié)點右指針包含的信息來表示ei。
本實施方式還包括以下步驟 C.將至少一個偽水印數(shù)字進(jìn)行編碼并轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)存儲的偽水印代碼; D.將偽水印代碼嵌入移動終端軟件; E.對偽水印代碼進(jìn)行驗證。
步驟C還包括選擇手機(jī)軟件代碼中的常量作為偽水印數(shù)字的過程,所述常量為自然數(shù)。
步驟E的驗證具體通過對所述偽水印代碼進(jìn)行解碼,當(dāng)解碼得出的結(jié)果與步驟C中選擇的常量相比發(fā)生改變時進(jìn)行報警。
本發(fā)明一種移動終端軟件的水印實現(xiàn)方法,其另一種實施方式,如圖2所示,包括以下步驟 步驟201選擇水印數(shù)N;可選擇一個代表版權(quán)信息的大自然數(shù)N作為水印數(shù),本例以較小的自然數(shù)603為例進(jìn)行說明,603分解為兩個數(shù)67和9的乘積,只有合法用戶才能檢測到該數(shù)并將其分解為67和9,從而可證明該用戶的合法身份;在優(yōu)選的實施方式中,N可以分解為兩個足夠大的素數(shù)的乘積,該素數(shù)可以是幾十位數(shù)、幾百位數(shù),或是更大的數(shù); 步驟202將水印數(shù)N進(jìn)行編碼;將水印數(shù)N轉(zhuǎn)化成圖拓樸結(jié)構(gòu)G,N=67×9=603=3×50+0×51+4×52+4×53; 步驟203將水印數(shù)N轉(zhuǎn)換為以數(shù)據(jù)結(jié)構(gòu)形式存儲的水印代碼; 如圖3所示,該結(jié)構(gòu)具有以下特征301為頭節(jié)點,該節(jié)點的左指針指向這個樹的右下節(jié)點303,右指針指向二叉樹的根節(jié)點302。每個節(jié)點具有左、右兩個指針,非葉非頭節(jié)點(既不是葉節(jié)點也不是頭節(jié)點的節(jié)點)的這兩個指針分別指向自己的左、右子節(jié)點;葉節(jié)點的左指針的指向遵從下述規(guī)則非葉非頭節(jié)點的右子樹的左下節(jié)點的左指針指向其左子樹的右下節(jié)點。整個樹的左下節(jié)點306的左指針指向頭節(jié)點301。頭節(jié)點301的左指針指向右下節(jié)點303,節(jié)點303的左指針指向節(jié)點304,節(jié)點304的左指針指向節(jié)點305,節(jié)點305的左指針指向節(jié)點306,節(jié)點306的左指針指向頭節(jié)點301,頭節(jié)點301的左指針指向節(jié)點303,即每個葉節(jié)點的左指針按順時針方向順次連接,左下節(jié)點的左指針指向頭節(jié)點,頭節(jié)點的左指針指向右下節(jié)點。本例中節(jié)點303為L0,節(jié)點304為L1,節(jié)點305為L2,節(jié)點306為L3。
本例按照下述規(guī)則來表示ei二叉樹的右下葉節(jié)點右指針包含的信息為e0,本例中為節(jié)點303,從該葉節(jié)點開始沿順時針方向的葉節(jié)點右指針包含的信息依次表示ei;
其中Li為所述葉節(jié)點,j為所述葉節(jié)點Li的右指針指向的葉節(jié)點Lj的下標(biāo)。
通過該規(guī)則可以得到(本例m=4) e0L0的右指針指向L2,e0=2-0+1=3; e1L1的右指針為空,于是,e1=0; e2L2的右指針指向L1,e2=4-|1-2+1|=4; e3L3的右指針指向L2,e3=4-|2-3+1|=4; 步驟204嵌入移動終端軟件. 本例的這種結(jié)構(gòu)本身具有二叉樹和鏈表的雙重特點,在構(gòu)造軟件水印時,利用指針來進(jìn)行樹的生成,根據(jù)現(xiàn)代操作系統(tǒng)中內(nèi)存管理的特點,指針的具體值在每次運行時都是不同的,這就給攻擊者帶來極大的干擾。同時,對于具有m個葉節(jié)點的這種結(jié)構(gòu),只要找到其中的一個節(jié)點,沿其左指針就可以在m-1步內(nèi)找到頭節(jié)點,從而實現(xiàn)對整個圖結(jié)構(gòu)的遍歷,這對于在內(nèi)存堆棧中定位水印圖結(jié)構(gòu)很有幫助。同樣,在這種結(jié)構(gòu)中某些節(jié)點的指針若被篡改,甚至可以依據(jù)規(guī)則進(jìn)行有效的恢復(fù)。
本例還通過創(chuàng)建多個偽水印對原程序功能性的依賴關(guān)系,對真實水印以及手機(jī)程序起到了防篡改的作用,增加了攻擊者的攻擊難度。
其基本思想是從手機(jī)原程序中選擇若干關(guān)鍵常量,并將其轉(zhuǎn)化成與水印圖結(jié)構(gòu)相似的拓?fù)浣Y(jié)構(gòu),從而形成若干個所謂的“偽水印”來迷惑攻擊者。除非攻擊者從若干個圖結(jié)構(gòu)中精確地選中真實的水印圖結(jié)構(gòu)進(jìn)行攻擊,否則對任何一個偽水印圖結(jié)構(gòu)進(jìn)行的篡改都將導(dǎo)致手機(jī)程序不能正常執(zhí)行。偽水印的生成流程,如圖4所示,包括以下步驟 步驟401待編碼常量選取;首先對手機(jī)原程序進(jìn)行詞法分析,篩選出若干合適的關(guān)鍵常量作為待編碼常量放置于自定義的待編碼常量列表中;轉(zhuǎn)化成圖結(jié)構(gòu)的數(shù)應(yīng)為一整型數(shù),因此應(yīng)對已選取的常量列表中非整型量進(jìn)行轉(zhuǎn)化,使其轉(zhuǎn)化成整型;為此我們創(chuàng)建函數(shù)constantToInt()并重載該函數(shù);下列關(guān)鍵算法描述了如何將浮點型量轉(zhuǎn)化成整型量 public Vector static constantToInt(float C){ //將浮點型量轉(zhuǎn)化為兩個整型量 int leftInt,rightInt; leftInt=(int)C; rightInt=(int)((C-(int)C)*10); Vector result=new Vector(); result.add(new Integer(LeftInt)); result.add(new Integer(RightInt)); return result; } 步驟402輸入已選取的常量C1,C2,......,Ck(k為選取的常量的個數(shù)); 步驟403判斷是否可編碼;判斷所選取的常量C1,C2,......,Ck是否是可以進(jìn)行編碼的整形量;如果是,轉(zhuǎn)步驟405,如果否轉(zhuǎn)步驟404; 步驟404調(diào)用constantToInt(),將其轉(zhuǎn)化為可編碼常量; 步驟405常量編碼;將選中的若干待編碼常量C1,C2,......,Ck轉(zhuǎn)化為圖拓?fù)浣Y(jié)構(gòu),即按照上述步驟201至203的流程生成相應(yīng)的偽水印圖CG1,CG2,......,CGk;分別創(chuàng)建編碼函數(shù)enCode(int i)來實現(xiàn)從常量到圖的轉(zhuǎn)換,從而生成和真實水印圖結(jié)構(gòu)非常相似的偽水印圖,如圖5所示,其中501為真實水印圖,502和503為偽水印圖。這樣可以有效地迷惑攻擊者,使攻擊者很難從中精確地選中真實水印進(jìn)行攻擊; 步驟406常量解碼。常量解碼是常量編碼的逆過程,即將偽水印圖還原為常量數(shù)。對于本例采用的水印結(jié)構(gòu),葉節(jié)點數(shù)目m是嵌入者已知的,系數(shù)ei可以通過以下方法計算求出 由頭節(jié)點左指針指向的葉節(jié)點開始,規(guī)定m個葉節(jié)點分別為Li,其中i∈{1,2,3,....,m}并以此代表基數(shù)的冪,那么
其中j為葉節(jié)點Li的右指針指向的葉節(jié)點Li的下標(biāo),因此,根據(jù)公式 可以創(chuàng)建解碼函數(shù)deCode(Watermark CG[i])來實現(xiàn)從圖結(jié)構(gòu)到常量的還原。
步驟407在手機(jī)原程序代碼中嵌入偽水印代碼。假設(shè)手機(jī)原程序部分初始偽代碼如下(已嵌入真實水印代碼) Watermark Wm;//水印結(jié)構(gòu)為上述編碼結(jié)構(gòu) public method(){ int C[1],C[2]; ... Wm=buildWm();//嵌入水印 C[1]=100; C[2]=200; ... print(C[1]+C[2]); } 那么嵌入偽水印代碼后的手機(jī)程序偽代碼為 Watermark Wm,CG[1],CG[2];//水印與偽水印均為上述編碼結(jié)構(gòu) public method(){ int C[1],C[2]; ... CG[1]=enCode(C[1]);//嵌入第一個偽水印 CG[2]=enCode(C[2]);//嵌入第二個偽水印 ... Wm=buildWm(); C[1]=deCode(CG[1]);//從第一個偽水印中提取常量 C[2]=deCode(CG[2]);//從第二個偽水印中提取常量 ... print(C[1]+C[2]); } 以上內(nèi)容是結(jié)合具體的優(yōu)選實施方式對本發(fā)明所作的進(jìn)一步詳細(xì)說明,不能認(rèn)定本發(fā)明的具體實施只局限于這些說明。對于本發(fā)明所屬技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干簡單推演或替換,都應(yīng)當(dāng)視為屬于本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種移動終端軟件的水印實現(xiàn)方法,其特征在于,包括以下步驟
A.水印生成模塊將水印數(shù)字轉(zhuǎn)化為以數(shù)據(jù)結(jié)構(gòu)形式存儲的水印代碼;
B.嵌入模塊將所述水印代碼嵌入移動終端軟件。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟A具體包括以下步驟
A1.選擇單元選擇自然數(shù)N作為水印數(shù)字;
A2.編碼單元對步驟A1的水印數(shù)字進(jìn)行編碼;
A3.轉(zhuǎn)換單元將編碼后的水印數(shù)字轉(zhuǎn)化為以數(shù)據(jù)結(jié)構(gòu)形式存儲的水印代碼。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述自然數(shù)N可分解成兩個素數(shù)的乘積。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述步驟A2具體通過將步驟A1的自然數(shù)N表示成以m+1為基數(shù)的表達(dá)式來進(jìn)行編碼,其中0≤ei<m+1;步驟A3所述的數(shù)據(jù)結(jié)構(gòu)包括二叉樹。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述二叉樹節(jié)點數(shù)目為2m,葉節(jié)點數(shù)目為m,每個節(jié)點具有左、右兩個指針,非葉節(jié)點的左指針指向左子節(jié)點、右指針指向右子節(jié)點,所述二叉樹包括一個頭節(jié)點,所述頭節(jié)點的左指針指向所述二叉樹的右下節(jié)點,所述頭節(jié)點的右指針指向所述二叉樹的根節(jié)點,所述二叉樹非葉節(jié)點右子樹左下節(jié)點的左指針指向該非葉節(jié)點左子樹右下節(jié)點,所述二叉樹左下節(jié)點的左指針指向所述頭節(jié)點;所述步驟A3還包括按照預(yù)設(shè)規(guī)則使用所述二叉樹葉節(jié)點右指針中包含的信息來表示ei的過程。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述預(yù)設(shè)規(guī)則包括設(shè)定所述二叉樹的右下葉節(jié)點右指針包含的信息為e0,從該葉節(jié)點開始沿順時針方向的葉節(jié)點右指針包含的信息依次表示ei;所述使用葉節(jié)點右指針包含的信息來表示ei具體通過下式實現(xiàn)
其中Li為所述葉節(jié)點,j為所述葉節(jié)點Li的右指針指向的葉節(jié)點Lj的下標(biāo)。
7.根據(jù)權(quán)利要求1至6任一所述的方法,其特征在于,還包括以下步驟
C.水印生成模塊將至少一個偽水印數(shù)字進(jìn)行編碼并轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)存儲的偽水印代碼;
D.嵌入模塊將所述偽水印代碼嵌入移動終端軟件;
E.驗證模塊對偽水印代碼進(jìn)行驗證。
8.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述步驟C還包括選擇單元選擇手機(jī)軟件代碼中的常量作為偽水印數(shù)字的過程,所述常量為自然數(shù)。
9.根據(jù)權(quán)利要求7所述的方法,其特征在于,步驟E所述驗證具體通過驗證模塊對所述偽水印代碼進(jìn)行解碼,當(dāng)解碼得出的結(jié)果與步驟C中選擇的常量相比發(fā)生改變時進(jìn)行報警。
10.一種移動終端,其特征在于,包括
水印生成模塊,用于將水印數(shù)字轉(zhuǎn)換成數(shù)據(jù)結(jié)構(gòu)存儲的水印代碼;
嵌入模塊,用于將所述水印代碼嵌入移動終端軟件。
11.根據(jù)權(quán)利要求10所述的移動終端,其特征在于,所述水印生成模塊包括
選擇單元,用于選擇自然數(shù)N作為水印信息;
編碼單元,用于對水印數(shù)字進(jìn)行編碼;
轉(zhuǎn)換單元,用于將編碼后的水印數(shù)字轉(zhuǎn)化為以數(shù)據(jù)結(jié)構(gòu)形式存儲的水印代碼。
12.根據(jù)權(quán)利要求11所述的移動終端,其特征在于,所述自然數(shù)N為兩個素數(shù)相乘所得的自然數(shù)。
13.根據(jù)權(quán)利要求11所述的移動終端,其特征在于,所述編碼單元還用于將所述選擇單元的自然數(shù)N表示成以m+1為基數(shù)的表達(dá)式來進(jìn)行編碼,其中0≤ei<m+1;所述轉(zhuǎn)換單元還用于將所述表達(dá)式轉(zhuǎn)化為二叉樹。
14.根據(jù)權(quán)利要求13所述的移動終端,其特征在于,所述二叉樹的節(jié)點數(shù)目為2m,其中葉節(jié)點數(shù)目為m,每個節(jié)點具有左、右兩個指針,非葉節(jié)點的左指針指向左子節(jié)點、右指針指向右子節(jié)點,所述二叉樹包括一個頭節(jié)點,所述頭節(jié)點的左指針指向所述二叉樹的右下節(jié)點,所述頭節(jié)點的右指針指向所述二叉樹的根節(jié)點,所述二叉樹非葉節(jié)點右子樹左下節(jié)點的左指針指向該非葉節(jié)點左子樹右下節(jié)點,所述二叉樹左下節(jié)點的左指針指向所述頭節(jié)點;所述轉(zhuǎn)換單元還用于按照預(yù)設(shè)規(guī)則使用所述二叉樹葉節(jié)點右指針中包含的信息來表示ei。
15.根據(jù)權(quán)利要求12所述的移動終端,其特征在于,所述預(yù)設(shè)規(guī)則包括所述二叉樹的右下葉節(jié)點右指針包含的信息為e0,從該葉節(jié)點開始沿順時針方向的葉節(jié)點右指針包含的信息依次表示ei;所述轉(zhuǎn)換單元還用于按照下式使用葉節(jié)點右指針包含的信息來表示ei
其中Li為所述葉節(jié)點,j為所述葉節(jié)點Li的右指針指向的葉節(jié)點Lj的下標(biāo)。
16.根據(jù)權(quán)利要求10至15中任意一項所述的移動終端,其特征在于,所述水印生成模塊還用于將至少一個偽水印數(shù)字進(jìn)行編碼并轉(zhuǎn)換成數(shù)據(jù)結(jié)構(gòu)存儲的偽水印代碼;所述嵌入模塊還用于將所述偽水印代碼嵌入移動終端軟件;所述移動終端還包括驗證模塊,用于對偽水印代碼進(jìn)行驗證。
17.根據(jù)權(quán)利要求16所述的移動終端,其特征在于,所述選擇單元還用于選擇手機(jī)軟件代碼中的常量作為偽水印數(shù)字,所述常量為自然數(shù)。
18.根據(jù)權(quán)利要求17所述的移動終端,其特征在于,所述驗證模塊還用于對所述偽水印代碼進(jìn)行解碼,當(dāng)解碼得出的結(jié)果與為水印數(shù)字相比發(fā)生改變時進(jìn)行報警。
全文摘要
本發(fā)明公開了一種移動終端軟件的水印實現(xiàn)方法,包括以下步驟A.水印生成模塊將水印數(shù)字轉(zhuǎn)化為以數(shù)據(jù)結(jié)構(gòu)形式存儲的水印代碼;B.嵌入模塊將所述水印代碼嵌入移動終端軟件。本發(fā)明還公開了一種移動終端。本發(fā)明通過將水印數(shù)字轉(zhuǎn)化成以數(shù)據(jù)結(jié)構(gòu)形式存儲的水印代碼,隱藏在移動終端軟件中,由于數(shù)據(jù)結(jié)構(gòu)中的某些信息為動態(tài)生成,相對于通常使用的水印來說更加難以破解,增加了軟件水印的安全性。
文檔編號G06F21/00GK101609494SQ20091010828
公開日2009年12月23日 申請日期2009年6月25日 優(yōu)先權(quán)日2009年6月25日
發(fā)明者沈靜博, 婧 李 申請人:中興通訊股份有限公司