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