两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種基于防御網(wǎng)的Android應(yīng)用防篡改方法及系統(tǒng)的制作方法_3

文檔序號:9708664閱讀:來源:國知局
主功能模塊具有兩部分內(nèi)容,一是針對dex的防篡改保護(hù),基于對dex文件的完整 性校驗(yàn)實(shí)現(xiàn)。二是實(shí)現(xiàn)Java層被替換(Hook)的函數(shù),如圖3所示,實(shí)現(xiàn)的主要思路為利用 Android JNI機(jī)制提供的native調(diào)用Java函數(shù)的方式,完成類似Java方法Hook的過程。利用 這個過程,可以有效防止通過直接刪除或替換so文件實(shí)現(xiàn)攻擊。
[00"] 經(jīng)過長期對Android應(yīng)用中Java層函數(shù)Hook的研究與實(shí)驗(yàn),大部分Java函數(shù)均可 以被Hook,表2列舉了本方案中涉及到的Java函數(shù)。
[0100] 表2可Hook的Java函數(shù)列表
[0101]
[0102] 以第一個函數(shù)Java/io/FileWriter/〈init>為例,D_Guard的實(shí)現(xiàn)代碼如圖7所示:
[0? 03 ]步驟二,待保護(hù)的Andro i d應(yīng)用程序的解析
[0104]將待保護(hù)的Android應(yīng)用程序進(jìn)行解析,生成該應(yīng)用程序的函數(shù)調(diào)用圖,并對函數(shù) 調(diào)用圖中每一個節(jié)點(diǎn)進(jìn)行描述;具體過程為:
[0105] 圖4是防御網(wǎng)構(gòu)造示意圖,如圖中步驟(1)所示,構(gòu)造防御網(wǎng),首先會對輸入的APK 或其中的DEX文件進(jìn)行解析,生成該應(yīng)用的函數(shù)調(diào)用圖,該函數(shù)調(diào)用圖存儲為一個文本文 件,文件內(nèi)容為一個列表,列表的每一項(xiàng)對應(yīng)函數(shù)調(diào)用圖中的一個函數(shù)節(jié)點(diǎn),通過四元組〈 函數(shù)名,函數(shù)ID,前驅(qū)函數(shù)ID,后繼函數(shù)ID>進(jìn)行描述。
[0106] 步驟三,生成目標(biāo)節(jié)點(diǎn)集合
[0107] 在待保護(hù)的Android應(yīng)用程序中,選取感興趣的區(qū)域作為目標(biāo)節(jié)點(diǎn),并生成目標(biāo)節(jié) 點(diǎn)集合;
[0108] 本方案中,目標(biāo)節(jié)點(diǎn)指的是目標(biāo)應(yīng)用軟件中需要防篡改保護(hù)的一段區(qū)域,一般是 一個函數(shù)或代碼段。如圖4中所示,步驟(2)表示在生成函數(shù)調(diào)用圖后,根據(jù)函數(shù)調(diào)用圖和待 保護(hù)函數(shù)集合,生成目標(biāo)節(jié)點(diǎn)集合。其中,待保護(hù)函數(shù)集合由用戶定義,集合的每一項(xiàng)為該 應(yīng)用待保護(hù)的關(guān)鍵函數(shù)的函數(shù)名。生成的目標(biāo)節(jié)點(diǎn)集合的每一項(xiàng)為待保護(hù)函數(shù)對應(yīng)的函數(shù) ID〇
[0109] 步驟四,構(gòu)造防御關(guān)聯(lián)
[0110] 構(gòu)造目標(biāo)節(jié)點(diǎn)與防御節(jié)點(diǎn)之間、防御節(jié)點(diǎn)與防御節(jié)點(diǎn)之間的關(guān)聯(lián)關(guān)系;
[0111] 如圖4所示,步驟(3)表示輸入步驟(1)(2)生成的函數(shù)調(diào)用圖和目標(biāo)節(jié)點(diǎn)集合,利 用防御網(wǎng)構(gòu)造算法結(jié)合中的算法,構(gòu)造防御網(wǎng)內(nèi)各節(jié)點(diǎn)間的關(guān)聯(lián)關(guān)系。算法包括兩類,一是 構(gòu)造目標(biāo)節(jié)點(diǎn)與防御節(jié)點(diǎn)間關(guān)聯(lián)的算法;二是構(gòu)造防御節(jié)點(diǎn)與防御節(jié)點(diǎn)間關(guān)聯(lián)的算法。由 于步驟(3)中節(jié)點(diǎn)間關(guān)聯(lián)關(guān)系構(gòu)造具有一定的隨機(jī)性,因此重復(fù)步驟(3)即可得到一組互不 相同的關(guān)系集合。關(guān)系集合每一項(xiàng)表示為三元組〈節(jié)點(diǎn)ID,觸發(fā)點(diǎn)所在函數(shù)ID,對應(yīng)防御節(jié) 點(diǎn)ID>,以文本的形式存儲在XML文件中。
[0112] 提高防御節(jié)點(diǎn)安全性,可以從兩方面進(jìn)行。一是提高節(jié)點(diǎn)自身的逆向和篡改難度。 在步驟一中,本方案利用Andro id JNI機(jī)制,將防御節(jié)點(diǎn)的核心功能代碼從安全性較低的 Java層通過C重寫的方式迀移到逆向和篡改難度較高的native層。另一方面,可以通過構(gòu)造 防御網(wǎng),在防御節(jié)點(diǎn)之間建立一定的關(guān)聯(lián)關(guān)系,使得防御節(jié)點(diǎn)之間互相保護(hù)。所謂關(guān)聯(lián),就 是在應(yīng)用中選擇合適的位置(函數(shù)體)進(jìn)行防御節(jié)點(diǎn)部署的過程,或指在應(yīng)用中已有的防御 節(jié)點(diǎn)間構(gòu)建保護(hù)關(guān)系的過程。
[0113]防御網(wǎng)由兩種節(jié)點(diǎn)構(gòu)成,一是程序中需要保護(hù)的目標(biāo)節(jié)點(diǎn),記為g;另一種是執(zhí)行 保護(hù)功能的防御節(jié)點(diǎn)。節(jié)點(diǎn)間的關(guān)聯(lián)關(guān)系,是指兩個節(jié)點(diǎn)間的單向的保護(hù)關(guān)系,通常包括兩 類,第一類是由防御節(jié)點(diǎn)指向?qū)?yīng)的目標(biāo)節(jié)點(diǎn),記為G_>g;第二類是指由防御節(jié)點(diǎn)指向需要 保護(hù)的其他防御節(jié)點(diǎn),記為G_>G' ;防御網(wǎng)實(shí)例如圖5所示,圖中G表示防御節(jié)點(diǎn),g表示目標(biāo) 節(jié)點(diǎn),節(jié)點(diǎn)間的單向連線表示保護(hù)關(guān)系。
[0114]構(gòu)造關(guān)聯(lián)關(guān)系時,需要滿足以下約束條件a至c:
[0115] a.每個目標(biāo)節(jié)點(diǎn)至少被一個防御節(jié)點(diǎn)J_Guard進(jìn)行保護(hù);
[0116] b.每個防御節(jié)點(diǎn)至少被除自身以外的兩個防御節(jié)點(diǎn)J_Guarc^PN_Guard保護(hù);
[0117] c. Android應(yīng)用程序執(zhí)行時,執(zhí)行保護(hù)功能的防御節(jié)點(diǎn)必須能夠在被保護(hù)節(jié)點(diǎn)執(zhí) 行時間附近及時執(zhí)行;
[0118]對于條件a,防御網(wǎng)內(nèi)的目標(biāo)節(jié)點(diǎn)一般為Android應(yīng)用中的一個自定義Java函數(shù), 設(shè)置目標(biāo)節(jié)點(diǎn)與至少一個具有函數(shù)保護(hù)功能的防御節(jié)點(diǎn)(即J_Guard)進(jìn)行關(guān)聯(lián);
[0119] 對于條件b,根據(jù)步驟一中防御節(jié)點(diǎn)構(gòu)造過程可知,每個防御節(jié)點(diǎn)的代碼部分包括 java層的觸發(fā)模塊和native層的主功能模塊,因此為了防止防御節(jié)點(diǎn)代碼被篡改,對每個 防御節(jié)點(diǎn)設(shè)置至少兩個防御節(jié)點(diǎn)進(jìn)行保護(hù),其中一個為J_Guard,負(fù)責(zé)保護(hù)防御節(jié)點(diǎn)的觸發(fā) 模塊,其中另一個SN_Guard,負(fù)責(zé)保護(hù)防御節(jié)點(diǎn)的主功能模塊;
[0120] 對于條件c,每個目標(biāo)節(jié)點(diǎn)或防御節(jié)點(diǎn)在選擇保護(hù)自己的防御節(jié)點(diǎn)時,需要考慮保 護(hù)功能的響應(yīng)及時性。所謂響應(yīng)及時性,是指當(dāng)被保護(hù)節(jié)點(diǎn)發(fā)生篡改時,對應(yīng)的防御節(jié)點(diǎn)能 及時的監(jiān)測到該攻擊并作出響應(yīng)。因此,應(yīng)選擇程序運(yùn)行時被保護(hù)節(jié)點(diǎn)執(zhí)行前后較近的防 御節(jié)點(diǎn)作為其防御節(jié)點(diǎn)。
[0121] 根據(jù)構(gòu)造關(guān)聯(lián)關(guān)系的3個約束條件,對防御網(wǎng)的構(gòu)造算法進(jìn)行設(shè)計(jì),具體設(shè)計(jì)與實(shí) 現(xiàn)如下:
[0122] 假設(shè)應(yīng)用中有Μ個目標(biāo)節(jié)點(diǎn),則每個目標(biāo)節(jié)點(diǎn)g的入度(In-degree)至少為1,記為 giN(i) > Ι,?^Μ;
[0123]假設(shè)應(yīng)用中Ν個防御節(jié)點(diǎn),貝lj每個防御節(jié)點(diǎn)G的入度(In-degree)至少為2,其中對 于每個入度,至少一個終點(diǎn)為J_Guard節(jié)點(diǎn),至少一個終點(diǎn)為N_Guard節(jié)點(diǎn),記為GinU )= Gin-JGuard(i)+GlN-NGuard(i) 2 2,iEN,其中Gin-JGuard(i) 2 landGlN-NGuard(i) 2 1。三種防御節(jié)點(diǎn) 中,除了D_Guard外,對于J_Guarc^PN_Guard節(jié)點(diǎn),每個節(jié)點(diǎn)的出度(Out-degree)至少為1, 記為G 0UT( i) 2 1,其中 G(i) g (Z)_ G歸-J。
[0124] 根據(jù)步驟一可知,對于D_Guard節(jié)點(diǎn),會執(zhí)行一種Hook函數(shù),根據(jù)節(jié)點(diǎn)內(nèi)Hook的 Java函數(shù)不同,D_Guard具有不同的類型。因此,D_Guard節(jié)點(diǎn)的具體類型和數(shù)量與實(shí)際的被 保護(hù)應(yīng)用有關(guān),同時該數(shù)量也可根據(jù)具體情況進(jìn)行人工調(diào)節(jié),例如應(yīng)用中Java函數(shù)Java/ io/FileWriter/〈init>的調(diào)用點(diǎn)數(shù)目為20,若設(shè)置對應(yīng)該函數(shù)的D_Guard數(shù)量上限為5,則 只對原程序中的任意5處調(diào)用點(diǎn)進(jìn)行Hook處理。
[0125]對于如何滿足約束條件c,本文提出了一種基于函數(shù)調(diào)用鏈的解決方式,方法如 下:
[0126] Android應(yīng)用程序的功能實(shí)現(xiàn)是由一個個函數(shù)構(gòu)成的,當(dāng)程序運(yùn)行時,多個函數(shù)按 照一定的時間順序依次執(zhí)行,這些函數(shù)組成了一個函數(shù)調(diào)用鏈,在同一個函數(shù)調(diào)用鏈中兩 個函數(shù)在執(zhí)行時間上接近;記兩個函數(shù)之間的函數(shù)個數(shù)稱為跳數(shù),則跳數(shù)越小,兩個函數(shù)的 執(zhí)行間隔越短,因此每個目標(biāo)節(jié)點(diǎn)或防御節(jié)點(diǎn)選擇與其跳數(shù)最小的防御節(jié)點(diǎn)作為其防御節(jié) 點(diǎn)。
[0127] 根據(jù)以上對3個約束條件的具體分析,防御網(wǎng)構(gòu)造時的主要算法如下:
[0128]
[Olzvj

[0130] 防御節(jié)AD_Guard的部署算法如下: 1
[0132]
[0133] 對于防御節(jié)點(diǎn)間保護(hù)關(guān)系的建立,其關(guān)聯(lián)算法如下:
[0134]
[0136] 步驟五,根據(jù)用戶輸入,生成對應(yīng)防御節(jié)點(diǎn)實(shí)例
[0137] 根據(jù)用戶定義的防御節(jié)點(diǎn)種類和數(shù)據(jù),在防御節(jié)點(diǎn)模板庫中選擇對應(yīng)種類的防御 節(jié)點(diǎn)的實(shí)現(xiàn)代碼,生成對應(yīng)的防御節(jié)點(diǎn)實(shí)例;
[0138] 為了保證防御網(wǎng)具有良好的可擴(kuò)展性,本文防御網(wǎng)構(gòu)造方案允許通過改變防御節(jié) 點(diǎn)數(shù)量來調(diào)節(jié)防御網(wǎng)的規(guī)模。圖4步驟(4)表示根據(jù)用戶定義的防御節(jié)點(diǎn)種類和數(shù)目,在防 御節(jié)點(diǎn)模板庫選擇對應(yīng)種類的防御節(jié)點(diǎn)的實(shí)現(xiàn)代碼,生成對應(yīng)的防御節(jié)點(diǎn)實(shí)例,實(shí)例的觸 發(fā)模塊實(shí)現(xiàn)存儲在.smal i代碼文件中,主功能模塊實(shí)現(xiàn)和關(guān)鍵信息模塊實(shí)現(xiàn)存儲在.c后綴 的代碼文件中。
[0139] 步驟六,生成并初始化防御網(wǎng)
[0140] 根據(jù)步驟四中構(gòu)造的防御關(guān)聯(lián),結(jié)合步驟五中生成的防御節(jié)點(diǎn)實(shí)例,進(jìn)行防御網(wǎng) 的初始化,該防御網(wǎng)包括防御節(jié)點(diǎn)和目標(biāo)節(jié)點(diǎn)以及防御關(guān)聯(lián);
[0141] 如圖4,步驟(5)表示結(jié)合步驟(3)得到的防御網(wǎng)內(nèi)節(jié)點(diǎn)間關(guān)聯(lián)關(guān)系集和步驟(4)生 成的防御節(jié)點(diǎn)實(shí)例,進(jìn)行防御網(wǎng)的初始化。具體初始化過程包括:首先會解析步驟(3)得到 的一組節(jié)點(diǎn)關(guān)聯(lián)關(guān)系集合,獲取各節(jié)點(diǎn)編號,對應(yīng)觸發(fā)模塊綁定函數(shù)ID,然后計(jì)算各防御節(jié) 點(diǎn)對應(yīng)保護(hù)目標(biāo)的hash值,最后根據(jù)以上
當(dāng)前第3頁1 2 3 4 5 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
新化县| 永平县| 洞口县| 万山特区| 乌苏市| 哈密市| 涿鹿县| 丹凤县| 微山县| 涿鹿县| 洪洞县| 大安市| 镇平县| 崇州市| 右玉县| 丽江市| 乌恰县| 长丰县| 鄯善县| 扎鲁特旗| 常德市| 郁南县| 保靖县| 武胜县| 盐源县| 犍为县| 彩票| 堆龙德庆县| 城固县| 宁安市| 淄博市| 玉溪市| 临夏市| 海城市| 霍邱县| 嘉鱼县| 黔江区| 定远县| 博兴县| 怀远县| 黄浦区|