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