一種android應(yīng)用程序防盜版的方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明提出了一種android應(yīng)用程序防盜版的方法及系統(tǒng),包括將android應(yīng)用程序程序分成兩部分:關(guān)鍵程序和不完整的部分應(yīng)用程序,兩者結(jié)合才能正常運行。將兩部分都上傳至服務(wù)器,服務(wù)器對關(guān)鍵代碼進行加密處理,用戶下載了不完整的部分程序后,首次運行需向服務(wù)器申請關(guān)鍵程序。獲得服務(wù)器認(rèn)證后方可下載關(guān)鍵程序,然后在客戶端解密關(guān)鍵程序并存儲到安全空間,經(jīng)判斷為合法權(quán)限后方可加載關(guān)鍵程序,以正常運行應(yīng)用程序。首次運行之后,關(guān)鍵程序存儲在安全空間,每次運行無需再從服務(wù)器下載。本發(fā)明不增加開發(fā)者的工作量,能過有效的防止應(yīng)用程序被逆向工程和盜版。
【專利說明】一種android應(yīng)用程序防盜版的方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及移動終端【技術(shù)領(lǐng)域】,尤其涉及一種android應(yīng)用程序防盜版的方法及系統(tǒng)。
【背景技術(shù)】
[0002]隨著移動互聯(lián)網(wǎng)的飛速發(fā)展,移動終端操作系統(tǒng)已經(jīng)形成ios與android兩大主陣營?;赼ndroid操作系統(tǒng)的應(yīng)用程序采用主流編程語言Java。Java程序編譯后生成字節(jié)碼,運行在虛擬機上。對于android系統(tǒng),采用Java編寫的應(yīng)用程序經(jīng)編譯后運行在Dalvik VM上的DEX字節(jié)碼,應(yīng)用程序所有的字節(jié)碼文件打包成APK文件安裝到android系統(tǒng)。當(dāng)前,Java編程語言工具并沒有對Java字節(jié)碼采取有效保護措施,同時Java字節(jié)碼文件的結(jié)構(gòu)本身特點使其易于被逆向工程,從而存在源碼安全問題。
[0003]因此,在目前的市場上,android應(yīng)用程序正面臨嚴(yán)重的盜版問題,被盜版的應(yīng)用程序可能被植入病毒、廣告,還可能被二次打包以及篡改,這些都嚴(yán)重?fù)p害了應(yīng)用程序的開發(fā)者以及消費者的權(quán)益。針對這一情況,移動互聯(lián)網(wǎng)的各個產(chǎn)業(yè)鏈都在做一些努力,來保護android應(yīng)用程序的安全。目前,普遍采用的加密技術(shù)手段有:代碼混淆、加密、水印等,但采用這些技術(shù)手段都給開發(fā)者帶來了 一定的工作量,而且即使采用了這些技術(shù),應(yīng)用程序仍然可以被逆向。Google曾經(jīng)有提供LVL的反盜版機制,但很快就被破解了。因此,目前android應(yīng)用市場上的盜版行為仍然十分盛行。
【發(fā)明內(nèi)容】
[0004]為解決上述問題,本發(fā)明提出了一種android應(yīng)用程序防盜版的方法及系統(tǒng),該方法不增加開發(fā)者的工作量,能過有效的防止應(yīng)用程序被逆向工程和盜版。
[0005]為實現(xiàn)上述目的,本發(fā)明的技術(shù)方案為:
一種android應(yīng)用程序防盜版的方法,包括如下步驟:
SlO:將android應(yīng)用程序拆分成兩部分代碼:代碼一中加入一個樁類(Stub, java)代碼后編譯成生成文件一;代碼二編譯生成文件二,上傳所述兩部分文件至服務(wù)器;
S20:客戶端下載運行所述android應(yīng)用程序的文件一,其中樁(Stub)首先運行判斷該客戶端是否是第一次運行該應(yīng)用程序,如果是則繼續(xù)以下步驟,否則執(zhí)行步驟S60 ;
S30:客戶端向服務(wù)器申請認(rèn)證和下載文件二,服務(wù)器對所述申請進行認(rèn)證,認(rèn)證通過則繼續(xù),否則終止程序運行;
S40:服務(wù)器對應(yīng)用程序?qū)?yīng)的文件二進行加密并發(fā)送給客戶端;
S50:客戶端所述應(yīng)用程序文件一的樁(Stub)解密文件二并將其存入到安全空間;
S60:客戶端啟動可加載內(nèi)核模塊(LKM)程序判斷應(yīng)用程序樁(Stub)是否有權(quán)限訪問安全空間的文件二,如果判斷通過,則加載文件二,應(yīng)用程序運行,否則終止程序運行。
[0006]其中,所述代碼二為應(yīng)用程序的的啟動代碼或者核心算法,所述代碼一為應(yīng)用程序除代碼二以外的其它代碼。[0007]其中,所述文件一為APK文件,文件二為JAR文件。
[0008]進一步的,所述安全空間是在客戶端的應(yīng)用程序存儲空間內(nèi)開辟的一塊存儲區(qū)域。
[0009]進一步的,所述步驟S60包括:可加載內(nèi)核模塊程序(LKM)判斷應(yīng)用程序進程ID號是否與安全空間中對應(yīng)的文件二提供的ID號一致,如果一致則加載運行,否則終止應(yīng)用程序運行。
[0010]此外,本發(fā)明還提供了一種采用上述方法的android應(yīng)用程序防盜版系統(tǒng),包括服務(wù)器端和客戶端,其中所述服務(wù)器端包括:
存儲模塊:用于存儲程序發(fā)布者上傳的android應(yīng)用程序的文件一和文件二 ;其中:所述文件一由android應(yīng)用程序被拆分成兩部分后的代碼一加入一個樁類(Stub, java)代碼后編譯成生成,所述文件二由應(yīng)用程序的另一部分代碼二編譯生成;
認(rèn)證模塊:對客戶端的申請進行認(rèn)證,認(rèn)證通過則啟動加密模塊,否則終止程序運行; 加密模塊:對文件二進行加密并將加密后的文件二發(fā)送給客戶端;
所述客戶端包括:
判斷模塊:判斷下載的android應(yīng)用程序的文件一是否是第一次在該客戶端運行,如果是則向服務(wù)器端申請認(rèn)證和下載文件二,否則啟動可加載內(nèi)核模塊程序(LKM);
安全空間:設(shè)置于客戶端的應(yīng)用程序存儲空間內(nèi)的一塊存儲區(qū)域,只有獲得授權(quán)的應(yīng)用程序進程可以訪問所述安全空間;
解密模塊:對從服務(wù)器端收到的文件二進行解密并將其存入安全空間;
可加載內(nèi)核模塊(LKM):判斷應(yīng)用程序樁(Stub)是否有權(quán)限訪問安全空間的文件二,如果判斷通過,則加載文件二,應(yīng)用程序運行,否則終止程序運行。
[0011]進一步的,所述代碼二為應(yīng)用程序的的啟動代碼或者核心算法,所述代碼一為應(yīng)用程序除代碼二以外的其它代碼。
[0012]進一步的,所述文件一為APK文件,文件二為JAR文件。
[0013]進一步的,所述可加載內(nèi)核模塊程序(LKM)用于判斷應(yīng)用程序進程ID號是否與安全空間中對應(yīng)的文件二提供的ID號一致,如果一致則加載運行,否則終止應(yīng)用程序運行。
[0014]本發(fā)明的技術(shù)構(gòu)思是:程序開發(fā)者將自己開發(fā)的程序分成兩部分,一部分為關(guān)鍵程序,一部分為不完整的部分應(yīng)用程序,兩者結(jié)合才能正常運行。將兩部分都上傳到android應(yīng)用程序市場服務(wù)器上。應(yīng)用程序市場服務(wù)器對關(guān)鍵代碼進行加密處理,用戶下載了不完整的部分程序后,首次運行需向服務(wù)器申請關(guān)鍵程序。獲得服務(wù)器認(rèn)證后方可下載關(guān)鍵程序,然后在客戶端解密關(guān)鍵程序并存儲到安全空間,經(jīng)判斷為合法權(quán)限后方可動態(tài)加載關(guān)鍵程序,從而可以正常運行應(yīng)用程序。首次運行之后,關(guān)鍵程序存儲在安全空間,每次運行不再需要從服務(wù)器下載。非法拷貝的不完整部分應(yīng)用程序由于不能獲得關(guān)鍵程序,將無法運行。
[0015]與現(xiàn)有技術(shù)相比,本發(fā)明至少具有以下優(yōu)點:(I)相比于目前一些主要的Android應(yīng)用軟件商店提供的版權(quán)保護措施,該方案不僅能保護Android應(yīng)用軟件的版權(quán),由于盜版拷貝缺少應(yīng)用軟件的關(guān)鍵程序部分,將不能逆向獲得應(yīng)用軟件的源碼,因此還能對Android應(yīng)用軟件的源代碼起到很好的保護作用。(2)由于本發(fā)明方法通過只針對應(yīng)用軟件中的開發(fā)者提供的關(guān)鍵程序加密,而不是針對應(yīng)用程序完整的APK加密,大大提高了加密和解密的執(zhí)行效率。
【專利附圖】
【附圖說明】
[0016]圖1是本發(fā)明的方法流程示意圖。
[0017]圖2是本發(fā)明實施例中的android應(yīng)用程序配置圖。
[0018]圖3是本發(fā)明實施例中android應(yīng)用程序防盜版系統(tǒng)服務(wù)器端原理框圖。
[0019]圖4是本發(fā)明實施例中android應(yīng)用程序防盜版系統(tǒng)客戶端原理框圖。
【具體實施方式】
[0020]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0021]如圖1所示,一種android應(yīng)用程序防盜版的方法,包括如下步驟:
SlO:將android應(yīng)用程序拆分成兩部分代碼:代碼一中加入一個樁類(Stub, java)代碼后編譯成生成文件一;代碼二編譯生成文件二,上傳所述兩部分文件至服務(wù)器;
如圖2所示,在本實施例中,優(yōu)選將android應(yīng)用程序源碼10拆分成以下兩部分:文件二為應(yīng)用程序的關(guān)鍵源碼13,可以是應(yīng)用程序的啟動代碼或者核心算法,這部分的代碼量建議小一些,便于加密和傳輸,并將其編譯成JAR文件14 ;文件一為應(yīng)用程序的其它源碼12,其中加入一個樁(Stub, java)類,編譯生成APK文件12。樁的作用有三個,其一,android客戶端啟動應(yīng)用程序運行時,樁負(fù)責(zé)向應(yīng)用程序市場服務(wù)器申請認(rèn)證和關(guān)鍵程序,其二,當(dāng)服務(wù)器通過認(rèn)證并把加密后的關(guān)鍵程序傳輸給客戶端后,樁負(fù)責(zé)解密關(guān)鍵程序并存入安全空間,其三,運行時樁負(fù)責(zé)動態(tài)加載關(guān)鍵程序。
[0022]S20:客戶端下載運行所述android應(yīng)用程序的APK文件,其中樁(Stub)首先運行判斷該客戶端是否是第一次運行該應(yīng)用程序,如果是則繼續(xù)以下步驟,否則執(zhí)行步驟S60 ;
S30:客戶端向服務(wù)器申請認(rèn)證和下載應(yīng)用程序的JAR文件,服務(wù)器對所述申請進行認(rèn)證,認(rèn)證通過則繼續(xù),否則終止程序運行;
S40:服務(wù)器對應(yīng)用程序?qū)?yīng)的JAR文件進行加密并發(fā)送給客戶端;
S50:客戶端的應(yīng)用程序APK文件的樁(Stub)解密JAR文件并將其存入到安全空間;所述安全空間是在客戶端的應(yīng)用程序存儲空間內(nèi)開辟的一塊存儲區(qū)域,只有獲得授權(quán)的應(yīng)用程序進程可以訪問安全空間。
[0023]S60:客戶端啟動可加載內(nèi)核模塊(LKM)程序判斷應(yīng)用程序樁(Stub)是否有權(quán)限訪問安全空間的JAR文件;通過判斷應(yīng)用程序進程ID號是否與安全空間中對應(yīng)的JAR文件提供的ID號一致來判斷是否有權(quán)限,如果ID號一致則判斷通過,加載應(yīng)用程序的JAR文件,應(yīng)用程序運行,否則終止程序運行。
[0024]其中,非法拷貝的應(yīng)用程序APK文件,其樁(Stub)沒有向服務(wù)器申請相應(yīng)的認(rèn)證權(quán)限,因此無法通過LKM模塊判斷,也就無法啟動應(yīng)用程序運行。
[0025]客戶端首次運行該應(yīng)用程序之后,應(yīng)用程序的JAR文件存儲在安全空間,以后每次運行,只需動態(tài)加載即可,不再需要向服務(wù)器申請下載。
[0026]同時,本發(fā)明還提供了一種采用上述方法的android應(yīng)用程序防盜版系統(tǒng),包括服務(wù)器端和客戶端,
如圖3所示,所述服務(wù)器端20包括:
存儲模塊21:用于存儲程序發(fā)布者上傳的android應(yīng)用程序的APK文件和JAR文件;認(rèn)證模塊22:對客戶端的申請進行認(rèn)證,認(rèn)證通過則啟動加密模塊23,否則終止程序運行;
加密模塊23:對JAR文件進行加密并將加密后的JAR文件發(fā)送給客戶端。
[0027]如圖4所示,所述客戶端30包括:
判斷模塊34:判斷下載的android應(yīng)用程序的APK文件是否是第一次在該客戶端運行,如果是則向服務(wù)器端申請認(rèn)證和下載JAR文件,否則啟動可加載內(nèi)核模塊程序(LKM)35 ;
安全空間32:設(shè)置于客戶端的用戶應(yīng)用程序存儲空間內(nèi)的一塊存儲區(qū)域,只有獲得授權(quán)的應(yīng)用程序進程可以訪問所述安全空間32 ;
解密模塊33:對從服務(wù)器端收到的JAR文件進行解密并將其存入安全空間;
可加載內(nèi)核模塊(LKM) 35:判斷應(yīng)用程序樁(Stub)是否有權(quán)限訪問安全空間的JAR文件,如果判斷通過,則加載JAR文件,應(yīng)用程序運行,否則終止程序運行。
[0028]其中,可加載內(nèi)核模塊(LKM) 35通過判斷應(yīng)用程序進程ID號是否與安全空間32中對應(yīng)的JAR文件提供的ID號一致來判斷是否有權(quán)限,如果ID號一致則判斷通過,加載應(yīng)用程序的JAR文件,應(yīng)用程序運行,否則終止程序運行。
[0029]以上實施例僅用以說明本發(fā)明的技術(shù)方案而非限定,僅僅參照較佳實施例對本發(fā)明進行了詳細(xì)說明。本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,可以對本發(fā)明的技術(shù)方案進行修改或等同替換,而不脫離本發(fā)明技術(shù)方案的精神和范圍,均應(yīng)涵蓋在本發(fā)明的權(quán)利要求范圍當(dāng)中。
【權(quán)利要求】
1.一種android應(yīng)用程序防盜版的方法,其特性在于,包括如下步驟: SlO:將android應(yīng)用程序拆分成兩部分代碼:代碼一中加入一個樁類(Stub, java)代碼后編譯成生成文件一;代碼二編譯生成文件二,上傳所述兩部分文件至服務(wù)器; S20:客戶端下載運行所述android應(yīng)用程序的文件一,其中樁(Stub )首先運行判斷該客戶端是否是第一次運行該應(yīng)用程序,如果是則繼續(xù)以下步驟,否則執(zhí)行步驟S60 ; S30:客戶端向服務(wù)器申請認(rèn)證和下載文件二,服務(wù)器對所述申請進行認(rèn)證,認(rèn)證通過則繼續(xù),否則終止程序運行; S40:服務(wù)器對應(yīng)用程序?qū)?yīng)的文件二進行加密并發(fā)送給客戶端; S50:客戶端所述應(yīng)用程序文件一的樁(Stub)解密文件二并將其存入到安全空間; S60:客戶端啟動可加載內(nèi)核模塊(LKM)程序判斷應(yīng)用程序樁(Stub)是否有權(quán)限訪問安全空間的文件二,如果判斷通過,則加載文件二,應(yīng)用程序運行,否則終止程序運行。
2.根據(jù)權(quán)利要求1所述的android應(yīng)用程序防盜版的方法,其特征在于,所述代碼二為應(yīng)用程序的的啟動代碼或者核心算法,所述代碼一為應(yīng)用程序除代碼二以外的其它代碼。
3.根據(jù)權(quán)利要求2所述的android應(yīng)用程序防盜版的方法,其特征在于,所述文件一為APK文件,文件二為JAR文件。
4.根據(jù)權(quán)利要求1所述的android應(yīng)用程序防盜版的方法,其特征在于,所述安全空間是在客戶端的應(yīng)用程序存儲空間內(nèi)開辟的一塊存儲區(qū)域。
5.根據(jù)權(quán)利要求1 至4中任一項所述的android應(yīng)用程序防盜版的方法,其特征在于,所述步驟S60包括:可加載內(nèi)核模塊程序(LKM)判斷應(yīng)用程序進程ID號是否與安全空間中對應(yīng)的文件二提供的ID號一致,如果一致則加載運行,否則終止應(yīng)用程序運行。
6.一種采用權(quán)利要求1所述方法的android應(yīng)用程序防盜版系統(tǒng),其特性在于,包括服務(wù)器端和客戶端,其中所述服務(wù)器端包括: 存儲模塊:用于存儲程序發(fā)布者上傳的android應(yīng)用程序的文件一和文件二 ;其中:所述文件一由android應(yīng)用程序被拆分成兩部分后的代碼一加入一個樁類(Stub, java)代碼后編譯成生成,所述文件二由應(yīng)用程序的另一部分代碼二編譯生成; 認(rèn)證模塊:對客戶端的申請進行認(rèn)證,認(rèn)證通過則啟動加密模塊,否則終止程序運行; 加密模塊:對文件二進行加密并將加密后的文件二發(fā)送給客戶端; 所述客戶端包括: 判斷模塊:判斷下載的android應(yīng)用程序的文件一是否是第一次在該客戶端運行,如果是則向服務(wù)器端申請認(rèn)證和下載文件二,否則啟動可加載內(nèi)核模塊程序(LKM); 安全空間:設(shè)置于客戶端的應(yīng)用程序存儲空間內(nèi)的一塊存儲區(qū)域,只有獲得授權(quán)的應(yīng)用程序進程可以訪問所述安全空間; 解密模塊:對從服務(wù)器端收到的文件二進行解密并將其存入安全空間; 可加載內(nèi)核模塊(LKM):判斷應(yīng)用程序樁(Stub)是否有權(quán)限訪問安全空間的文件二,如果判斷通過,則加載文件二,應(yīng)用程序運行,否則終止程序運行。
7.根據(jù)權(quán)利要求6所述的android應(yīng)用程序防盜版系統(tǒng),其特征在于,所述代碼二為應(yīng)用程序的的啟動代碼或者核心算法,所述代碼一為應(yīng)用程序除代碼二以外的其它代碼。
8.根據(jù)權(quán)利要求7所述的android應(yīng)用程序防盜版系統(tǒng),其特征在于,所述文件一為APK文件,文件二為JAR文件。
9.根據(jù)權(quán)利要求6至8中的任一項所述的android應(yīng)用程序防盜版系統(tǒng),其特征在于,所述可加載內(nèi)核模塊(LKM)用于判斷應(yīng)用程序進程ID號是否與安全空間中對應(yīng)的文件二提供的ID號一致,如果一致則加載運行,否則終止應(yīng)用程序運行。
【文檔編號】G06F21/14GK103473488SQ201310426325
【公開日】2013年12月25日 申請日期:2013年9月18日 優(yōu)先權(quán)日:2013年9月18日
【發(fā)明者】霍梅梅, 吳明暉, 蔡建平, 吳劍鐘, 孫霖, 王云武 申請人:浙江大學(xué)城市學(xué)院