一種基于防御網(wǎng)的Android應(yīng)用防篡改方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[000?]本發(fā)明屬于計算機安全技術(shù)領(lǐng)域,具體涉及一種針對Android平臺應(yīng)用軟件的防 篡改方法。
【背景技術(shù)】
[0002] 近年來,隨著移動互聯(lián)網(wǎng)的高速發(fā)展,網(wǎng)絡(luò)用戶的規(guī)模越來越大,接入的移動終端 數(shù)目越來越多。功能日益豐富的移動終端,尤其是Android,已經(jīng)代替PC成為人們工作、生活 中不可缺少的平臺。移動終端上的應(yīng)用軟件,在移動互聯(lián)網(wǎng)的發(fā)展和移動終端的普及中扮 演著極其重要的角色,其涵蓋的領(lǐng)域不僅涉及社交、娛樂,還涉及到辦公、通信、支付等。無 論是公司廠商,還是政府部門,越來越多的單位參與到移動終端軟件的研發(fā)、使用和管理 中。
[0003] Android軟件的廣泛應(yīng)用在為社會帶來巨大利益的同時,其帶來的安全問題也日 益突出。Android軟件往往運行于"白盒攻擊"環(huán)境中(參見參考文獻1),攻擊者利用軟件篡 改技術(shù)攻擊合法軟件,生成惡意軟件、破解版、盜版等非法軟件,嚴重影響開發(fā)者的經(jīng)濟利 益和軟件產(chǎn)業(yè)的健康發(fā)展,甚至威脅到國家安全。因此,提高軟件安全性,增強軟件防篡改 能力成為工業(yè)界和學(xué)術(shù)界急需解決的問題。
[0004] 目前針對Android應(yīng)用軟件的防篡改保護技術(shù)尚不成熟,主要技術(shù)有:①代碼混淆 技術(shù),Proguard最早由Google研發(fā),并在官方開發(fā)環(huán)境Android SDK中提供,開發(fā)者利用 Proguard,可以對Java源碼進行混淆,提高了分析難度,進而提高了軟件自身防篡改的能 力。然而,Proguard只是將代碼中的變量名、函數(shù)名、類名進行混淆,只是延長了攻擊者定位 到關(guān)鍵信息的周期,并不能阻止對關(guān)鍵信息的篡改。②加殼技術(shù),目前產(chǎn)業(yè)界安全提供商, 例如DexGuard和Bangcle(參見參考文獻3、4),針對Android軟件提供了以加殼為主的加固 服務(wù),提高了Android應(yīng)用逆向分析的難度。針對這些加殼保護技術(shù),Jia Zhijun開發(fā)了脫 殼器Zjdroid(參見參考文獻5),能對主流的加殼方案進行有效的攻擊。③篡改版本檢測技 術(shù),近年來學(xué)術(shù)界一些學(xué)者致力于研究如何提高篡改版本的檢測率。篡改版本檢測方案,主 要基于代碼相似性比較(參考文獻6、7、8)或者軟件組件的親合性(參見參考文獻9),識別應(yīng) 用是否是篡改后的版本。但是,目前Android的第三方市場多達幾十個,更有專門發(fā)布篡改 版本的市場,因此基于檢測的保護方案在實際應(yīng)用中效果并不好。
[0005] 參考文獻:
[0006] [1]S Chow,P Eisen,H Johnson,P Van Oorschot.A white-box DES implementation for DRM applications[J]·Lecture notes in computer science, 2003,2696:1-15.
[0007] [2]ProGuard.http://developer.android.com/tools/help/proguard.html.
[0008] [3]DexGuard. http://www.guardsquare. com/software/dexguard-enterpri se.
[0009] [4]Bangcle. http://www.bangcle. com/.
[0010] [5]ZjDroid.http://seclab.safe.baidu.com/opensec_detail_2.html.
[0011] [6]J Crussell.Attack of The Clones:Detecting Cloned Applications on Android Markets.ESORICS, Springer.2012.
[0012] [7]S Hanna,L Huang.Juxtapp:A scalable system for detecting code reuse among android applications.9th International Conference,DIMVA 2012.
[0013] [8]Zhou,ffu.Zhou,Yajin.Detecting repackaged smartphone applications in third-party android marketplaces.Proceedings of the second ACM conference on Data and Application Security and Privacy.2012.
[0014] [9]Zhou,Wu·Zhou,Yaj in·Grace,Michael.Fast,scalable detection of piggybacked mobile applications.Proceedings of the third ACM conference on Data and Application Security and Privacy.2013.
[0015] [10]Threat Model.https://msdn.microsoft.com/en-us/library/ aa302419.aspx.
【發(fā)明內(nèi)容】
[0016] 針對上述現(xiàn)有Android應(yīng)用軟件保護技術(shù)存在的缺陷和不足,本發(fā)明的目的在于, 提供一種基于防御網(wǎng)的Android應(yīng)用防篡改方法,該方法利用計算機系統(tǒng),對Android系統(tǒng) 下應(yīng)用軟件的APK文件進行保護,其保護強度高、易于擴展。
[0017] 為了實現(xiàn)上述任務(wù),本發(fā)明采用以下技術(shù)方案:
[0018] 一種基于防御網(wǎng)的Android應(yīng)用防篡改方法,包括以下步驟:
[0019]步驟一,構(gòu)造防御節(jié)點模板庫
[0020]防御節(jié)點為嵌入到被保護的Android應(yīng)用程序中的代碼段,用于監(jiān)測篡改威脅并 進行響應(yīng);構(gòu)建防御節(jié)點模板庫,模板庫中存放防御節(jié)點的實現(xiàn)代碼;
[0021 ]步驟二,待保護的Android應(yīng)用程序的解析
[0022]將待保護的Android應(yīng)用程序進行解析,生成該應(yīng)用程序的函數(shù)調(diào)用圖,并對函數(shù) 調(diào)用圖中每一個節(jié)點進行描述;
[0023]步驟三,生成目標(biāo)節(jié)點集合
[0024]在待保護的Android應(yīng)用程序中,選取感興趣的區(qū)域作為目標(biāo)節(jié)點,并生成目標(biāo)節(jié) 點集合;
[0025] 步驟四,構(gòu)造防御關(guān)聯(lián)
[0026] 構(gòu)造目標(biāo)節(jié)點與防御節(jié)點之間、防御節(jié)點與防御節(jié)點之間的關(guān)聯(lián)關(guān)系;
[0027] 步驟五,根據(jù)用戶輸入,生成對應(yīng)防御節(jié)點實例
[0028] 根據(jù)用戶定義的防御節(jié)點種類和數(shù)據(jù),在防御節(jié)點模板庫中選擇對應(yīng)種類的防御 節(jié)點的實現(xiàn)代碼,生成對應(yīng)的防御節(jié)點實例;
[0029]步驟六,生成并初始化防御網(wǎng)
[0030] 根據(jù)步驟四中構(gòu)造的防御關(guān)聯(lián),結(jié)合步驟五中生成的防御節(jié)點實例,進行防御網(wǎng) 的初始化,該防御網(wǎng)包括防御節(jié)點和目標(biāo)節(jié)點以及防御關(guān)聯(lián);
[0031] 步驟七,對待保護的Android應(yīng)用程序進行反編譯、文件重構(gòu)和簽名。
[0032] 進一步地,所述的步驟一中防御節(jié)點模板庫中,每一種防御節(jié)點的實現(xiàn)代碼均包 括三部分:觸發(fā)模塊、主功能模塊和關(guān)鍵信息模塊,其中,觸發(fā)模塊用于在檢測到異常時觸 發(fā)主功能模塊,主功能模塊負責(zé)執(zhí)行防篡改功能,關(guān)鍵信息模塊用于記錄該防御節(jié)點單元 的關(guān)鍵信息。
[0033] 進一步地,所述的步驟四中,構(gòu)造目標(biāo)節(jié)點與防御節(jié)點之間、防御節(jié)點與防御節(jié)點 之間的關(guān)聯(lián)關(guān)系的具體方法如下:
[0034] 構(gòu)造關(guān)聯(lián)關(guān)系時,需要滿足以下約束條件a至c:
[0035] a.每個目標(biāo)節(jié)點至少被一個防御節(jié)點J_Guard進行保護;
[0036] b.每個防御節(jié)點至少被除自身以外的兩個防御節(jié)點J_Guarc^PN_Guard保護;
[0037] c. Android應(yīng)用程序執(zhí)行時,執(zhí)行保護功能的防御節(jié)點必須能夠在被保護節(jié)點執(zhí) 行時間附近及時執(zhí)行;
[0038] 對于條件a,設(shè)置目標(biāo)節(jié)點與至少一個具有函數(shù)保護功能的防御節(jié)點進行關(guān)聯(lián);
[0039] 對于條件b,對每個防御節(jié)點設(shè)置至少兩個防御節(jié)點進行保護,其中一個為J_ Guar d,負責(zé)保護防御節(jié)點的觸發(fā)模塊,其中另一個SN_Guard,負責(zé)保護防御節(jié)點的主功能 豐旲塊;
[0040] 對于條件c,每個目標(biāo)節(jié)點或防御節(jié)點在選擇保護自己的防御節(jié)點時,應(yīng)選擇應(yīng)用 程序運行時被保護節(jié)點執(zhí)行前后較近的防御節(jié)點作為其防御節(jié)點;
[0041] 具體地,Android應(yīng)用程序的功能實現(xiàn)是由一個個函數(shù)構(gòu)成的,當(dāng)程序運行時,多 個函數(shù)按照一定的時間順序依次執(zhí)行,這些函數(shù)組成了一個函數(shù)調(diào)